FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
vc1.h
Go to the documentation of this file.
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_H
24
#define AVCODEC_VC1_H
25
26
#include "
avcodec.h
"
27
#include "
h264chroma.h
"
28
#include "
mpegvideo.h
"
29
#include "
intrax8.h
"
30
#include "
vc1_common.h
"
31
#include "
vc1dsp.h
"
32
33
#define AC_VLC_BITS 9
34
35
/** Sequence quantizer mode */
36
//@{
37
enum
QuantMode
{
38
QUANT_FRAME_IMPLICIT
,
///< Implicitly specified at frame level
39
QUANT_FRAME_EXPLICIT
,
///< Explicitly specified at frame level
40
QUANT_NON_UNIFORM
,
///< Non-uniform quant used for all frames
41
QUANT_UNIFORM
///< Uniform quant used for all frames
42
};
43
//@}
44
45
/** Where quant can be changed */
46
//@{
47
enum
DQProfile
{
48
DQPROFILE_FOUR_EDGES
,
49
DQPROFILE_DOUBLE_EDGES
,
50
DQPROFILE_SINGLE_EDGE
,
51
DQPROFILE_ALL_MBS
52
};
53
//@}
54
55
/** @name Where quant can be changed
56
*/
57
//@{
58
enum
DQSingleEdge
{
59
DQSINGLE_BEDGE_LEFT
,
60
DQSINGLE_BEDGE_TOP
,
61
DQSINGLE_BEDGE_RIGHT
,
62
DQSINGLE_BEDGE_BOTTOM
63
};
64
//@}
65
66
/** Which pair of edges is quantized with ALTPQUANT */
67
//@{
68
enum
DQDoubleEdge
{
69
DQDOUBLE_BEDGE_TOPLEFT
,
70
DQDOUBLE_BEDGE_TOPRIGHT
,
71
DQDOUBLE_BEDGE_BOTTOMRIGHT
,
72
DQDOUBLE_BEDGE_BOTTOMLEFT
73
};
74
//@}
75
76
/** MV modes for P frames */
77
//@{
78
enum
MVModes
{
79
MV_PMODE_1MV_HPEL_BILIN
,
80
MV_PMODE_1MV
,
81
MV_PMODE_1MV_HPEL
,
82
MV_PMODE_MIXED_MV
,
83
MV_PMODE_INTENSITY_COMP
84
};
85
//@}
86
87
/** MBMODE for interlaced frame P-picture */
88
//@{
89
enum
MBModesIntfr
{
90
MV_PMODE_INTFR_1MV
,
91
MV_PMODE_INTFR_2MV_FIELD
,
92
MV_PMODE_INTFR_2MV
,
93
MV_PMODE_INTFR_4MV_FIELD
,
94
MV_PMODE_INTFR_4MV
,
95
MV_PMODE_INTFR_INTRA
,
96
};
97
//@}
98
99
/** @name MV types for B frames */
100
//@{
101
enum
BMVTypes
{
102
BMV_TYPE_BACKWARD
,
103
BMV_TYPE_FORWARD
,
104
BMV_TYPE_INTERPOLATED
,
105
BMV_TYPE_DIRECT
106
};
107
//@}
108
109
/** @name Block types for P/B frames */
110
//@{
111
enum
TransformTypes
{
112
TT_8X8
,
113
TT_8X4_BOTTOM
,
114
TT_8X4_TOP
,
115
TT_8X4
,
// both halves
116
TT_4X8_RIGHT
,
117
TT_4X8_LEFT
,
118
TT_4X8
,
// both halves
119
TT_4X4
120
};
121
//@}
122
123
enum
CodingSet
{
124
CS_HIGH_MOT_INTRA
= 0,
125
CS_HIGH_MOT_INTER
,
126
CS_LOW_MOT_INTRA
,
127
CS_LOW_MOT_INTER
,
128
CS_MID_RATE_INTRA
,
129
CS_MID_RATE_INTER
,
130
CS_HIGH_RATE_INTRA
,
131
CS_HIGH_RATE_INTER
132
};
133
134
/** @name Overlap conditions for Advanced Profile */
135
//@{
136
enum
COTypes
{
137
CONDOVER_NONE
= 0,
138
CONDOVER_ALL
,
139
CONDOVER_SELECT
140
};
141
//@}
142
143
/**
144
* FCM Frame Coding Mode
145
* @note some content might be marked interlaced
146
* but have fcm set to 0 as well (e.g. HD-DVD)
147
*/
148
enum
FrameCodingMode
{
149
PROGRESSIVE
= 0,
///< in the bitstream is reported as 00b
150
ILACE_FRAME
,
///< in the bitstream is reported as 10b
151
ILACE_FIELD
///< in the bitstream is reported as 11b
152
};
153
154
/**
155
* Imode types
156
* @{
157
*/
158
enum
Imode
{
159
IMODE_RAW
,
160
IMODE_NORM2
,
161
IMODE_DIFF2
,
162
IMODE_NORM6
,
163
IMODE_DIFF6
,
164
IMODE_ROWSKIP
,
165
IMODE_COLSKIP
166
};
167
/** @} */
//imode defines
168
169
/** The VC1 Context
170
* @todo Change size wherever another size is more efficient
171
* Many members are only used for Advanced Profile
172
*/
173
typedef
struct
VC1Context
{
174
MpegEncContext
s
;
175
IntraX8Context
x8
;
176
H264ChromaContext
h264chroma
;
177
VC1DSPContext
vc1dsp
;
178
179
int
bits
;
180
181
/** Simple/Main Profile sequence header */
182
//@{
183
int
res_sprite
;
///< reserved, sprite mode
184
int
res_y411
;
///< reserved, old interlaced mode
185
int
res_x8
;
///< reserved
186
int
multires
;
///< frame-level RESPIC syntax element present
187
int
res_fasttx
;
///< reserved, always 1
188
int
res_transtab
;
///< reserved, always 0
189
int
rangered
;
///< RANGEREDFRM (range reduction) syntax element present
190
///< at frame level
191
int
res_rtm_flag
;
///< reserved, set to 1
192
int
reserved
;
///< reserved
193
//@}
194
195
/** Advanced Profile */
196
//@{
197
int
level
;
///< 3bits, for Advanced/Simple Profile, provided by TS layer
198
int
chromaformat
;
///< 2bits, 2=4:2:0, only defined
199
int
postprocflag
;
///< Per-frame processing suggestion flag present
200
int
broadcast
;
///< TFF/RFF present
201
int
interlace
;
///< Progressive/interlaced (RPTFTM syntax element)
202
int
tfcntrflag
;
///< TFCNTR present
203
int
panscanflag
;
///< NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present
204
int
refdist_flag
;
///< REFDIST syntax element present in II, IP, PI or PP field picture headers
205
int
extended_dmv
;
///< Additional extended dmv range at P/B frame-level
206
int
hrd_param_flag
;
///< Presence of Hypothetical Reference
207
///< Decoder parameters
208
int
psf
;
///< Progressive Segmented Frame
209
//@}
210
211
/** Sequence header data for all Profiles
212
* TODO: choose between ints, uint8_ts and monobit flags
213
*/
214
//@{
215
int
profile
;
///< 2bits, Profile
216
int
frmrtq_postproc
;
///< 3bits,
217
int
bitrtq_postproc
;
///< 5bits, quantized framerate-based postprocessing strength
218
int
max_coded_width
,
max_coded_height
;
219
int
fastuvmc
;
///< Rounding of qpel vector to hpel ? (not in Simple)
220
int
extended_mv
;
///< Ext MV in P/B (not in Simple)
221
int
dquant
;
///< How qscale varies with MBs, 2bits (not in Simple)
222
int
vstransform
;
///< variable-size [48]x[48] transform type + info
223
int
overlap
;
///< overlapped transforms in use
224
int
quantizer_mode
;
///< 2bits, quantizer mode used for sequence, see QUANT_*
225
int
finterpflag
;
///< INTERPFRM present
226
//@}
227
228
/** Frame decoding info for all profiles */
229
//@{
230
uint8_t
mv_mode
;
///< MV coding monde
231
uint8_t
mv_mode2
;
///< Secondary MV coding mode (B frames)
232
int
k_x
;
///< Number of bits for MVs (depends on MV range)
233
int
k_y
;
///< Number of bits for MVs (depends on MV range)
234
int
range_x
,
range_y
;
///< MV range
235
uint8_t
pq
,
altpq
;
///< Current/alternate frame quantizer scale
236
uint8_t
zz_8x8
[4][64];
///< Zigzag table for TT_8x8, permuted for IDCT
237
int
left_blk_sh
,
top_blk_sh
;
///< Either 3 or 0, positions of l/t in blk[]
238
const
uint8_t
*
zz_8x4
;
///< Zigzag scan table for TT_8x4 coding mode
239
const
uint8_t
*
zz_4x8
;
///< Zigzag scan table for TT_4x8 coding mode
240
/** pquant parameters */
241
//@{
242
uint8_t
dquantfrm
;
243
uint8_t
dqprofile
;
244
uint8_t
dqsbedge
;
245
uint8_t
dqbilevel
;
246
//@}
247
/** AC coding set indexes
248
* @see 8.1.1.10, p(1)10
249
*/
250
//@{
251
int
c_ac_table_index
;
///< Chroma index from ACFRM element
252
int
y_ac_table_index
;
///< Luma index from AC2FRM element
253
//@}
254
int
ttfrm
;
///< Transform type info present at frame level
255
uint8_t
ttmbf
;
///< Transform type flag
256
int
*
ttblk_base
, *
ttblk
;
///< Transform type at the block level
257
int
codingset
;
///< index of current table set from 11.8 to use for luma block decoding
258
int
codingset2
;
///< index of current table set from 11.8 to use for chroma block decoding
259
int
pqindex
;
///< raw pqindex used in coding set selection
260
int
a_avail
,
c_avail
;
261
uint8_t
*
mb_type_base
, *
mb_type
[3];
262
263
264
/** Luma compensation parameters */
265
//@{
266
uint8_t
lumscale
;
267
uint8_t
lumshift
;
268
//@}
269
int16_t
bfraction
;
///< Relative position % anchors=> how to scale MVs
270
uint8_t
halfpq
;
///< Uniform quant over image and qp+.5
271
uint8_t
respic
;
///< Frame-level flag for resized images
272
int
buffer_fullness
;
///< HRD info
273
/** Ranges:
274
* -# 0 -> [-64n 63.f] x [-32, 31.f]
275
* -# 1 -> [-128, 127.f] x [-64, 63.f]
276
* -# 2 -> [-512, 511.f] x [-128, 127.f]
277
* -# 3 -> [-1024, 1023.f] x [-256, 255.f]
278
*/
279
uint8_t
mvrange
;
///< Extended MV range flag
280
uint8_t
pquantizer
;
///< Uniform (over sequence) quantizer in use
281
VLC
*
cbpcy_vlc
;
///< CBPCY VLC table
282
int
tt_index
;
///< Index for Transform Type tables (to decode TTMB)
283
uint8_t
*
mv_type_mb_plane
;
///< bitplane for mv_type == (4MV)
284
uint8_t
*
direct_mb_plane
;
///< bitplane for "direct" MBs
285
uint8_t
*
forward_mb_plane
;
///< bitplane for "forward" MBs
286
int
mv_type_is_raw
;
///< mv type mb plane is not coded
287
int
dmb_is_raw
;
///< direct mb plane is raw
288
int
fmb_is_raw
;
///< forward mb plane is raw
289
int
skip_is_raw
;
///< skip mb plane is not coded
290
uint8_t
last_luty
[2][256],
last_lutuv
[2][256];
///< lookup tables used for intensity compensation
291
uint8_t
aux_luty
[2][256],
aux_lutuv
[2][256];
///< lookup tables used for intensity compensation
292
uint8_t
next_luty
[2][256],
next_lutuv
[2][256];
///< lookup tables used for intensity compensation
293
uint8_t
(*
curr_luty
)[256] ,(*curr_lutuv)[256];
294
int
last_use_ic
, *
curr_use_ic
,
next_use_ic
,
aux_use_ic
;
295
int
rnd
;
///< rounding control
296
297
/** Frame decoding info for S/M profiles only */
298
//@{
299
uint8_t
rangeredfrm
;
///< out_sample = CLIP((in_sample-128)*2+128)
300
uint8_t
interpfrm
;
301
//@}
302
303
/** Frame decoding info for Advanced profile */
304
//@{
305
enum
FrameCodingMode
fcm
;
306
uint8_t
numpanscanwin
;
307
uint8_t
tfcntr
;
308
uint8_t
rptfrm
,
tff
,
rff
;
309
uint16_t
topleftx
;
310
uint16_t
toplefty
;
311
uint16_t
bottomrightx
;
312
uint16_t
bottomrighty
;
313
uint8_t
uvsamp
;
314
uint8_t
postproc
;
315
int
hrd_num_leaky_buckets
;
316
uint8_t
bit_rate_exponent
;
317
uint8_t
buffer_size_exponent
;
318
uint8_t
*
acpred_plane
;
///< AC prediction flags bitplane
319
int
acpred_is_raw
;
320
uint8_t
*
over_flags_plane
;
///< Overflags bitplane
321
int
overflg_is_raw
;
322
uint8_t
condover
;
323
uint16_t *
hrd_rate
, *
hrd_buffer
;
324
uint8_t
*
hrd_fullness
;
325
uint8_t
range_mapy_flag
;
326
uint8_t
range_mapuv_flag
;
327
uint8_t
range_mapy
;
328
uint8_t
range_mapuv
;
329
//@}
330
331
/** Frame decoding info for interlaced picture */
332
uint8_t
dmvrange
;
///< Extended differential MV range flag
333
int
fourmvswitch
;
334
int
intcomp
;
335
uint8_t
lumscale2
;
///< for interlaced field P picture
336
uint8_t
lumshift2
;
337
VLC
*
mbmode_vlc
;
338
VLC
*
imv_vlc
;
339
VLC
*
twomvbp_vlc
;
340
VLC
*
fourmvbp_vlc
;
341
uint8_t
twomvbp
;
342
uint8_t
fourmvbp
;
343
uint8_t
*
fieldtx_plane
;
344
int
fieldtx_is_raw
;
345
uint8_t
zzi_8x8
[64];
346
uint8_t
*
blk_mv_type_base
, *
blk_mv_type
;
///< 0: frame MV, 1: field MV (interlaced frame)
347
uint8_t
*
mv_f_base
, *
mv_f
[2];
///< 0: MV obtained from same field, 1: opposite field
348
uint8_t
*
mv_f_next_base
, *
mv_f_next
[2];
349
int
field_mode
;
///< 1 for interlaced field pictures
350
int
fptype
;
351
int
second_field
;
352
int
refdist
;
///< distance of the current picture from reference
353
int
numref
;
///< number of past field pictures used as reference
354
// 0 corresponds to 1 and 1 corresponds to 2 references
355
int
reffield
;
///< if numref = 0 (1 reference) then reffield decides which
356
// field to use among the two fields from previous frame
357
int
intcompfield
;
///< which of the two fields to be intensity compensated
358
// 0: both fields, 1: bottom field, 2: top field
359
int
cur_field_type
;
///< 0: top, 1: bottom
360
int
ref_field_type
[2];
///< forward and backward reference field type (top or bottom)
361
int
blocks_off
,
mb_off
;
362
int
qs_last
;
///< if qpel has been used in the previous (tr.) picture
363
int
bmvtype
;
364
int
frfd
,
brfd
;
///< reference frame distance (forward or backward)
365
int
first_pic_header_flag
;
366
int
pic_header_flag
;
367
368
/** Frame decoding info for sprite modes */
369
//@{
370
int
new_sprite
;
371
int
two_sprites
;
372
AVFrame
*
sprite_output_frame
;
373
int
output_width
,
output_height
,
sprite_width
,
sprite_height
;
374
uint8_t
*
sr_rows
[2][2];
///< Sprite resizer line cache
375
//@}
376
377
int
p_frame_skipped
;
378
int
bi_type
;
379
int
x8_type
;
380
381
int16_t (*
block
)[6][64];
382
int
n_allocated_blks
,
cur_blk_idx
,
left_blk_idx
,
topleft_blk_idx
,
top_blk_idx
;
383
uint32_t *
cbp_base
, *
cbp
;
384
uint8_t
*
is_intra_base
, *
is_intra
;
385
int16_t (*
luma_mv_base
)[2], (*luma_mv)[2];
386
uint8_t
bfraction_lut_index
;
///< Index for BFRACTION value (see Table 40, reproduced into ff_vc1_bfraction_lut[])
387
uint8_t
broken_link
;
///< Broken link flag (BROKEN_LINK syntax element)
388
uint8_t
closed_entry
;
///< Closed entry point flag (CLOSED_ENTRY syntax element)
389
390
int
end_mb_x
;
///< Horizontal macroblock limit (used only by mss2)
391
392
int
parse_only
;
///< Context is used within parser
393
int
resync_marker
;
///< could this stream contain resync markers
394
}
VC1Context
;
395
396
/**
397
* Decode Simple/Main Profiles sequence header
398
* @see Figure 7-8, p16-17
399
* @param avctx Codec context
400
* @param gb GetBit context initialized from Codec context extra_data
401
* @return Status
402
*/
403
int
ff_vc1_decode_sequence_header
(
AVCodecContext
*avctx,
VC1Context
*
v
,
GetBitContext
*gb);
404
405
int
ff_vc1_decode_entry_point
(
AVCodecContext
*avctx,
VC1Context
*
v
,
GetBitContext
*gb);
406
407
int
ff_vc1_parse_frame_header
(
VC1Context
*
v
,
GetBitContext
*gb);
408
int
ff_vc1_parse_frame_header_adv
(
VC1Context
*
v
,
GetBitContext
*gb);
409
int
ff_vc1_init_common
(
VC1Context
*
v
);
410
411
int
ff_vc1_decode_init_alloc_tables
(
VC1Context
*
v
);
412
void
ff_vc1_init_transposed_scantables
(
VC1Context
*
v
);
413
int
ff_vc1_decode_end
(
AVCodecContext
*avctx);
414
void
ff_vc1_decode_blocks
(
VC1Context
*
v
);
415
416
#endif
/* AVCODEC_VC1_H */
Generated on Sun Sep 14 2014 18:56:05 for FFmpeg by
1.8.2