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