/src/ffmpeg/libavcodec/vc1_common.h
Line | Count | Source |
1 | | /* |
2 | | * VC-1 and WMV3 decoder |
3 | | * Copyright (c) 2006-2007 Konstantin Shishkov |
4 | | * Partly based on vc9.c (c) 2005 Anonymous, Alex Beregszaszi, Michael Niedermayer |
5 | | * |
6 | | * This file is part of FFmpeg. |
7 | | * |
8 | | * FFmpeg is free software; you can redistribute it and/or |
9 | | * modify it under the terms of the GNU Lesser General Public |
10 | | * License as published by the Free Software Foundation; either |
11 | | * version 2.1 of the License, or (at your option) any later version. |
12 | | * |
13 | | * FFmpeg is distributed in the hope that it will be useful, |
14 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 | | * Lesser General Public License for more details. |
17 | | * |
18 | | * You should have received a copy of the GNU Lesser General Public |
19 | | * License along with FFmpeg; if not, write to the Free Software |
20 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | | */ |
22 | | |
23 | | #ifndef AVCODEC_VC1_COMMON_H |
24 | | #define AVCODEC_VC1_COMMON_H |
25 | | |
26 | | #include <stdint.h> |
27 | | |
28 | | #include "libavutil/attributes.h" |
29 | | #include "startcode.h" |
30 | | |
31 | | /** Markers used in VC-1 AP frame data */ |
32 | | //@{ |
33 | | enum VC1Code { |
34 | | VC1_CODE_RES0 = 0x00000100, |
35 | | VC1_CODE_ENDOFSEQ = 0x0000010A, |
36 | | VC1_CODE_SLICE, |
37 | | VC1_CODE_FIELD, |
38 | | VC1_CODE_FRAME, |
39 | | VC1_CODE_ENTRYPOINT, |
40 | | VC1_CODE_SEQHDR, |
41 | | }; |
42 | | //@} |
43 | | |
44 | 2.64M | #define IS_MARKER(x) (((x) & ~0xFF) == VC1_CODE_RES0) |
45 | | |
46 | | /** Available Profiles */ |
47 | | //@{ |
48 | | enum Profile { |
49 | | PROFILE_SIMPLE, |
50 | | PROFILE_MAIN, |
51 | | PROFILE_COMPLEX, ///< TODO: WMV9 specific |
52 | | PROFILE_ADVANCED |
53 | | }; |
54 | | //@} |
55 | | |
56 | | /** Find VC-1 marker in buffer |
57 | | * @return position where next marker starts or end of buffer if no marker found |
58 | | */ |
59 | | static av_always_inline const uint8_t* find_next_marker(const uint8_t *src, const uint8_t *end) |
60 | 1.98M | { |
61 | 1.98M | if (end - src >= 4) { |
62 | 1.96M | uint32_t mrk = 0xFFFFFFFF; |
63 | 1.96M | src = avpriv_find_start_code(src, end, &mrk); |
64 | 1.96M | if (IS_MARKER(mrk)) |
65 | 1.50M | return src - 4; |
66 | 1.96M | } |
67 | 478k | return end; |
68 | 1.98M | } Unexecuted instantiation: vc1_parser.c:find_next_marker Unexecuted instantiation: vc1dsp.c:find_next_marker Unexecuted instantiation: extract_extradata.c:find_next_marker Unexecuted instantiation: remove_extradata.c:find_next_marker Unexecuted instantiation: vc1.c:find_next_marker Unexecuted instantiation: vc1data.c:find_next_marker vc1dec.c:find_next_marker Line | Count | Source | 60 | 1.98M | { | 61 | 1.98M | if (end - src >= 4) { | 62 | 1.96M | uint32_t mrk = 0xFFFFFFFF; | 63 | 1.96M | src = avpriv_find_start_code(src, end, &mrk); | 64 | 1.96M | if (IS_MARKER(mrk)) | 65 | 1.50M | return src - 4; | 66 | 1.96M | } | 67 | 478k | return end; | 68 | 1.98M | } |
Unexecuted instantiation: vc1_block.c:find_next_marker Unexecuted instantiation: vc1_loopfilter.c:find_next_marker Unexecuted instantiation: vc1_mc.c:find_next_marker Unexecuted instantiation: vc1_pred.c:find_next_marker Unexecuted instantiation: mss2.c:find_next_marker |
69 | | |
70 | | static av_always_inline int vc1_unescape_buffer(const uint8_t *src, int size, uint8_t *dst) |
71 | 1.59M | { |
72 | 1.59M | int dsize = 0, i; |
73 | | |
74 | 1.59M | if (size < 4) { |
75 | 935k | for (dsize = 0; dsize < size; dsize++) |
76 | 616k | *dst++ = *src++; |
77 | 319k | return size; |
78 | 319k | } |
79 | 381M | for (i = 0; i < size; i++, src++) { |
80 | 380M | if (src[0] == 3 && i >= 2 && !src[-1] && !src[-2] && i < size-1 && src[1] < 4) { |
81 | 106k | dst[dsize++] = src[1]; |
82 | 106k | src++; |
83 | 106k | i++; |
84 | 106k | } else |
85 | 380M | dst[dsize++] = *src; |
86 | 380M | } |
87 | 1.27M | return dsize; |
88 | 1.59M | } Unexecuted instantiation: vc1_parser.c:vc1_unescape_buffer vc1dsp.c:vc1_unescape_buffer Line | Count | Source | 71 | 1.59M | { | 72 | 1.59M | int dsize = 0, i; | 73 | | | 74 | 1.59M | if (size < 4) { | 75 | 935k | for (dsize = 0; dsize < size; dsize++) | 76 | 616k | *dst++ = *src++; | 77 | 319k | return size; | 78 | 319k | } | 79 | 381M | for (i = 0; i < size; i++, src++) { | 80 | 380M | if (src[0] == 3 && i >= 2 && !src[-1] && !src[-2] && i < size-1 && src[1] < 4) { | 81 | 106k | dst[dsize++] = src[1]; | 82 | 106k | src++; | 83 | 106k | i++; | 84 | 106k | } else | 85 | 380M | dst[dsize++] = *src; | 86 | 380M | } | 87 | 1.27M | return dsize; | 88 | 1.59M | } |
Unexecuted instantiation: extract_extradata.c:vc1_unescape_buffer Unexecuted instantiation: remove_extradata.c:vc1_unescape_buffer Unexecuted instantiation: vc1.c:vc1_unescape_buffer Unexecuted instantiation: vc1data.c:vc1_unescape_buffer Unexecuted instantiation: vc1dec.c:vc1_unescape_buffer Unexecuted instantiation: vc1_block.c:vc1_unescape_buffer Unexecuted instantiation: vc1_loopfilter.c:vc1_unescape_buffer Unexecuted instantiation: vc1_mc.c:vc1_unescape_buffer Unexecuted instantiation: vc1_pred.c:vc1_unescape_buffer Unexecuted instantiation: mss2.c:vc1_unescape_buffer |
89 | | |
90 | | #endif /* AVCODEC_VC1_COMMON_H */ |