Mercurial > libavcodec.hg
annotate vc1.h @ 6323:e6da66f378c7 libavcodec
mpegvideo.h has two function declarations with the 'inline' specifier
but no definition for those functions. The C standard requires a
definition to appear in the same translation unit for any function
declared with 'inline'. Most of the files including mpegvideo.h do not
define those functions. Fix this by removing the 'inline' specifiers
from the header.
patch by Uoti Urpala
author | diego |
---|---|
date | Sun, 03 Feb 2008 17:54:30 +0000 |
parents | ddf5d7fae101 |
children | ff4fa36b555e |
rev | line source |
---|---|
4900 | 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 | |
5830
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5299
diff
changeset
|
23 #ifndef FFMPEG_VC1_H |
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5299
diff
changeset
|
24 #define FFMPEG_VC1_H |
5163 | 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 | 28 #include "intrax8.h" |
4927
270c8a34f234
Make vc1_parser.c compilable without special defines
kostya
parents:
4926
diff
changeset
|
29 |
4903 | 30 /** Markers used in VC-1 AP frame data */ |
4900 | 31 //@{ |
32 enum VC1Code{ | |
33 VC1_CODE_RES0 = 0x00000100, | |
34 VC1_CODE_ENDOFSEQ = 0x0000010A, | |
35 VC1_CODE_SLICE, | |
36 VC1_CODE_FIELD, | |
37 VC1_CODE_FRAME, | |
38 VC1_CODE_ENTRYPOINT, | |
39 VC1_CODE_SEQHDR, | |
40 }; | |
41 //@} | |
42 | |
43 #define IS_MARKER(x) (((x) & ~0xFF) == VC1_CODE_RES0) | |
4902 | 44 |
45 /** Available Profiles */ | |
46 //@{ | |
47 enum Profile { | |
48 PROFILE_SIMPLE, | |
49 PROFILE_MAIN, | |
50 PROFILE_COMPLEX, ///< TODO: WMV9 specific | |
51 PROFILE_ADVANCED | |
52 }; | |
53 //@} | |
54 | |
55 /** Sequence quantizer mode */ | |
56 //@{ | |
57 enum QuantMode { | |
58 QUANT_FRAME_IMPLICIT, ///< Implicitly specified at frame level | |
59 QUANT_FRAME_EXPLICIT, ///< Explicitly specified at frame level | |
60 QUANT_NON_UNIFORM, ///< Non-uniform quant used for all frames | |
61 QUANT_UNIFORM ///< Uniform quant used for all frames | |
62 }; | |
63 //@} | |
64 | |
65 /** Where quant can be changed */ | |
66 //@{ | |
67 enum DQProfile { | |
68 DQPROFILE_FOUR_EDGES, | |
69 DQPROFILE_DOUBLE_EDGES, | |
70 DQPROFILE_SINGLE_EDGE, | |
71 DQPROFILE_ALL_MBS | |
72 }; | |
73 //@} | |
74 | |
75 /** @name Where quant can be changed | |
76 */ | |
77 //@{ | |
78 enum DQSingleEdge { | |
79 DQSINGLE_BEDGE_LEFT, | |
80 DQSINGLE_BEDGE_TOP, | |
81 DQSINGLE_BEDGE_RIGHT, | |
82 DQSINGLE_BEDGE_BOTTOM | |
83 }; | |
84 //@} | |
85 | |
86 /** Which pair of edges is quantized with ALTPQUANT */ | |
87 //@{ | |
88 enum DQDoubleEdge { | |
89 DQDOUBLE_BEDGE_TOPLEFT, | |
90 DQDOUBLE_BEDGE_TOPRIGHT, | |
91 DQDOUBLE_BEDGE_BOTTOMRIGHT, | |
92 DQDOUBLE_BEDGE_BOTTOMLEFT | |
93 }; | |
94 //@} | |
95 | |
96 /** MV modes for P frames */ | |
97 //@{ | |
98 enum MVModes { | |
99 MV_PMODE_1MV_HPEL_BILIN, | |
100 MV_PMODE_1MV, | |
101 MV_PMODE_1MV_HPEL, | |
102 MV_PMODE_MIXED_MV, | |
103 MV_PMODE_INTENSITY_COMP | |
104 }; | |
105 //@} | |
106 | |
107 /** @name MV types for B frames */ | |
108 //@{ | |
109 enum BMVTypes { | |
110 BMV_TYPE_BACKWARD, | |
111 BMV_TYPE_FORWARD, | |
112 BMV_TYPE_INTERPOLATED | |
113 }; | |
114 //@} | |
115 | |
116 /** @name Block types for P/B frames */ | |
117 //@{ | |
118 enum TransformTypes { | |
119 TT_8X8, | |
120 TT_8X4_BOTTOM, | |
121 TT_8X4_TOP, | |
122 TT_8X4, //Both halves | |
123 TT_4X8_RIGHT, | |
124 TT_4X8_LEFT, | |
125 TT_4X8, //Both halves | |
126 TT_4X4 | |
127 }; | |
128 //@} | |
129 | |
130 /** One more frame type */ | |
131 #define BI_TYPE 7 | |
132 | |
133 enum CodingSet { | |
134 CS_HIGH_MOT_INTRA = 0, | |
135 CS_HIGH_MOT_INTER, | |
136 CS_LOW_MOT_INTRA, | |
137 CS_LOW_MOT_INTER, | |
138 CS_MID_RATE_INTRA, | |
139 CS_MID_RATE_INTER, | |
140 CS_HIGH_RATE_INTRA, | |
141 CS_HIGH_RATE_INTER | |
142 }; | |
143 | |
144 /** @name Overlap conditions for Advanced Profile */ | |
145 //@{ | |
146 enum COTypes { | |
147 CONDOVER_NONE = 0, | |
148 CONDOVER_ALL, | |
149 CONDOVER_SELECT | |
150 }; | |
151 //@} | |
152 | |
153 | |
154 /** The VC1 Context | |
5299
4623928e3b9e
Replace non-existing @fixme doxygen tags with @todo.
diego
parents:
5169
diff
changeset
|
155 * @todo Change size wherever another size is more efficient |
4902 | 156 * Many members are only used for Advanced Profile |
157 */ | |
158 typedef struct VC1Context{ | |
159 MpegEncContext s; | |
5887 | 160 IntraX8Context x8; |
4902 | 161 |
162 int bits; | |
163 | |
164 /** Simple/Main Profile sequence header */ | |
165 //@{ | |
166 int res_sm; ///< reserved, 2b | |
167 int res_x8; ///< reserved | |
168 int multires; ///< frame-level RESPIC syntax element present | |
169 int res_fasttx; ///< reserved, always 1 | |
170 int res_transtab; ///< reserved, always 0 | |
171 int rangered; ///< RANGEREDFRM (range reduction) syntax element present | |
172 ///< at frame level | |
173 int res_rtm_flag; ///< reserved, set to 1 | |
174 int reserved; ///< reserved | |
175 //@} | |
176 | |
177 /** Advanced Profile */ | |
178 //@{ | |
179 int level; ///< 3bits, for Advanced/Simple Profile, provided by TS layer | |
180 int chromaformat; ///< 2bits, 2=4:2:0, only defined | |
181 int postprocflag; ///< Per-frame processing suggestion flag present | |
182 int broadcast; ///< TFF/RFF present | |
183 int interlace; ///< Progressive/interlaced (RPTFTM syntax element) | |
184 int tfcntrflag; ///< TFCNTR present | |
185 int panscanflag; ///< NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present | |
186 int extended_dmv; ///< Additional extended dmv range at P/B frame-level | |
187 int color_prim; ///< 8bits, chroma coordinates of the color primaries | |
188 int transfer_char; ///< 8bits, Opto-electronic transfer characteristics | |
189 int matrix_coef; ///< 8bits, Color primaries->YCbCr transform matrix | |
190 int hrd_param_flag; ///< Presence of Hypothetical Reference | |
191 ///< Decoder parameters | |
192 int psf; ///< Progressive Segmented Frame | |
193 //@} | |
194 | |
195 /** Sequence header data for all Profiles | |
196 * TODO: choose between ints, uint8_ts and monobit flags | |
197 */ | |
198 //@{ | |
199 int profile; ///< 2bits, Profile | |
200 int frmrtq_postproc; ///< 3bits, | |
201 int bitrtq_postproc; ///< 5bits, quantized framerate-based postprocessing strength | |
202 int fastuvmc; ///< Rounding of qpel vector to hpel ? (not in Simple) | |
203 int extended_mv; ///< Ext MV in P/B (not in Simple) | |
204 int dquant; ///< How qscale varies with MBs, 2bits (not in Simple) | |
205 int vstransform; ///< variable-size [48]x[48] transform type + info | |
206 int overlap; ///< overlapped transforms in use | |
207 int quantizer_mode; ///< 2bits, quantizer mode used for sequence, see QUANT_* | |
208 int finterpflag; ///< INTERPFRM present | |
209 //@} | |
210 | |
211 /** Frame decoding info for all profiles */ | |
212 //@{ | |
213 uint8_t mv_mode; ///< MV coding monde | |
214 uint8_t mv_mode2; ///< Secondary MV coding mode (B frames) | |
215 int k_x; ///< Number of bits for MVs (depends on MV range) | |
216 int k_y; ///< Number of bits for MVs (depends on MV range) | |
217 int range_x, range_y; ///< MV range | |
218 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
|
219 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
|
220 const uint8_t* zz_4x8;///< Zigzag scan table for TT_4x8 coding mode |
4902 | 221 /** pquant parameters */ |
222 //@{ | |
223 uint8_t dquantfrm; | |
224 uint8_t dqprofile; | |
225 uint8_t dqsbedge; | |
226 uint8_t dqbilevel; | |
227 //@} | |
228 /** AC coding set indexes | |
229 * @see 8.1.1.10, p(1)10 | |
230 */ | |
231 //@{ | |
232 int c_ac_table_index; ///< Chroma index from ACFRM element | |
233 int y_ac_table_index; ///< Luma index from AC2FRM element | |
234 //@} | |
235 int ttfrm; ///< Transform type info present at frame level | |
236 uint8_t ttmbf; ///< Transform type flag | |
237 uint8_t ttblk4x4; ///< Value of ttblk which indicates a 4x4 transform | |
238 int codingset; ///< index of current table set from 11.8 to use for luma block decoding | |
239 int codingset2; ///< index of current table set from 11.8 to use for chroma block decoding | |
240 int pqindex; ///< raw pqindex used in coding set selection | |
241 int a_avail, c_avail; | |
242 uint8_t *mb_type_base, *mb_type[3]; | |
243 | |
244 | |
245 /** Luma compensation parameters */ | |
246 //@{ | |
247 uint8_t lumscale; | |
248 uint8_t lumshift; | |
249 //@} | |
250 int16_t bfraction; ///< Relative position % anchors=> how to scale MVs | |
251 uint8_t halfpq; ///< Uniform quant over image and qp+.5 | |
252 uint8_t respic; ///< Frame-level flag for resized images | |
253 int buffer_fullness; ///< HRD info | |
254 /** Ranges: | |
255 * -# 0 -> [-64n 63.f] x [-32, 31.f] | |
256 * -# 1 -> [-128, 127.f] x [-64, 63.f] | |
257 * -# 2 -> [-512, 511.f] x [-128, 127.f] | |
258 * -# 3 -> [-1024, 1023.f] x [-256, 255.f] | |
259 */ | |
260 uint8_t mvrange; | |
261 uint8_t pquantizer; ///< Uniform (over sequence) quantizer in use | |
262 VLC *cbpcy_vlc; ///< CBPCY VLC table | |
263 int tt_index; ///< Index for Transform Type tables | |
264 uint8_t* mv_type_mb_plane; ///< bitplane for mv_type == (4MV) | |
265 uint8_t* direct_mb_plane; ///< bitplane for "direct" MBs | |
266 int mv_type_is_raw; ///< mv type mb plane is not coded | |
267 int dmb_is_raw; ///< direct mb plane is raw | |
268 int skip_is_raw; ///< skip mb plane is not coded | |
269 uint8_t luty[256], lutuv[256]; // lookup tables used for intensity compensation | |
270 int use_ic; ///< use intensity compensation in B-frames | |
271 int rnd; ///< rounding control | |
272 | |
273 /** Frame decoding info for S/M profiles only */ | |
274 //@{ | |
275 uint8_t rangeredfrm; ///< out_sample = CLIP((in_sample-128)*2+128) | |
276 uint8_t interpfrm; | |
277 //@} | |
278 | |
279 /** Frame decoding info for Advanced profile */ | |
280 //@{ | |
281 uint8_t fcm; ///< 0->Progressive, 2->Frame-Interlace, 3->Field-Interlace | |
282 uint8_t numpanscanwin; | |
283 uint8_t tfcntr; | |
284 uint8_t rptfrm, tff, rff; | |
285 uint16_t topleftx; | |
286 uint16_t toplefty; | |
287 uint16_t bottomrightx; | |
288 uint16_t bottomrighty; | |
289 uint8_t uvsamp; | |
290 uint8_t postproc; | |
291 int hrd_num_leaky_buckets; | |
292 uint8_t bit_rate_exponent; | |
293 uint8_t buffer_size_exponent; | |
294 uint8_t* acpred_plane; ///< AC prediction flags bitplane | |
295 int acpred_is_raw; | |
296 uint8_t* over_flags_plane; ///< Overflags bitplane | |
297 int overflg_is_raw; | |
298 uint8_t condover; | |
299 uint16_t *hrd_rate, *hrd_buffer; | |
300 uint8_t *hrd_fullness; | |
301 uint8_t range_mapy_flag; | |
302 uint8_t range_mapuv_flag; | |
303 uint8_t range_mapy; | |
304 uint8_t range_mapuv; | |
305 //@} | |
306 | |
307 int p_frame_skipped; | |
308 int bi_type; | |
5887 | 309 int x8_type; |
4902 | 310 } VC1Context; |
5163 | 311 |
5830
1d83e9c34641
Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents:
5299
diff
changeset
|
312 #endif /* FFMPEG_VC1_H */ |