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