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
color_prim
;
///< 8bits, chroma coordinates of the color primaries
207
int
transfer_char
;
///< 8bits, Opto-electronic transfer characteristics
208
int
matrix_coef
;
///< 8bits, Color primaries->YCbCr transform matrix
209
int
hrd_param_flag
;
///< Presence of Hypothetical Reference
210
///< Decoder parameters
211
int
psf
;
///< Progressive Segmented Frame
212
//@}
213
214
/** Sequence header data for all Profiles
215
* TODO: choose between ints, uint8_ts and monobit flags
216
*/
217
//@{
218
int
profile
;
///< 2bits, Profile
219
int
frmrtq_postproc
;
///< 3bits,
220
int
bitrtq_postproc
;
///< 5bits, quantized framerate-based postprocessing strength
221
int
max_coded_width
,
max_coded_height
;
222
int
fastuvmc
;
///< Rounding of qpel vector to hpel ? (not in Simple)
223
int
extended_mv
;
///< Ext MV in P/B (not in Simple)
224
int
dquant
;
///< How qscale varies with MBs, 2bits (not in Simple)
225
int
vstransform
;
///< variable-size [48]x[48] transform type + info
226
int
overlap
;
///< overlapped transforms in use
227
int
quantizer_mode
;
///< 2bits, quantizer mode used for sequence, see QUANT_*
228
int
finterpflag
;
///< INTERPFRM present
229
//@}
230
231
/** Frame decoding info for all profiles */
232
//@{
233
uint8_t
mv_mode
;
///< MV coding monde
234
uint8_t
mv_mode2
;
///< Secondary MV coding mode (B frames)
235
int
k_x
;
///< Number of bits for MVs (depends on MV range)
236
int
k_y
;
///< Number of bits for MVs (depends on MV range)
237
int
range_x
,
range_y
;
///< MV range
238
uint8_t
pq
,
altpq
;
///< Current/alternate frame quantizer scale
239
uint8_t
zz_8x8
[4][64];
///< Zigzag table for TT_8x8, permuted for IDCT
240
int
left_blk_sh
,
top_blk_sh
;
///< Either 3 or 0, positions of l/t in blk[]
241
const
uint8_t
*
zz_8x4
;
///< Zigzag scan table for TT_8x4 coding mode
242
const
uint8_t
*
zz_4x8
;
///< Zigzag scan table for TT_4x8 coding mode
243
/** pquant parameters */
244
//@{
245
uint8_t
dquantfrm
;
246
uint8_t
dqprofile
;
247
uint8_t
dqsbedge
;
248
uint8_t
dqbilevel
;
249
//@}
250
/** AC coding set indexes
251
* @see 8.1.1.10, p(1)10
252
*/
253
//@{
254
int
c_ac_table_index
;
///< Chroma index from ACFRM element
255
int
y_ac_table_index
;
///< Luma index from AC2FRM element
256
//@}
257
int
ttfrm
;
///< Transform type info present at frame level
258
uint8_t
ttmbf
;
///< Transform type flag
259
int
*
ttblk_base
, *
ttblk
;
///< Transform type at the block level
260
int
codingset
;
///< index of current table set from 11.8 to use for luma block decoding
261
int
codingset2
;
///< index of current table set from 11.8 to use for chroma block decoding
262
int
pqindex
;
///< raw pqindex used in coding set selection
263
int
a_avail
,
c_avail
;
264
uint8_t
*
mb_type_base
, *
mb_type
[3];
265
266
267
/** Luma compensation parameters */
268
//@{
269
uint8_t
lumscale
;
270
uint8_t
lumshift
;
271
//@}
272
int16_t
bfraction
;
///< Relative position % anchors=> how to scale MVs
273
uint8_t
halfpq
;
///< Uniform quant over image and qp+.5
274
uint8_t
respic
;
///< Frame-level flag for resized images
275
int
buffer_fullness
;
///< HRD info
276
/** Ranges:
277
* -# 0 -> [-64n 63.f] x [-32, 31.f]
278
* -# 1 -> [-128, 127.f] x [-64, 63.f]
279
* -# 2 -> [-512, 511.f] x [-128, 127.f]
280
* -# 3 -> [-1024, 1023.f] x [-256, 255.f]
281
*/
282
uint8_t
mvrange
;
///< Extended MV range flag
283
uint8_t
pquantizer
;
///< Uniform (over sequence) quantizer in use
284
VLC
*
cbpcy_vlc
;
///< CBPCY VLC table
285
int
tt_index
;
///< Index for Transform Type tables (to decode TTMB)
286
uint8_t
*
mv_type_mb_plane
;
///< bitplane for mv_type == (4MV)
287
uint8_t
*
direct_mb_plane
;
///< bitplane for "direct" MBs
288
uint8_t
*
forward_mb_plane
;
///< bitplane for "forward" MBs
289
int
mv_type_is_raw
;
///< mv type mb plane is not coded
290
int
dmb_is_raw
;
///< direct mb plane is raw
291
int
fmb_is_raw
;
///< forward mb plane is raw
292
int
skip_is_raw
;
///< skip mb plane is not coded
293
uint8_t
last_luty
[2][256],
last_lutuv
[2][256];
///< lookup tables used for intensity compensation
294
uint8_t
aux_luty
[2][256],
aux_lutuv
[2][256];
///< lookup tables used for intensity compensation
295
uint8_t
next_luty
[2][256],
next_lutuv
[2][256];
///< lookup tables used for intensity compensation
296
uint8_t
(*
curr_luty
)[256] ,(*curr_lutuv)[256];
297
int
last_use_ic
, *
curr_use_ic
,
next_use_ic
,
aux_use_ic
;
298
int
rnd
;
///< rounding control
299
300
/** Frame decoding info for S/M profiles only */
301
//@{
302
uint8_t
rangeredfrm
;
///< out_sample = CLIP((in_sample-128)*2+128)
303
uint8_t
interpfrm
;
304
//@}
305
306
/** Frame decoding info for Advanced profile */
307
//@{
308
enum
FrameCodingMode
fcm
;
309
uint8_t
numpanscanwin
;
310
uint8_t
tfcntr
;
311
uint8_t
rptfrm
,
tff
,
rff
;
312
uint16_t
topleftx
;
313
uint16_t
toplefty
;
314
uint16_t
bottomrightx
;
315
uint16_t
bottomrighty
;
316
uint8_t
uvsamp
;
317
uint8_t
postproc
;
318
int
hrd_num_leaky_buckets
;
319
uint8_t
bit_rate_exponent
;
320
uint8_t
buffer_size_exponent
;
321
uint8_t
*
acpred_plane
;
///< AC prediction flags bitplane
322
int
acpred_is_raw
;
323
uint8_t
*
over_flags_plane
;
///< Overflags bitplane
324
int
overflg_is_raw
;
325
uint8_t
condover
;
326
uint16_t *
hrd_rate
, *
hrd_buffer
;
327
uint8_t
*
hrd_fullness
;
328
uint8_t
range_mapy_flag
;
329
uint8_t
range_mapuv_flag
;
330
uint8_t
range_mapy
;
331
uint8_t
range_mapuv
;
332
//@}
333
334
/** Frame decoding info for interlaced picture */
335
uint8_t
dmvrange
;
///< Extended differential MV range flag
336
int
fourmvswitch
;
337
int
intcomp
;
338
uint8_t
lumscale2
;
///< for interlaced field P picture
339
uint8_t
lumshift2
;
340
VLC
*
mbmode_vlc
;
341
VLC
*
imv_vlc
;
342
VLC
*
twomvbp_vlc
;
343
VLC
*
fourmvbp_vlc
;
344
uint8_t
twomvbp
;
345
uint8_t
fourmvbp
;
346
uint8_t
*
fieldtx_plane
;
347
int
fieldtx_is_raw
;
348
uint8_t
zzi_8x8
[64];
349
uint8_t
*
blk_mv_type_base
, *
blk_mv_type
;
///< 0: frame MV, 1: field MV (interlaced frame)
350
uint8_t
*
mv_f_base
, *
mv_f
[2];
///< 0: MV obtained from same field, 1: opposite field
351
uint8_t
*
mv_f_next_base
, *
mv_f_next
[2];
352
int
field_mode
;
///< 1 for interlaced field pictures
353
int
fptype
;
354
int
second_field
;
355
int
refdist
;
///< distance of the current picture from reference
356
int
numref
;
///< number of past field pictures used as reference
357
// 0 corresponds to 1 and 1 corresponds to 2 references
358
int
reffield
;
///< if numref = 0 (1 reference) then reffield decides which
359
// field to use among the two fields from previous frame
360
int
intcompfield
;
///< which of the two fields to be intensity compensated
361
// 0: both fields, 1: bottom field, 2: top field
362
int
cur_field_type
;
///< 0: top, 1: bottom
363
int
ref_field_type
[2];
///< forward and backward reference field type (top or bottom)
364
int
blocks_off
,
mb_off
;
365
int
qs_last
;
///< if qpel has been used in the previous (tr.) picture
366
int
bmvtype
;
367
int
frfd
,
brfd
;
///< reference frame distance (forward or backward)
368
int
first_pic_header_flag
;
369
int
pic_header_flag
;
370
371
/** Frame decoding info for sprite modes */
372
//@{
373
int
new_sprite
;
374
int
two_sprites
;
375
AVFrame
*
sprite_output_frame
;
376
int
output_width
,
output_height
,
sprite_width
,
sprite_height
;
377
uint8_t
*
sr_rows
[2][2];
///< Sprite resizer line cache
378
//@}
379
380
int
p_frame_skipped
;
381
int
bi_type
;
382
int
x8_type
;
383
384
int16_t (*
block
)[6][64];
385
int
n_allocated_blks
,
cur_blk_idx
,
left_blk_idx
,
topleft_blk_idx
,
top_blk_idx
;
386
uint32_t *
cbp_base
, *
cbp
;
387
uint8_t
*
is_intra_base
, *
is_intra
;
388
int16_t (*
luma_mv_base
)[2], (*luma_mv)[2];
389
uint8_t
bfraction_lut_index
;
///< Index for BFRACTION value (see Table 40, reproduced into ff_vc1_bfraction_lut[])
390
uint8_t
broken_link
;
///< Broken link flag (BROKEN_LINK syntax element)
391
uint8_t
closed_entry
;
///< Closed entry point flag (CLOSED_ENTRY syntax element)
392
393
int
end_mb_x
;
///< Horizontal macroblock limit (used only by mss2)
394
395
int
parse_only
;
///< Context is used within parser
396
int
resync_marker
;
///< could this stream contain resync markers
397
}
VC1Context
;
398
399
/**
400
* Decode Simple/Main Profiles sequence header
401
* @see Figure 7-8, p16-17
402
* @param avctx Codec context
403
* @param gb GetBit context initialized from Codec context extra_data
404
* @return Status
405
*/
406
int
ff_vc1_decode_sequence_header
(
AVCodecContext
*avctx,
VC1Context
*
v
,
GetBitContext
*gb);
407
408
int
ff_vc1_decode_entry_point
(
AVCodecContext
*avctx,
VC1Context
*
v
,
GetBitContext
*gb);
409
410
int
ff_vc1_parse_frame_header
(
VC1Context
*
v
,
GetBitContext
*gb);
411
int
ff_vc1_parse_frame_header_adv
(
VC1Context
*
v
,
GetBitContext
*gb);
412
int
ff_vc1_init_common
(
VC1Context
*
v
);
413
414
int
ff_vc1_decode_init_alloc_tables
(
VC1Context
*
v
);
415
void
ff_vc1_init_transposed_scantables
(
VC1Context
*
v
);
416
int
ff_vc1_decode_end
(
AVCodecContext
*avctx);
417
void
ff_vc1_decode_blocks
(
VC1Context
*
v
);
418
419
void
ff_vc1_loop_filter_iblk
(
VC1Context
*
v
,
int
pq);
420
void
ff_vc1_loop_filter_iblk_delayed
(
VC1Context
*
v
,
int
pq);
421
void
ff_vc1_smooth_overlap_filter_iblk
(
VC1Context
*
v
);
422
void
ff_vc1_apply_p_loop_filter
(
VC1Context
*
v
);
423
424
void
ff_vc1_mc_1mv
(
VC1Context
*
v
,
int
dir);
425
void
ff_vc1_mc_4mv_luma
(
VC1Context
*
v
,
int
n
,
int
dir,
int
avg);
426
void
ff_vc1_mc_4mv_chroma
(
VC1Context
*
v
,
int
dir);
427
void
ff_vc1_mc_4mv_chroma4
(
VC1Context
*
v
,
int
dir,
int
dir2,
int
avg);
428
429
void
ff_vc1_interp_mc
(
VC1Context
*
v
);
430
431
#endif
/* AVCODEC_VC1_H */
Generated on Sun Mar 8 2015 02:35:01 for FFmpeg by
1.8.2