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
mpegvideo.h
Go to the documentation of this file.
1
/*
2
* Generic DCT based hybrid video encoder
3
* Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4
* Copyright (c) 2002-2004 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
/**
24
* @file
25
* mpegvideo header.
26
*/
27
28
#ifndef AVCODEC_MPEGVIDEO_H
29
#define AVCODEC_MPEGVIDEO_H
30
31
#include "
avcodec.h
"
32
#include "
blockdsp.h
"
33
#include "
dsputil.h
"
34
#include "
error_resilience.h
"
35
#include "
fdctdsp.h
"
36
#include "
get_bits.h
"
37
#include "
h264chroma.h
"
38
#include "
h263dsp.h
"
39
#include "
hpeldsp.h
"
40
#include "
idctdsp.h
"
41
#include "
mpegvideodsp.h
"
42
#include "
mpegvideoencdsp.h
"
43
#include "
pixblockdsp.h
"
44
#include "
put_bits.h
"
45
#include "
ratecontrol.h
"
46
#include "
parser.h
"
47
#include "
mpeg12data.h
"
48
#include "
qpeldsp.h
"
49
#include "
rl.h
"
50
#include "
thread.h
"
51
#include "
videodsp.h
"
52
53
#include "
libavutil/opt.h
"
54
#include "
libavutil/timecode.h
"
55
56
#define FRAME_SKIPPED 100
///< return value for header parsers if frame is not coded
57
58
enum
OutputFormat
{
59
FMT_MPEG1
,
60
FMT_H261
,
61
FMT_H263
,
62
FMT_MJPEG
,
63
};
64
65
#define MPEG_BUF_SIZE (16 * 1024)
66
67
#define QMAT_SHIFT_MMX 16
68
#define QMAT_SHIFT 21
69
70
#define MAX_FCODE 7
71
#define MAX_MV 4096
72
73
#define MAX_THREADS 32
74
#define MAX_PICTURE_COUNT 36
75
76
#define MAX_B_FRAMES 16
77
78
#define ME_MAP_SIZE 64
79
#define ME_MAP_SHIFT 3
80
#define ME_MAP_MV_BITS 11
81
82
#define MAX_MB_BYTES (30*16*16*3/8 + 120)
83
84
#define INPLACE_OFFSET 16
85
86
#define EDGE_WIDTH 16
87
88
/* Start codes. */
89
#define SEQ_END_CODE 0x000001b7
90
#define SEQ_START_CODE 0x000001b3
91
#define GOP_START_CODE 0x000001b8
92
#define PICTURE_START_CODE 0x00000100
93
#define SLICE_MIN_START_CODE 0x00000101
94
#define SLICE_MAX_START_CODE 0x000001af
95
#define EXT_START_CODE 0x000001b5
96
#define USER_START_CODE 0x000001b2
97
98
/* encoding scans */
99
extern
const
uint8_t
ff_alternate_horizontal_scan
[64];
100
extern
const
uint8_t
ff_alternate_vertical_scan
[64];
101
102
struct
MpegEncContext
;
103
104
/**
105
* Picture.
106
*/
107
typedef
struct
Picture
{
108
struct
AVFrame
*
f
;
109
ThreadFrame
tf
;
110
111
AVBufferRef
*
qscale_table_buf
;
112
int8_t *
qscale_table
;
113
114
AVBufferRef
*
motion_val_buf
[2];
115
int16_t (*
motion_val
[2])[2];
116
117
AVBufferRef
*
mb_type_buf
;
118
uint32_t *
mb_type
;
///< types and macros are defined in mpegutils.h
119
120
AVBufferRef
*
mbskip_table_buf
;
121
uint8_t
*
mbskip_table
;
122
123
AVBufferRef
*
ref_index_buf
[2];
124
int8_t *
ref_index
[2];
125
126
AVBufferRef
*
mb_var_buf
;
127
uint16_t *
mb_var
;
///< Table for MB variances
128
129
AVBufferRef
*
mc_mb_var_buf
;
130
uint16_t *
mc_mb_var
;
///< Table for motion compensated MB variances
131
132
int
alloc_mb_width
;
///< mb_width used to allocate tables
133
int
alloc_mb_height
;
///< mb_height used to allocate tables
134
135
AVBufferRef
*
mb_mean_buf
;
136
uint8_t
*
mb_mean
;
///< Table for MB luminance
137
138
AVBufferRef
*
hwaccel_priv_buf
;
139
/**
140
* hardware accelerator private data
141
*/
142
void
*
hwaccel_picture_private
;
143
144
int
field_picture
;
///< whether or not the picture was encoded in separate fields
145
146
int64_t
mb_var_sum
;
///< sum of MB variance for current frame
147
int64_t
mc_mb_var_sum
;
///< motion compensated MB variance for current frame
148
149
int
b_frame_score
;
150
int
needs_realloc
;
///< Picture needs to be reallocated (eg due to a frame size change)
151
152
int
reference
;
153
int
shared
;
154
155
uint64_t
error
[
AV_NUM_DATA_POINTERS
];
156
}
Picture
;
157
158
/**
159
* Motion estimation context.
160
*/
161
typedef
struct
MotionEstContext
{
162
AVCodecContext
*
avctx
;
163
int
skip
;
///< set if ME is skipped for the current MB
164
int
co_located_mv
[4][2];
///< mv from last P-frame for direct mode ME
165
int
direct_basis_mv
[4][2];
166
uint8_t
*
scratchpad
;
///< data area for the ME algo, so that the ME does not need to malloc/free
167
uint8_t
*
best_mb
;
168
uint8_t
*
temp_mb
[2];
169
uint8_t
*
temp
;
170
int
best_bits
;
171
uint32_t *
map
;
///< map to avoid duplicate evaluations
172
uint32_t *
score_map
;
///< map to store the scores
173
unsigned
map_generation
;
174
int
pre_penalty_factor
;
175
int
penalty_factor
;
/**< an estimate of the bits required to
176
code a given mv value, e.g. (1,0) takes
177
more bits than (0,0). We have to
178
estimate whether any reduction in
179
residual is worth the extra bits. */
180
int
sub_penalty_factor
;
181
int
mb_penalty_factor
;
182
int
flags
;
183
int
sub_flags
;
184
int
mb_flags
;
185
int
pre_pass
;
///< = 1 for the pre pass
186
int
dia_size
;
187
int
xmin
;
188
int
xmax
;
189
int
ymin
;
190
int
ymax
;
191
int
pred_x
;
192
int
pred_y
;
193
uint8_t
*
src
[4][4];
194
uint8_t
*
ref
[4][4];
195
int
stride
;
196
int
uvstride
;
197
/* temp variables for picture complexity calculation */
198
int64_t
mc_mb_var_sum_temp
;
199
int64_t
mb_var_sum_temp
;
200
int
scene_change_score
;
201
/* cmp, chroma_cmp;*/
202
op_pixels_func
(*
hpel_put
)[4];
203
op_pixels_func
(*
hpel_avg
)[4];
204
qpel_mc_func
(*
qpel_put
)[16];
205
qpel_mc_func
(*
qpel_avg
)[16];
206
uint8_t
(*
mv_penalty
)[
MAX_MV
*2+1];
///< amount of bits needed to encode a MV
207
uint8_t
*
current_mv_penalty
;
208
int (*
sub_motion_search
)(
struct
MpegEncContext
*
s
,
209
int
*mx_ptr,
int
*my_ptr,
int
dmin,
210
int
src_index,
int
ref_index,
211
int
size
,
int
h);
212
}
MotionEstContext
;
213
214
/**
215
* MpegEncContext.
216
*/
217
typedef
struct
MpegEncContext
{
218
AVClass
*
class
;
219
220
int
y_dc_scale
,
c_dc_scale
;
221
int
ac_pred
;
222
int
block_last_index
[12];
///< last non zero coefficient in block
223
int
h263_aic
;
///< Advanded INTRA Coding (AIC)
224
225
/* scantables */
226
ScanTable
inter_scantable
;
///< if inter == intra then intra should be used to reduce tha cache usage
227
ScanTable
intra_scantable
;
228
ScanTable
intra_h_scantable
;
229
ScanTable
intra_v_scantable
;
230
231
/* WARNING: changes above this line require updates to hardcoded
232
* offsets used in asm. */
233
234
struct
AVCodecContext
*
avctx
;
235
/* the following parameters must be initialized before encoding */
236
int
width
,
height
;
///< picture size. must be a multiple of 16
237
int
gop_size
;
238
int
intra_only
;
///< if true, only intra pictures are generated
239
int
bit_rate
;
///< wanted bit rate
240
enum
OutputFormat
out_format
;
///< output format
241
int
h263_pred
;
///< use mpeg4/h263 ac/dc predictions
242
int
pb_frame
;
///< PB frame mode (0 = none, 1 = base, 2 = improved)
243
244
/* the following codec id fields are deprecated in favor of codec_id */
245
int
h263_plus
;
///< h263 plus headers
246
int
h263_flv
;
///< use flv h263 header
247
248
enum
AVCodecID
codec_id
;
/* see AV_CODEC_ID_xxx */
249
int
fixed_qscale
;
///< fixed qscale if non zero
250
int
encoding
;
///< true if we are encoding (vs decoding)
251
int
flags
;
///< AVCodecContext.flags (HQ, MV4, ...)
252
int
flags2
;
///< AVCodecContext.flags2
253
int
max_b_frames
;
///< max number of b-frames for encoding
254
int
luma_elim_threshold
;
255
int
chroma_elim_threshold
;
256
int
strict_std_compliance
;
///< strictly follow the std (MPEG4, ...)
257
int
workaround_bugs
;
///< workaround bugs in encoders which cannot be detected automatically
258
int
codec_tag
;
///< internal codec_tag upper case converted from avctx codec_tag
259
int
stream_codec_tag
;
///< internal stream_codec_tag upper case converted from avctx stream_codec_tag
260
/* the following fields are managed internally by the encoder */
261
262
/* sequence parameters */
263
int
context_initialized
;
264
int
input_picture_number
;
///< used to set pic->display_picture_number, should not be used for/by anything else
265
int
coded_picture_number
;
///< used to set pic->coded_picture_number, should not be used for/by anything else
266
int
picture_number
;
//FIXME remove, unclear definition
267
int
picture_in_gop_number
;
///< 0-> first pic in gop, ...
268
int
mb_width
,
mb_height
;
///< number of MBs horizontally & vertically
269
int
mb_stride
;
///< mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11
270
int
b8_stride
;
///< 2*mb_width+1 used for some 8x8 block arrays to allow simple addressing
271
int
h_edge_pos
,
v_edge_pos
;
///< horizontal / vertical position of the right/bottom edge (pixel replication)
272
int
mb_num
;
///< number of MBs of a picture
273
ptrdiff_t
linesize
;
///< line size, in bytes, may be different from width
274
ptrdiff_t
uvlinesize
;
///< line size, for chroma in bytes, may be different from width
275
Picture
*
picture
;
///< main picture buffer
276
Picture
**
input_picture
;
///< next pictures on display order for encoding
277
Picture
**
reordered_input_picture
;
///< pointer to the next pictures in codedorder for encoding
278
279
int64_t
user_specified_pts
;
///< last non-zero pts from AVFrame which was passed into avcodec_encode_video2()
280
/**
281
* pts difference between the first and second input frame, used for
282
* calculating dts of the first frame when there's a delay */
283
int64_t
dts_delta
;
284
/**
285
* reordered pts to be used as dts for the next output frame when there's
286
* a delay */
287
int64_t
reordered_pts
;
288
289
/** bit output */
290
PutBitContext
pb
;
291
292
int
start_mb_y
;
///< start mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y)
293
int
end_mb_y
;
///< end mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y)
294
struct
MpegEncContext
*
thread_context
[
MAX_THREADS
];
295
int
slice_context_count
;
///< number of used thread_contexts
296
297
/**
298
* copy of the previous picture structure.
299
* note, linesize & data, might not match the previous picture (for field pictures)
300
*/
301
Picture
last_picture
;
302
303
/**
304
* copy of the next picture structure.
305
* note, linesize & data, might not match the next picture (for field pictures)
306
*/
307
Picture
next_picture
;
308
309
/**
310
* copy of the source picture structure for encoding.
311
* note, linesize & data, might not match the source picture (for field pictures)
312
*/
313
Picture
new_picture
;
314
315
/**
316
* copy of the current picture structure.
317
* note, linesize & data, might not match the current picture (for field pictures)
318
*/
319
Picture
current_picture
;
///< buffer to store the decompressed current picture
320
321
Picture
*
last_picture_ptr
;
///< pointer to the previous picture.
322
Picture
*
next_picture_ptr
;
///< pointer to the next picture (for bidir pred)
323
Picture
*
current_picture_ptr
;
///< pointer to the current picture
324
int
last_dc
[3];
///< last DC values for MPEG1
325
int16_t *
dc_val_base
;
326
int16_t *
dc_val
[3];
///< used for mpeg4 DC prediction, all 3 arrays must be continuous
327
const
uint8_t
*
y_dc_scale_table
;
///< qscale -> y_dc_scale table
328
const
uint8_t
*
c_dc_scale_table
;
///< qscale -> c_dc_scale table
329
const
uint8_t
*
chroma_qscale_table
;
///< qscale -> chroma_qscale (h263)
330
uint8_t
*
coded_block_base
;
331
uint8_t
*
coded_block
;
///< used for coded block pattern prediction (msmpeg4v3, wmv1)
332
int16_t (*
ac_val_base
)[16];
333
int16_t (*
ac_val
[3])[16];
///< used for mpeg4 AC prediction, all 3 arrays must be continuous
334
int
mb_skipped
;
///< MUST BE SET only during DECODING
335
uint8_t
*
mbskip_table
;
/**< used to avoid copy if macroblock skipped (for black regions for example)
336
and used for b-frame encoding & decoding (contains skip table of next P Frame) */
337
uint8_t
*
mbintra_table
;
///< used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding
338
uint8_t
*
cbp_table
;
///< used to store cbp, ac_pred for partitioned decoding
339
uint8_t
*
pred_dir_table
;
///< used to store pred_dir for partitioned decoding
340
uint8_t
*
edge_emu_buffer
;
///< temporary buffer for if MVs point to out-of-frame data
341
uint8_t
*
rd_scratchpad
;
///< scratchpad for rate distortion mb decision
342
uint8_t
*
obmc_scratchpad
;
343
uint8_t
*
b_scratchpad
;
///< scratchpad used for writing into write only buffers
344
345
int
qscale
;
///< QP
346
int
chroma_qscale
;
///< chroma QP
347
unsigned
int
lambda
;
///< lagrange multipler used in rate distortion
348
unsigned
int
lambda2
;
///< (lambda*lambda) >> FF_LAMBDA_SHIFT
349
int
*
lambda_table
;
350
int
adaptive_quant
;
///< use adaptive quantization
351
int
dquant
;
///< qscale difference to prev qscale
352
int
closed_gop
;
///< MPEG1/2 GOP is closed
353
int
pict_type
;
///< AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
354
int
vbv_delay
;
355
int
last_pict_type
;
//FIXME removes
356
int
last_non_b_pict_type
;
///< used for mpeg4 gmc b-frames & ratecontrol
357
int
droppable
;
358
int
frame_rate_index
;
359
AVRational
mpeg2_frame_rate_ext
;
360
int
last_lambda_for
[5];
///< last lambda for a specific pict type
361
int
skipdct
;
///< skip dct and code zero residual
362
363
/* motion compensation */
364
int
unrestricted_mv
;
///< mv can point outside of the coded picture
365
int
h263_long_vectors
;
///< use horrible h263v1 long vector mode
366
367
BlockDSPContext
bdsp
;
368
DSPContext
dsp
;
///< pointers for accelerated dsp functions
369
FDCTDSPContext
fdsp
;
370
H264ChromaContext
h264chroma
;
371
HpelDSPContext
hdsp
;
372
IDCTDSPContext
idsp
;
373
MpegVideoDSPContext
mdsp
;
374
MpegvideoEncDSPContext
mpvencdsp
;
375
PixblockDSPContext
pdsp
;
376
QpelDSPContext
qdsp
;
377
VideoDSPContext
vdsp
;
378
H263DSPContext
h263dsp
;
379
int
f_code
;
///< forward MV resolution
380
int
b_code
;
///< backward MV resolution for B Frames (mpeg4)
381
int16_t (*
p_mv_table_base
)[2];
382
int16_t (*
b_forw_mv_table_base
)[2];
383
int16_t (*
b_back_mv_table_base
)[2];
384
int16_t (*
b_bidir_forw_mv_table_base
)[2];
385
int16_t (*
b_bidir_back_mv_table_base
)[2];
386
int16_t (*
b_direct_mv_table_base
)[2];
387
int16_t (*
p_field_mv_table_base
[2][2])[2];
388
int16_t (*
b_field_mv_table_base
[2][2][2])[2];
389
int16_t (*
p_mv_table
)[2];
///< MV table (1MV per MB) p-frame encoding
390
int16_t (*
b_forw_mv_table
)[2];
///< MV table (1MV per MB) forward mode b-frame encoding
391
int16_t (*
b_back_mv_table
)[2];
///< MV table (1MV per MB) backward mode b-frame encoding
392
int16_t (*
b_bidir_forw_mv_table
)[2];
///< MV table (1MV per MB) bidir mode b-frame encoding
393
int16_t (*
b_bidir_back_mv_table
)[2];
///< MV table (1MV per MB) bidir mode b-frame encoding
394
int16_t (*
b_direct_mv_table
)[2];
///< MV table (1MV per MB) direct mode b-frame encoding
395
int16_t (*
p_field_mv_table
[2][2])[2];
///< MV table (2MV per MB) interlaced p-frame encoding
396
int16_t (*
b_field_mv_table
[2][2][2])[2];
///< MV table (4MV per MB) interlaced b-frame encoding
397
uint8_t
(*
p_field_select_table
[2]);
398
uint8_t
(*
b_field_select_table
[2][2]);
399
int
me_method
;
///< ME algorithm
400
int
mv_dir
;
401
#define MV_DIR_FORWARD 1
402
#define MV_DIR_BACKWARD 2
403
#define MV_DIRECT 4
///< bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4)
404
int mv_type;
405
#define MV_TYPE_16X16 0
///< 1 vector for the whole mb
406
#define MV_TYPE_8X8 1
///< 4 vectors (h263, mpeg4 4MV)
407
#define MV_TYPE_16X8 2
///< 2 vectors, one per 16x8 block
408
#define MV_TYPE_FIELD 3
///< 2 vectors, one per field
409
#define MV_TYPE_DMV 4
///< 2 vectors, special mpeg2 Dual Prime Vectors
410
/**motion vectors for a macroblock
411
first coordinate : 0 = forward 1 = backward
412
second " : depend on type
413
third " : 0 = x, 1 = y
414
*/
415
int
mv
[2][4][2];
416
int
field_select
[2][2];
417
int
last_mv
[2][2][2];
///< last MV, used for MV prediction in MPEG1 & B-frame MPEG4
418
uint8_t
*
fcode_tab
;
///< smallest fcode needed for each MV
419
int16_t
direct_scale_mv
[2][64];
///< precomputed to avoid divisions in ff_mpeg4_set_direct_mv
420
421
MotionEstContext
me
;
422
423
int
no_rounding
;
/**< apply no rounding to motion compensation (MPEG4, msmpeg4, ...)
424
for b-frames rounding mode is always 0 */
425
426
/* macroblock layer */
427
int
mb_x
,
mb_y
;
428
int
mb_skip_run
;
429
int
mb_intra
;
430
uint16_t *
mb_type
;
///< Table for candidate MB types for encoding (defines in mpegutils.h)
431
432
int
block_index
[6];
///< index to current MB in block based arrays with edges
433
int
block_wrap
[6];
434
uint8_t
*
dest
[3];
435
436
int
*
mb_index2xy
;
///< mb_index -> mb_x + mb_y*mb_stride
437
438
/** matrix transmitted in the bitstream */
439
uint16_t
intra_matrix
[64];
440
uint16_t
chroma_intra_matrix
[64];
441
uint16_t
inter_matrix
[64];
442
uint16_t
chroma_inter_matrix
[64];
443
#define QUANT_BIAS_SHIFT 8
444
int
intra_quant_bias
;
///< bias for the quantizer
445
int
inter_quant_bias
;
///< bias for the quantizer
446
int
min_qcoeff
;
///< minimum encodable coefficient
447
int
max_qcoeff
;
///< maximum encodable coefficient
448
int
ac_esc_length
;
///< num of bits needed to encode the longest esc
449
uint8_t
*
intra_ac_vlc_length
;
450
uint8_t
*
intra_ac_vlc_last_length
;
451
uint8_t
*
inter_ac_vlc_length
;
452
uint8_t
*
inter_ac_vlc_last_length
;
453
uint8_t
*
luma_dc_vlc_length
;
454
#define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
455
456
int
coded_score
[12];
457
458
/** precomputed matrix (combine qscale and DCT renorm) */
459
int (*
q_intra_matrix
)[64];
460
int (*
q_chroma_intra_matrix
)[64];
461
int (*
q_inter_matrix
)[64];
462
/** identical to the above but for MMX & these are not permutated, second 64 entries are bias*/
463
uint16_t (*
q_intra_matrix16
)[2][64];
464
uint16_t (*
q_chroma_intra_matrix16
)[2][64];
465
uint16_t (*
q_inter_matrix16
)[2][64];
466
467
/* noise reduction */
468
int (*
dct_error_sum
)[64];
469
int
dct_count
[2];
470
uint16_t (*
dct_offset
)[64];
471
472
void
*
opaque
;
///< private data for the user
473
474
/* bit rate control */
475
int64_t
total_bits
;
476
int
frame_bits
;
///< bits used for the current frame
477
int
stuffing_bits
;
///< bits used for stuffing
478
int
next_lambda
;
///< next lambda used for retrying to encode a frame
479
RateControlContext
rc_context
;
///< contains stuff only accessed in ratecontrol.c
480
481
/* statistics, used for 2-pass encoding */
482
int
mv_bits
;
483
int
header_bits
;
484
int
i_tex_bits
;
485
int
p_tex_bits
;
486
int
i_count
;
487
int
f_count
;
488
int
b_count
;
489
int
skip_count
;
490
int
misc_bits
;
///< cbp, mb_type
491
int
last_bits
;
///< temp var used for calculating the above vars
492
493
/* error concealment / resync */
494
int
resync_mb_x
;
///< x position of last resync marker
495
int
resync_mb_y
;
///< y position of last resync marker
496
GetBitContext
last_resync_gb
;
///< used to search for the next resync marker
497
int
mb_num_left
;
///< number of MBs left in this video packet (for partitioned Slices only)
498
int
next_p_frame_damaged
;
///< set if the next p frame is damaged, to avoid showing trashed b frames
499
int
err_recognition
;
500
501
ParseContext
parse_context
;
502
503
/* H.263 specific */
504
int
gob_index
;
505
int
obmc
;
///< overlapped block motion compensation
506
int
mb_info
;
///< interval for outputting info about mb offsets as side data
507
int
prev_mb_info
,
last_mb_info
;
508
uint8_t
*
mb_info_ptr
;
509
int
mb_info_size
;
510
int
ehc_mode
;
511
512
/* H.263+ specific */
513
int
umvplus
;
///< == H263+ && unrestricted_mv
514
int
h263_aic_dir
;
///< AIC direction: 0 = left, 1 = top
515
int
h263_slice_structured
;
516
int
alt_inter_vlc
;
///< alternative inter vlc
517
int
modified_quant
;
518
int
loop_filter
;
519
int
custom_pcf
;
520
521
/* mpeg4 specific */
522
///< number of bits to represent the fractional part of time (encoder only)
523
int
time_increment_bits
;
524
int
last_time_base
;
525
int
time_base
;
///< time in seconds of last I,P,S Frame
526
int64_t
time
;
///< time of current frame
527
int64_t
last_non_b_time
;
528
uint16_t
pp_time
;
///< time distance between the last 2 p,s,i frames
529
uint16_t
pb_time
;
///< time distance between the last b and p,s,i frame
530
uint16_t
pp_field_time
;
531
uint16_t
pb_field_time
;
///< like above, just for interlaced
532
int
real_sprite_warping_points
;
533
int
sprite_offset
[2][2];
///< sprite offset[isChroma][isMVY]
534
int
sprite_delta
[2][2];
///< sprite_delta [isY][isMVY]
535
int
mcsel
;
536
int
quant_precision
;
537
int
quarter_sample
;
///< 1->qpel, 0->half pel ME/MC
538
int
aspect_ratio_info
;
//FIXME remove
539
int
sprite_warping_accuracy
;
540
int
data_partitioning
;
///< data partitioning flag from header
541
int
partitioned_frame
;
///< is current frame partitioned
542
int
low_delay
;
///< no reordering needed / has no b-frames
543
int
vo_type
;
544
int
vol_control_parameters
;
///< does the stream contain the low_delay flag, used to workaround buggy encoders
545
PutBitContext
tex_pb
;
///< used for data partitioned VOPs
546
PutBitContext
pb2
;
///< used for data partitioned VOPs
547
int
mpeg_quant
;
548
int
padding_bug_score
;
///< used to detect the VERY common padding bug in MPEG4
549
550
/* divx specific, used to workaround (many) bugs in divx5 */
551
int
divx_packed
;
552
uint8_t
*
bitstream_buffer
;
//Divx 5.01 puts several frames in a single one, this is used to reorder them
553
int
bitstream_buffer_size
;
554
unsigned
int
allocated_bitstream_buffer_size
;
555
556
/* RV10 specific */
557
int
rv10_version
;
///< RV10 version: 0 or 3
558
int
rv10_first_dc_coded
[3];
559
int
orig_width
,
orig_height
;
560
561
/* MJPEG specific */
562
struct
MJpegContext
*
mjpeg_ctx
;
563
int
esc_pos
;
564
565
/* MSMPEG4 specific */
566
int
mv_table_index
;
567
int
rl_table_index
;
568
int
rl_chroma_table_index
;
569
int
dc_table_index
;
570
int
use_skip_mb_code
;
571
int
slice_height
;
///< in macroblocks
572
int
first_slice_line
;
///< used in mpeg4 too to handle resync markers
573
int
flipflop_rounding
;
574
int
msmpeg4_version
;
///< 0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 4=wmv1/7 5=wmv2/8
575
int
per_mb_rl_table
;
576
int
esc3_level_length
;
577
int
esc3_run_length
;
578
/** [mb_intra][isChroma][level][run][last] */
579
int (*
ac_stats
)[2][
MAX_LEVEL
+1][
MAX_RUN
+1][2];
580
int
inter_intra_pred
;
581
int
mspel
;
582
583
/* decompression specific */
584
GetBitContext
gb
;
585
586
/* Mpeg1 specific */
587
int
gop_picture_number
;
///< index of the first picture of a GOP based on fake_pic_num & mpeg1 specific
588
int
last_mv_dir
;
///< last mv_dir, used for b frame encoding
589
uint8_t
*
vbv_delay_ptr
;
///< pointer to vbv_delay in the bitstream
590
591
/* MPEG-2-specific - I wished not to have to support this mess. */
592
int
progressive_sequence
;
593
int
mpeg_f_code
[2][2];
594
595
// picture structure defines are loaded from mpegutils.h
596
int
picture_structure
;
597
598
int
intra_dc_precision
;
599
int
frame_pred_frame_dct
;
600
int
top_field_first
;
601
int
concealment_motion_vectors
;
602
int
q_scale_type
;
603
int
intra_vlc_format
;
604
int
alternate_scan
;
605
int
seq_disp_ext
;
606
int
repeat_first_field
;
607
int
chroma_420_type
;
608
int
chroma_format
;
609
#define CHROMA_420 1
610
#define CHROMA_422 2
611
#define CHROMA_444 3
612
int
chroma_x_shift
;
//depend on pix_format, that depend on chroma_format
613
int
chroma_y_shift
;
614
615
int
progressive_frame
;
616
int
full_pel
[2];
617
int
interlaced_dct
;
618
int
first_field
;
///< is 1 for the first field of a field picture 0 otherwise
619
int
drop_frame_timecode
;
///< timecode is in drop frame format.
620
int
scan_offset
;
///< reserve space for SVCD scan offset user data.
621
622
/* RTP specific */
623
int
rtp_mode
;
624
625
char
*
tc_opt_str
;
///< timecode option string
626
AVTimecode
tc
;
///< timecode context
627
628
uint8_t
*
ptr_lastgob
;
629
int
swap_uv
;
//vcr2 codec is an MPEG-2 variant with U and V swapped
630
int
pack_pblocks
;
//xvmc needs to keep blocks without gaps.
631
int16_t (*
pblocks
[12])[64];
632
633
int16_t (*
block
)[64];
///< points to one of the following blocks
634
int16_t (*
blocks
)[12][64];
// for HQ mode we need to keep the best block
635
int (*
decode_mb
)(
struct
MpegEncContext
*
s
, int16_t
block
[6][64]);
// used by some codecs to avoid a switch()
636
#define SLICE_OK 0
637
#define SLICE_ERROR -1
638
#define SLICE_END -2
///<end marker found
639
#define SLICE_NOEND -3
///<no end marker or error found but mb count exceeded
640
641
void
(*
dct_unquantize_mpeg1_intra
)(
struct
MpegEncContext
*
s
,
642
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
643
void
(*
dct_unquantize_mpeg1_inter
)(
struct
MpegEncContext
*
s
,
644
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
645
void
(*
dct_unquantize_mpeg2_intra
)(
struct
MpegEncContext
*
s
,
646
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
647
void
(*
dct_unquantize_mpeg2_inter
)(
struct
MpegEncContext
*
s
,
648
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
649
void
(*
dct_unquantize_h263_intra
)(
struct
MpegEncContext
*
s
,
650
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
651
void
(*
dct_unquantize_h263_inter
)(
struct
MpegEncContext
*
s
,
652
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
653
void
(*
dct_unquantize_h261_intra
)(
struct
MpegEncContext
*
s
,
654
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
655
void
(*
dct_unquantize_h261_inter
)(
struct
MpegEncContext
*
s
,
656
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
657
void
(*
dct_unquantize_intra
)(
struct
MpegEncContext
*
s
,
// unquantizer to use (mpeg4 can use both)
658
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
659
void
(*
dct_unquantize_inter
)(
struct
MpegEncContext
*
s
,
// unquantizer to use (mpeg4 can use both)
660
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
661
int (*
dct_quantize
)(
struct
MpegEncContext
*
s
, int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
,
int
*overflow);
662
int (*
fast_dct_quantize
)(
struct
MpegEncContext
*
s
, int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
,
int
*overflow);
663
void
(*
denoise_dct
)(
struct
MpegEncContext
*
s
, int16_t *
block
);
664
665
int
mpv_flags
;
///< flags set by private options
666
int
quantizer_noise_shaping
;
667
668
/* temp buffers for rate control */
669
float
*
cplx_tab
, *
bits_tab
;
670
671
/* flag to indicate a reinitialization is required, e.g. after
672
* a frame size change */
673
int
context_reinit
;
674
675
ERContext
er
;
676
677
int
error_rate
;
678
679
/* temporary frames used by b_frame_strategy = 2 */
680
AVFrame
*
tmp_frames
[
MAX_B_FRAMES
+ 2];
681
}
MpegEncContext
;
682
683
#define REBASE_PICTURE(pic, new_ctx, old_ctx) \
684
((pic && pic >= old_ctx->picture && \
685
pic < old_ctx->picture + MAX_PICTURE_COUNT) ? \
686
&new_ctx->picture[pic - old_ctx->picture] : NULL)
687
688
/* mpegvideo_enc common options */
689
#define FF_MPV_FLAG_SKIP_RD 0x0001
690
#define FF_MPV_FLAG_STRICT_GOP 0x0002
691
#define FF_MPV_FLAG_QP_RD 0x0004
692
#define FF_MPV_FLAG_CBP_RD 0x0008
693
#define FF_MPV_FLAG_NAQ 0x0010
694
#define FF_MPV_FLAG_MV0 0x0020
695
696
#define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x)
697
#define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
698
#define FF_MPV_COMMON_OPTS \
699
{ "mpv_flags", "Flags common for all mpegvideo-based encoders.", FF_MPV_OFFSET(mpv_flags), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "mpv_flags" },\
700
{ "skip_rd", "RD optimal MB level residual skipping", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_SKIP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
701
{ "strict_gop", "Strictly enforce gop size", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_STRICT_GOP }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
702
{ "qp_rd", "Use rate distortion optimization for qp selection", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_QP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
703
{ "cbp_rd", "use rate distortion optimization for CBP", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_CBP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
704
{ "naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_NAQ }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
705
{ "mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
706
{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\
707
FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
708
{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\
709
FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
710
{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\
711
{ "error_rate", "Simulate errors in the bitstream to test error concealment.", \
712
FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },
713
714
extern
const
AVOption
ff_mpv_generic_options
[];
715
716
#define FF_MPV_GENERIC_CLASS(name) \
717
static const AVClass name ## _class = {\
718
.class_name = #name " encoder",\
719
.item_name = av_default_item_name,\
720
.option = ff_mpv_generic_options,\
721
.version = LIBAVUTIL_VERSION_INT,\
722
};
723
724
/**
725
* Set the given MpegEncContext to common defaults (same for encoding
726
* and decoding). The changed fields will not depend upon the prior
727
* state of the MpegEncContext.
728
*/
729
void
ff_MPV_common_defaults
(
MpegEncContext
*
s
);
730
731
void
ff_MPV_decode_defaults
(
MpegEncContext
*
s
);
732
int
ff_MPV_common_init
(
MpegEncContext
*
s
);
733
int
ff_MPV_common_frame_size_change
(
MpegEncContext
*
s
);
734
void
ff_MPV_common_end
(
MpegEncContext
*
s
);
735
void
ff_MPV_decode_mb
(
MpegEncContext
*
s
, int16_t
block
[12][64]);
736
int
ff_MPV_frame_start
(
MpegEncContext
*
s
,
AVCodecContext
*
avctx
);
737
void
ff_MPV_frame_end
(
MpegEncContext
*
s
);
738
int
ff_MPV_encode_init
(
AVCodecContext
*
avctx
);
739
int
ff_MPV_encode_end
(
AVCodecContext
*
avctx
);
740
int
ff_MPV_encode_picture
(
AVCodecContext
*
avctx
,
AVPacket
*
pkt
,
741
const
AVFrame
*
frame
,
int
*got_packet);
742
void
ff_dct_encode_init_x86
(
MpegEncContext
*
s
);
743
void
ff_MPV_common_init_x86
(
MpegEncContext
*
s
);
744
void
ff_MPV_common_init_axp
(
MpegEncContext
*
s
);
745
void
ff_MPV_common_init_arm
(
MpegEncContext
*
s
);
746
void
ff_MPV_common_init_ppc
(
MpegEncContext
*
s
);
747
void
ff_clean_intra_table_entries
(
MpegEncContext
*
s
);
748
void
ff_mpeg_draw_horiz_band
(
MpegEncContext
*
s
,
int
y
,
int
h);
749
void
ff_mpeg_flush
(
AVCodecContext
*
avctx
);
750
751
void
ff_print_debug_info
(
MpegEncContext
*
s
,
Picture
*p,
AVFrame
*pict);
752
void
ff_print_debug_info2
(
AVCodecContext
*
avctx
,
AVFrame
*pict,
uint8_t
*
mbskip_table
,
753
uint32_t *mbtype_table, int8_t *qscale_table, int16_t (*motion_val[2])[2],
754
int
*
low_delay
,
755
int
mb_width
,
int
mb_height
,
int
mb_stride
,
int
quarter_sample
);
756
757
int
ff_mpv_export_qp_table
(
MpegEncContext
*
s
,
AVFrame
*f,
Picture
*p,
int
qp_type);
758
759
void
ff_write_quant_matrix
(
PutBitContext
*
pb
, uint16_t *matrix);
760
int
ff_find_unused_picture
(
MpegEncContext
*
s
,
int
shared);
761
void
ff_denoise_dct
(
MpegEncContext
*
s
, int16_t *
block
);
762
int
ff_update_duplicate_context
(
MpegEncContext
*dst,
MpegEncContext
*
src
);
763
int
ff_MPV_lowest_referenced_row
(
MpegEncContext
*
s
,
int
dir);
764
void
ff_MPV_report_decode_progress
(
MpegEncContext
*
s
);
765
int
ff_mpeg_update_thread_context
(
AVCodecContext
*dst,
const
AVCodecContext
*
src
);
766
void
ff_set_qscale
(
MpegEncContext
*
s
,
int
qscale
);
767
768
int
ff_dct_common_init
(
MpegEncContext
*
s
);
769
int
ff_dct_encode_init
(
MpegEncContext
*
s
);
770
void
ff_convert_matrix
(
MpegEncContext
*
s
,
int
(*qmat)[64], uint16_t (*qmat16)[2][64],
771
const
uint16_t *quant_matrix,
int
bias,
int
qmin,
int
qmax,
int
intra);
772
int
ff_dct_quantize_c
(
MpegEncContext
*s, int16_t *
block
,
int
n
,
int
qscale
,
int
*overflow);
773
774
void
ff_init_block_index
(
MpegEncContext
*s);
775
776
void
ff_MPV_motion
(
MpegEncContext
*s,
777
uint8_t
*dest_y,
uint8_t
*dest_cb,
778
uint8_t
*dest_cr,
int
dir,
779
uint8_t
**ref_picture,
780
op_pixels_func
(*pix_op)[4],
781
qpel_mc_func
(*qpix_op)[16]);
782
783
/**
784
* Allocate a Picture.
785
* The pixels are allocated/set by calling get_buffer() if shared = 0.
786
*/
787
int
ff_alloc_picture
(
MpegEncContext
*s,
Picture
*pic,
int
shared);
788
789
/**
790
* permute block according to permuatation.
791
* @param last last non zero element in scantable order
792
*/
793
void
ff_block_permute
(int16_t *
block
,
uint8_t
*permutation,
const
uint8_t
*scantable,
int
last);
794
795
static
inline
void
ff_update_block_index
(
MpegEncContext
*s){
796
const
int
block_size= 8 >> s->
avctx
->
lowres
;
797
798
s->
block_index
[0]+=2;
799
s->
block_index
[1]+=2;
800
s->
block_index
[2]+=2;
801
s->
block_index
[3]+=2;
802
s->
block_index
[4]++;
803
s->
block_index
[5]++;
804
s->
dest
[0]+= 2*block_size;
805
s->
dest
[1]+= block_size;
806
s->
dest
[2]+= block_size;
807
}
808
809
static
inline
int
get_bits_diff
(
MpegEncContext
*s){
810
const
int
bits
=
put_bits_count
(&s->
pb
);
811
const
int
last= s->
last_bits
;
812
813
s->
last_bits
=
bits
;
814
815
return
bits - last;
816
}
817
818
static
inline
int
ff_h263_round_chroma
(
int
x){
819
static
const
uint8_t
h263_chroma_roundtab[16] = {
820
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
821
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
822
};
823
return
h263_chroma_roundtab[x & 0xf] + (x >> 3);
824
}
825
826
/* motion_est.c */
827
void
ff_estimate_p_frame_motion
(
MpegEncContext
* s,
828
int
mb_x
,
int
mb_y
);
829
void
ff_estimate_b_frame_motion
(
MpegEncContext
* s,
830
int
mb_x
,
int
mb_y
);
831
int
ff_get_best_fcode
(
MpegEncContext
* s, int16_t (*mv_table)[2],
int
type
);
832
void
ff_fix_long_p_mvs
(
MpegEncContext
* s);
833
void
ff_fix_long_mvs
(
MpegEncContext
* s,
uint8_t
*field_select_table,
int
field_select
,
834
int16_t (*mv_table)[2],
int
f_code
,
int
type
,
int
truncate);
835
int
ff_init_me
(
MpegEncContext
*s);
836
int
ff_pre_estimate_p_frame_motion
(
MpegEncContext
* s,
int
mb_x
,
int
mb_y
);
837
int
ff_epzs_motion_search
(
MpegEncContext
* s,
int
*mx_ptr,
int
*my_ptr,
838
int
P[10][2],
int
src_index,
int
ref_index, int16_t (*
last_mv
)[2],
839
int
ref_mv_scale,
int
size
,
int
h);
840
int
ff_get_mb_score
(
MpegEncContext
* s,
int
mx,
int
my,
int
src_index,
841
int
ref_index,
int
size
,
int
h,
int
add_rate);
842
843
/* mpeg12.c */
844
extern
const
uint8_t
ff_mpeg1_dc_scale_table
[128];
845
extern
const
uint8_t
*
const
ff_mpeg2_dc_scale_table
[4];
846
847
void
ff_mpeg1_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
848
void
ff_mpeg1_encode_mb
(
MpegEncContext
*s,
849
int16_t
block
[6][64],
850
int
motion_x,
int
motion_y);
851
void
ff_mpeg1_encode_init
(
MpegEncContext
*s);
852
void
ff_mpeg1_encode_slice_header
(
MpegEncContext
*s);
853
854
extern
const
uint8_t
ff_aic_dc_scale_table
[32];
855
extern
const
uint8_t
ff_h263_chroma_qscale_table
[32];
856
857
/* rv10.c */
858
void
ff_rv10_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
859
int
ff_rv_decode_dc
(
MpegEncContext
*s,
int
n
);
860
void
ff_rv20_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
861
862
863
/* msmpeg4.c */
864
void
ff_msmpeg4_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
865
void
ff_msmpeg4_encode_ext_header
(
MpegEncContext
* s);
866
void
ff_msmpeg4_encode_mb
(
MpegEncContext
* s,
867
int16_t
block
[6][64],
868
int
motion_x,
int
motion_y);
869
int
ff_msmpeg4_decode_picture_header
(
MpegEncContext
* s);
870
int
ff_msmpeg4_decode_ext_header
(
MpegEncContext
* s,
int
buf_size);
871
int
ff_msmpeg4_decode_init
(
AVCodecContext
*avctx);
872
void
ff_msmpeg4_encode_init
(
MpegEncContext
*s);
873
int
ff_wmv2_decode_picture_header
(
MpegEncContext
* s);
874
int
ff_wmv2_decode_secondary_picture_header
(
MpegEncContext
* s);
875
void
ff_wmv2_add_mb
(
MpegEncContext
*s, int16_t
block
[6][64],
uint8_t
*dest_y,
uint8_t
*dest_cb,
uint8_t
*dest_cr);
876
void
ff_mspel_motion
(
MpegEncContext
*s,
877
uint8_t
*dest_y,
uint8_t
*dest_cb,
uint8_t
*dest_cr,
878
uint8_t
**ref_picture,
op_pixels_func
(*pix_op)[4],
879
int
motion_x,
int
motion_y,
int
h);
880
int
ff_wmv2_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
881
void
ff_wmv2_encode_mb
(
MpegEncContext
* s,
882
int16_t
block
[6][64],
883
int
motion_x,
int
motion_y);
884
885
int
ff_mpeg_ref_picture
(
MpegEncContext
*s,
Picture
*dst,
Picture
*
src
);
886
void
ff_mpeg_unref_picture
(
MpegEncContext
*s,
Picture
*
picture
);
887
void
ff_free_picture_tables
(
Picture
*pic);
888
889
890
#endif
/* AVCODEC_MPEGVIDEO_H */
Generated on Sun Jul 20 2014 23:05:52 for FFmpeg by
1.8.2