annotate vc1.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 5915f4f0e172
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4900
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
1 /*
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
2 * VC-1 and WMV3 decoder
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
3 * Copyright (c) 2006-2007 Konstantin Shishkov
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
4 * Partly based on vc9.c (c) 2005 Anonymous, Alex Beregszaszi, Michael Niedermayer
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
5 *
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
6 * This file is part of FFmpeg.
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
7 *
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
12 *
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
16 * Lesser General Public License for more details.
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
17 *
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
21 */
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
22
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7355
diff changeset
23 #ifndef AVCODEC_VC1_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7355
diff changeset
24 #define AVCODEC_VC1_H
5163
9ecbfc0c82bf add multiple inclusion guards to headers
mru
parents: 4927
diff changeset
25
4927
270c8a34f234 Make vc1_parser.c compilable without special defines
kostya
parents: 4926
diff changeset
26 #include "avcodec.h"
270c8a34f234 Make vc1_parser.c compilable without special defines
kostya
parents: 4926
diff changeset
27 #include "mpegvideo.h"
5887
83ac4620c6ed intrax8 decoder patch by "someone"
michael
parents: 5830
diff changeset
28 #include "intrax8.h"
4927
270c8a34f234 Make vc1_parser.c compilable without special defines
kostya
parents: 4926
diff changeset
29
4903
kostya
parents: 4902
diff changeset
30 /** Markers used in VC-1 AP frame data */
4900
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
31 //@{
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
32 enum VC1Code{
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
33 VC1_CODE_RES0 = 0x00000100,
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
34 VC1_CODE_ENDOFSEQ = 0x0000010A,
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
35 VC1_CODE_SLICE,
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
36 VC1_CODE_FIELD,
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
37 VC1_CODE_FRAME,
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
38 VC1_CODE_ENTRYPOINT,
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
39 VC1_CODE_SEQHDR,
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
40 };
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
41 //@}
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
42
36051a4c182a Move VC1 parser to its own file.
diego
parents:
diff changeset
43 #define IS_MARKER(x) (((x) & ~0xFF) == VC1_CODE_RES0)
4902
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
44
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
45 /** Available Profiles */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
46 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
47 enum Profile {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
48 PROFILE_SIMPLE,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
49 PROFILE_MAIN,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
50 PROFILE_COMPLEX, ///< TODO: WMV9 specific
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
51 PROFILE_ADVANCED
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
52 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
53 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
54
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
55 /** Sequence quantizer mode */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
56 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
57 enum QuantMode {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
58 QUANT_FRAME_IMPLICIT, ///< Implicitly specified at frame level
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
59 QUANT_FRAME_EXPLICIT, ///< Explicitly specified at frame level
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
60 QUANT_NON_UNIFORM, ///< Non-uniform quant used for all frames
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
61 QUANT_UNIFORM ///< Uniform quant used for all frames
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
62 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
63 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
64
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
65 /** Where quant can be changed */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
66 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
67 enum DQProfile {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
68 DQPROFILE_FOUR_EDGES,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
69 DQPROFILE_DOUBLE_EDGES,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
70 DQPROFILE_SINGLE_EDGE,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
71 DQPROFILE_ALL_MBS
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
72 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
73 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
74
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
75 /** @name Where quant can be changed
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
76 */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
77 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
78 enum DQSingleEdge {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
79 DQSINGLE_BEDGE_LEFT,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
80 DQSINGLE_BEDGE_TOP,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
81 DQSINGLE_BEDGE_RIGHT,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
82 DQSINGLE_BEDGE_BOTTOM
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
83 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
84 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
85
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
86 /** Which pair of edges is quantized with ALTPQUANT */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
87 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
88 enum DQDoubleEdge {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
89 DQDOUBLE_BEDGE_TOPLEFT,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
90 DQDOUBLE_BEDGE_TOPRIGHT,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
91 DQDOUBLE_BEDGE_BOTTOMRIGHT,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
92 DQDOUBLE_BEDGE_BOTTOMLEFT
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
93 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
94 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
95
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
96 /** MV modes for P frames */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
97 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
98 enum MVModes {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
99 MV_PMODE_1MV_HPEL_BILIN,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
100 MV_PMODE_1MV,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
101 MV_PMODE_1MV_HPEL,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
102 MV_PMODE_MIXED_MV,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
103 MV_PMODE_INTENSITY_COMP
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
104 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
105 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
106
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
107 /** @name MV types for B frames */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
108 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
109 enum BMVTypes {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
110 BMV_TYPE_BACKWARD,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
111 BMV_TYPE_FORWARD,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
112 BMV_TYPE_INTERPOLATED
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
113 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
114 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
115
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
116 /** @name Block types for P/B frames */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
117 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
118 enum TransformTypes {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
119 TT_8X8,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
120 TT_8X4_BOTTOM,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
121 TT_8X4_TOP,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
122 TT_8X4, //Both halves
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
123 TT_4X8_RIGHT,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
124 TT_4X8_LEFT,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
125 TT_4X8, //Both halves
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
126 TT_4X4
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
127 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
128 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
129
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
130 enum CodingSet {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
131 CS_HIGH_MOT_INTRA = 0,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
132 CS_HIGH_MOT_INTER,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
133 CS_LOW_MOT_INTRA,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
134 CS_LOW_MOT_INTER,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
135 CS_MID_RATE_INTRA,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
136 CS_MID_RATE_INTER,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
137 CS_HIGH_RATE_INTRA,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
138 CS_HIGH_RATE_INTER
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
139 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
140
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
141 /** @name Overlap conditions for Advanced Profile */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
142 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
143 enum COTypes {
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
144 CONDOVER_NONE = 0,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
145 CONDOVER_ALL,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
146 CONDOVER_SELECT
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
147 };
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
148 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
149
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
150
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
151 /** The VC1 Context
5299
4623928e3b9e Replace non-existing @fixme doxygen tags with @todo.
diego
parents: 5169
diff changeset
152 * @todo Change size wherever another size is more efficient
4902
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
153 * Many members are only used for Advanced Profile
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
154 */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
155 typedef struct VC1Context{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
156 MpegEncContext s;
5887
83ac4620c6ed intrax8 decoder patch by "someone"
michael
parents: 5830
diff changeset
157 IntraX8Context x8;
4902
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
158
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
159 int bits;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
160
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
161 /** Simple/Main Profile sequence header */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
162 //@{
12520
5915f4f0e172 RES_SM in WMV3 is really two flags, so split it in decoder
kostya
parents: 10379
diff changeset
163 int res_sprite; ///< reserved, sprite mode
5915f4f0e172 RES_SM in WMV3 is really two flags, so split it in decoder
kostya
parents: 10379
diff changeset
164 int res_y411; ///< reserved, old interlaced mode
4902
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
165 int res_x8; ///< reserved
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
166 int multires; ///< frame-level RESPIC syntax element present
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
167 int res_fasttx; ///< reserved, always 1
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
168 int res_transtab; ///< reserved, always 0
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
169 int rangered; ///< RANGEREDFRM (range reduction) syntax element present
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
170 ///< at frame level
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
171 int res_rtm_flag; ///< reserved, set to 1
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
172 int reserved; ///< reserved
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
173 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
174
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
175 /** Advanced Profile */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
176 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
177 int level; ///< 3bits, for Advanced/Simple Profile, provided by TS layer
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
178 int chromaformat; ///< 2bits, 2=4:2:0, only defined
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
179 int postprocflag; ///< Per-frame processing suggestion flag present
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
180 int broadcast; ///< TFF/RFF present
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
181 int interlace; ///< Progressive/interlaced (RPTFTM syntax element)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
182 int tfcntrflag; ///< TFCNTR present
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
183 int panscanflag; ///< NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present
8556
ce9d640decd1 Add refdist_flag to VC1Context.
cehoyos
parents: 7760
diff changeset
184 int refdist_flag; ///< REFDIST syntax element present in II, IP, PI or PP field picture headers
4902
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
185 int extended_dmv; ///< Additional extended dmv range at P/B frame-level
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
186 int color_prim; ///< 8bits, chroma coordinates of the color primaries
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
187 int transfer_char; ///< 8bits, Opto-electronic transfer characteristics
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
188 int matrix_coef; ///< 8bits, Color primaries->YCbCr transform matrix
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
189 int hrd_param_flag; ///< Presence of Hypothetical Reference
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
190 ///< Decoder parameters
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
191 int psf; ///< Progressive Segmented Frame
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
192 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
193
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
194 /** Sequence header data for all Profiles
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
195 * TODO: choose between ints, uint8_ts and monobit flags
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
196 */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
197 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
198 int profile; ///< 2bits, Profile
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
199 int frmrtq_postproc; ///< 3bits,
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
200 int bitrtq_postproc; ///< 5bits, quantized framerate-based postprocessing strength
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
201 int fastuvmc; ///< Rounding of qpel vector to hpel ? (not in Simple)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
202 int extended_mv; ///< Ext MV in P/B (not in Simple)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
203 int dquant; ///< How qscale varies with MBs, 2bits (not in Simple)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
204 int vstransform; ///< variable-size [48]x[48] transform type + info
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
205 int overlap; ///< overlapped transforms in use
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
206 int quantizer_mode; ///< 2bits, quantizer mode used for sequence, see QUANT_*
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
207 int finterpflag; ///< INTERPFRM present
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
208 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
209
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
210 /** Frame decoding info for all profiles */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
211 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
212 uint8_t mv_mode; ///< MV coding monde
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
213 uint8_t mv_mode2; ///< Secondary MV coding mode (B frames)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
214 int k_x; ///< Number of bits for MVs (depends on MV range)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
215 int k_y; ///< Number of bits for MVs (depends on MV range)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
216 int range_x, range_y; ///< MV range
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
217 uint8_t pq, altpq; ///< Current/alternate frame quantizer scale
6145
ddf5d7fae101 Select scan tables for 8x4 and 4x8 blocks only once.
kostya
parents: 5887
diff changeset
218 const uint8_t* zz_8x4;///< Zigzag scan table for TT_8x4 coding mode
ddf5d7fae101 Select scan tables for 8x4 and 4x8 blocks only once.
kostya
parents: 5887
diff changeset
219 const uint8_t* zz_4x8;///< Zigzag scan table for TT_4x8 coding mode
4902
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
220 /** pquant parameters */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
221 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
222 uint8_t dquantfrm;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
223 uint8_t dqprofile;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
224 uint8_t dqsbedge;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
225 uint8_t dqbilevel;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
226 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
227 /** AC coding set indexes
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
228 * @see 8.1.1.10, p(1)10
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
229 */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
230 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
231 int c_ac_table_index; ///< Chroma index from ACFRM element
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
232 int y_ac_table_index; ///< Luma index from AC2FRM element
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
233 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
234 int ttfrm; ///< Transform type info present at frame level
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
235 uint8_t ttmbf; ///< Transform type flag
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
236 uint8_t ttblk4x4; ///< Value of ttblk which indicates a 4x4 transform
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
237 int codingset; ///< index of current table set from 11.8 to use for luma block decoding
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
238 int codingset2; ///< index of current table set from 11.8 to use for chroma block decoding
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
239 int pqindex; ///< raw pqindex used in coding set selection
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
240 int a_avail, c_avail;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
241 uint8_t *mb_type_base, *mb_type[3];
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
242
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
243
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
244 /** Luma compensation parameters */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
245 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
246 uint8_t lumscale;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
247 uint8_t lumshift;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
248 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
249 int16_t bfraction; ///< Relative position % anchors=> how to scale MVs
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
250 uint8_t halfpq; ///< Uniform quant over image and qp+.5
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
251 uint8_t respic; ///< Frame-level flag for resized images
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
252 int buffer_fullness; ///< HRD info
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
253 /** Ranges:
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
254 * -# 0 -> [-64n 63.f] x [-32, 31.f]
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
255 * -# 1 -> [-128, 127.f] x [-64, 63.f]
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
256 * -# 2 -> [-512, 511.f] x [-128, 127.f]
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
257 * -# 3 -> [-1024, 1023.f] x [-256, 255.f]
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
258 */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
259 uint8_t mvrange;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
260 uint8_t pquantizer; ///< Uniform (over sequence) quantizer in use
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
261 VLC *cbpcy_vlc; ///< CBPCY VLC table
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
262 int tt_index; ///< Index for Transform Type tables
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
263 uint8_t* mv_type_mb_plane; ///< bitplane for mv_type == (4MV)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
264 uint8_t* direct_mb_plane; ///< bitplane for "direct" MBs
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
265 int mv_type_is_raw; ///< mv type mb plane is not coded
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
266 int dmb_is_raw; ///< direct mb plane is raw
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
267 int skip_is_raw; ///< skip mb plane is not coded
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
268 uint8_t luty[256], lutuv[256]; // lookup tables used for intensity compensation
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
269 int use_ic; ///< use intensity compensation in B-frames
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
270 int rnd; ///< rounding control
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
271
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
272 /** Frame decoding info for S/M profiles only */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
273 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
274 uint8_t rangeredfrm; ///< out_sample = CLIP((in_sample-128)*2+128)
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
275 uint8_t interpfrm;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
276 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
277
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
278 /** Frame decoding info for Advanced profile */
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
279 //@{
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
280 uint8_t fcm; ///< 0->Progressive, 2->Frame-Interlace, 3->Field-Interlace
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
281 uint8_t numpanscanwin;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
282 uint8_t tfcntr;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
283 uint8_t rptfrm, tff, rff;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
284 uint16_t topleftx;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
285 uint16_t toplefty;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
286 uint16_t bottomrightx;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
287 uint16_t bottomrighty;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
288 uint8_t uvsamp;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
289 uint8_t postproc;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
290 int hrd_num_leaky_buckets;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
291 uint8_t bit_rate_exponent;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
292 uint8_t buffer_size_exponent;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
293 uint8_t* acpred_plane; ///< AC prediction flags bitplane
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
294 int acpred_is_raw;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
295 uint8_t* over_flags_plane; ///< Overflags bitplane
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
296 int overflg_is_raw;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
297 uint8_t condover;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
298 uint16_t *hrd_rate, *hrd_buffer;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
299 uint8_t *hrd_fullness;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
300 uint8_t range_mapy_flag;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
301 uint8_t range_mapuv_flag;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
302 uint8_t range_mapy;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
303 uint8_t range_mapuv;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
304 //@}
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
305
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
306 int p_frame_skipped;
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
307 int bi_type;
5887
83ac4620c6ed intrax8 decoder patch by "someone"
michael
parents: 5830
diff changeset
308 int x8_type;
7355
5719e2c85aa3 In-loop deblocking filter for VC-1 decoder
kostya
parents: 6481
diff changeset
309
5719e2c85aa3 In-loop deblocking filter for VC-1 decoder
kostya
parents: 6481
diff changeset
310 uint32_t *cbp_base, *cbp;
8692
48442253aac2 Record B-fraction index from frame header and two fields from entry point structure
kostya
parents: 8556
diff changeset
311 uint8_t bfraction_lut_index;///< Index for BFRACTION value (see Table 40, reproduced into ff_vc1_bfraction_lut[])
48442253aac2 Record B-fraction index from frame header and two fields from entry point structure
kostya
parents: 8556
diff changeset
312 uint8_t broken_link; ///< Broken link flag (BROKEN_LINK syntax element)
48442253aac2 Record B-fraction index from frame header and two fields from entry point structure
kostya
parents: 8556
diff changeset
313 uint8_t closed_entry; ///< Closed entry point flag (CLOSED_ENTRY syntax element)
9732
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
314
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
315 int parse_only; ///< Context is used within parser
10379
d580026275a1 Print error message when true interlaced VC-1 frames are encountered
kostya
parents: 9732
diff changeset
316
d580026275a1 Print error message when true interlaced VC-1 frames are encountered
kostya
parents: 9732
diff changeset
317 int warn_interlaced;
4902
1296fd337cdf Move some declarations into header
kostya
parents: 4900
diff changeset
318 } VC1Context;
5163
9ecbfc0c82bf add multiple inclusion guards to headers
mru
parents: 4927
diff changeset
319
9732
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
320 /** Find VC-1 marker in buffer
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
321 * @return position where next marker starts or end of buffer if no marker found
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
322 */
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
323 static av_always_inline const uint8_t* find_next_marker(const uint8_t *src, const uint8_t *end)
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
324 {
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
325 uint32_t mrk = 0xFFFFFFFF;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
326
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
327 if(end-src < 4) return end;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
328 while(src < end){
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
329 mrk = (mrk << 8) | *src++;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
330 if(IS_MARKER(mrk))
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
331 return src-4;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
332 }
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
333 return end;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
334 }
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
335
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
336 static av_always_inline int vc1_unescape_buffer(const uint8_t *src, int size, uint8_t *dst)
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
337 {
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
338 int dsize = 0, i;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
339
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
340 if(size < 4){
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
341 for(dsize = 0; dsize < size; dsize++) *dst++ = *src++;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
342 return size;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
343 }
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
344 for(i = 0; i < size; i++, src++) {
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
345 if(src[0] == 3 && i >= 2 && !src[-1] && !src[-2] && i < size-1 && src[1] < 4) {
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
346 dst[dsize++] = src[1];
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
347 src++;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
348 i++;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
349 } else
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
350 dst[dsize++] = *src;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
351 }
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
352 return dsize;
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
353 }
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
354
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
355 /**
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
356 * Decode Simple/Main Profiles sequence header
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
357 * @see Figure 7-8, p16-17
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
358 * @param avctx Codec context
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
359 * @param gb GetBit context initialized from Codec context extra_data
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
360 * @return Status
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
361 */
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
362 int vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb);
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
363
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
364 int vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb);
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
365
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
366 int vc1_parse_frame_header (VC1Context *v, GetBitContext *gb);
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
367 int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext *gb);
c25359a56edf set pict_type in VC-1 parser, fix some timestamps problems
bcoudurier
parents: 8692
diff changeset
368
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7355
diff changeset
369 #endif /* AVCODEC_VC1_H */