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
*
intra_chroma_ac_vlc_length
;
447
uint8_t
*
intra_chroma_ac_vlc_last_length
;
448
uint8_t
*
inter_ac_vlc_length
;
449
uint8_t
*
inter_ac_vlc_last_length
;
450
uint8_t
*
luma_dc_vlc_length
;
451
#define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
452
453
int
coded_score
[12];
454
455
/** precomputed matrix (combine qscale and DCT renorm) */
456
int (*
q_intra_matrix
)[64];
457
int (*
q_chroma_intra_matrix
)[64];
458
int (*
q_inter_matrix
)[64];
459
/** identical to the above but for MMX & these are not permutated, second 64 entries are bias*/
460
uint16_t (*
q_intra_matrix16
)[2][64];
461
uint16_t (*
q_chroma_intra_matrix16
)[2][64];
462
uint16_t (*
q_inter_matrix16
)[2][64];
463
464
/* noise reduction */
465
int (*
dct_error_sum
)[64];
466
int
dct_count
[2];
467
uint16_t (*
dct_offset
)[64];
468
469
/* bit rate control */
470
int64_t
total_bits
;
471
int
frame_bits
;
///< bits used for the current frame
472
int
stuffing_bits
;
///< bits used for stuffing
473
int
next_lambda
;
///< next lambda used for retrying to encode a frame
474
RateControlContext
rc_context
;
///< contains stuff only accessed in ratecontrol.c
475
476
/* statistics, used for 2-pass encoding */
477
int
mv_bits
;
478
int
header_bits
;
479
int
i_tex_bits
;
480
int
p_tex_bits
;
481
int
i_count
;
482
int
f_count
;
483
int
b_count
;
484
int
skip_count
;
485
int
misc_bits
;
///< cbp, mb_type
486
int
last_bits
;
///< temp var used for calculating the above vars
487
488
/* error concealment / resync */
489
int
resync_mb_x
;
///< x position of last resync marker
490
int
resync_mb_y
;
///< y position of last resync marker
491
GetBitContext
last_resync_gb
;
///< used to search for the next resync marker
492
int
mb_num_left
;
///< number of MBs left in this video packet (for partitioned Slices only)
493
int
next_p_frame_damaged
;
///< set if the next p frame is damaged, to avoid showing trashed b frames
494
int
err_recognition
;
495
496
ParseContext
parse_context
;
497
498
/* H.263 specific */
499
int
gob_index
;
500
int
obmc
;
///< overlapped block motion compensation
501
int
mb_info
;
///< interval for outputting info about mb offsets as side data
502
int
prev_mb_info
,
last_mb_info
;
503
uint8_t
*
mb_info_ptr
;
504
int
mb_info_size
;
505
int
ehc_mode
;
506
507
/* H.263+ specific */
508
int
umvplus
;
///< == H263+ && unrestricted_mv
509
int
h263_aic_dir
;
///< AIC direction: 0 = left, 1 = top
510
int
h263_slice_structured
;
511
int
alt_inter_vlc
;
///< alternative inter vlc
512
int
modified_quant
;
513
int
loop_filter
;
514
int
custom_pcf
;
515
516
/* mpeg4 specific */
517
///< number of bits to represent the fractional part of time (encoder only)
518
int
time_increment_bits
;
519
int
last_time_base
;
520
int
time_base
;
///< time in seconds of last I,P,S Frame
521
int64_t
time
;
///< time of current frame
522
int64_t
last_non_b_time
;
523
uint16_t
pp_time
;
///< time distance between the last 2 p,s,i frames
524
uint16_t
pb_time
;
///< time distance between the last b and p,s,i frame
525
uint16_t
pp_field_time
;
526
uint16_t
pb_field_time
;
///< like above, just for interlaced
527
int
real_sprite_warping_points
;
528
int
sprite_offset
[2][2];
///< sprite offset[isChroma][isMVY]
529
int
sprite_delta
[2][2];
///< sprite_delta [isY][isMVY]
530
int
mcsel
;
531
int
quant_precision
;
532
int
quarter_sample
;
///< 1->qpel, 0->half pel ME/MC
533
int
aspect_ratio_info
;
//FIXME remove
534
int
sprite_warping_accuracy
;
535
int
data_partitioning
;
///< data partitioning flag from header
536
int
partitioned_frame
;
///< is current frame partitioned
537
int
low_delay
;
///< no reordering needed / has no b-frames
538
int
vo_type
;
539
PutBitContext
tex_pb
;
///< used for data partitioned VOPs
540
PutBitContext
pb2
;
///< used for data partitioned VOPs
541
int
mpeg_quant
;
542
int
padding_bug_score
;
///< used to detect the VERY common padding bug in MPEG4
543
544
/* divx specific, used to workaround (many) bugs in divx5 */
545
int
divx_packed
;
546
uint8_t
*
bitstream_buffer
;
//Divx 5.01 puts several frames in a single one, this is used to reorder them
547
int
bitstream_buffer_size
;
548
unsigned
int
allocated_bitstream_buffer_size
;
549
550
/* RV10 specific */
551
int
rv10_version
;
///< RV10 version: 0 or 3
552
int
rv10_first_dc_coded
[3];
553
554
/* MJPEG specific */
555
struct
MJpegContext
*
mjpeg_ctx
;
556
int
esc_pos
;
557
558
/* MSMPEG4 specific */
559
int
mv_table_index
;
560
int
rl_table_index
;
561
int
rl_chroma_table_index
;
562
int
dc_table_index
;
563
int
use_skip_mb_code
;
564
int
slice_height
;
///< in macroblocks
565
int
first_slice_line
;
///< used in mpeg4 too to handle resync markers
566
int
flipflop_rounding
;
567
int
msmpeg4_version
;
///< 0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 4=wmv1/7 5=wmv2/8
568
int
per_mb_rl_table
;
569
int
esc3_level_length
;
570
int
esc3_run_length
;
571
/** [mb_intra][isChroma][level][run][last] */
572
int (*
ac_stats
)[2][
MAX_LEVEL
+1][
MAX_RUN
+1][2];
573
int
inter_intra_pred
;
574
int
mspel
;
575
576
/* decompression specific */
577
GetBitContext
gb
;
578
579
/* Mpeg1 specific */
580
int
gop_picture_number
;
///< index of the first picture of a GOP based on fake_pic_num & mpeg1 specific
581
int
last_mv_dir
;
///< last mv_dir, used for b frame encoding
582
uint8_t
*
vbv_delay_ptr
;
///< pointer to vbv_delay in the bitstream
583
584
/* MPEG-2-specific - I wished not to have to support this mess. */
585
int
progressive_sequence
;
586
int
mpeg_f_code
[2][2];
587
588
// picture structure defines are loaded from mpegutils.h
589
int
picture_structure
;
590
591
int
intra_dc_precision
;
592
int
frame_pred_frame_dct
;
593
int
top_field_first
;
594
int
concealment_motion_vectors
;
595
int
q_scale_type
;
596
int
intra_vlc_format
;
597
int
alternate_scan
;
598
int
seq_disp_ext
;
599
int
repeat_first_field
;
600
int
chroma_420_type
;
601
int
chroma_format
;
602
#define CHROMA_420 1
603
#define CHROMA_422 2
604
#define CHROMA_444 3
605
int
chroma_x_shift
;
//depend on pix_format, that depend on chroma_format
606
int
chroma_y_shift
;
607
608
int
progressive_frame
;
609
int
full_pel
[2];
610
int
interlaced_dct
;
611
int
first_field
;
///< is 1 for the first field of a field picture 0 otherwise
612
int
drop_frame_timecode
;
///< timecode is in drop frame format.
613
int
scan_offset
;
///< reserve space for SVCD scan offset user data.
614
615
/* RTP specific */
616
int
rtp_mode
;
617
618
char
*
tc_opt_str
;
///< timecode option string
619
AVTimecode
tc
;
///< timecode context
620
621
uint8_t
*
ptr_lastgob
;
622
int
swap_uv
;
//vcr2 codec is an MPEG-2 variant with U and V swapped
623
int
pack_pblocks
;
//xvmc needs to keep blocks without gaps.
624
int16_t (*
pblocks
[12])[64];
625
626
int16_t (*
block
)[64];
///< points to one of the following blocks
627
int16_t (*
blocks
)[12][64];
// for HQ mode we need to keep the best block
628
int (*
decode_mb
)(
struct
MpegEncContext
*
s
, int16_t
block
[6][64]);
// used by some codecs to avoid a switch()
629
#define SLICE_OK 0
630
#define SLICE_ERROR -1
631
#define SLICE_END -2
///<end marker found
632
#define SLICE_NOEND -3
///<no end marker or error found but mb count exceeded
633
634
void
(*
dct_unquantize_mpeg1_intra
)(
struct
MpegEncContext
*
s
,
635
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
636
void
(*
dct_unquantize_mpeg1_inter
)(
struct
MpegEncContext
*
s
,
637
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
638
void
(*
dct_unquantize_mpeg2_intra
)(
struct
MpegEncContext
*
s
,
639
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
640
void
(*
dct_unquantize_mpeg2_inter
)(
struct
MpegEncContext
*
s
,
641
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
642
void
(*
dct_unquantize_h263_intra
)(
struct
MpegEncContext
*
s
,
643
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
644
void
(*
dct_unquantize_h263_inter
)(
struct
MpegEncContext
*
s
,
645
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
646
void
(*
dct_unquantize_intra
)(
struct
MpegEncContext
*
s
,
// unquantizer to use (mpeg4 can use both)
647
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
648
void
(*
dct_unquantize_inter
)(
struct
MpegEncContext
*
s
,
// unquantizer to use (mpeg4 can use both)
649
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
650
int (*
dct_quantize
)(
struct
MpegEncContext
*
s
, int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
,
int
*overflow);
651
int (*
fast_dct_quantize
)(
struct
MpegEncContext
*
s
, int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
,
int
*overflow);
652
void
(*
denoise_dct
)(
struct
MpegEncContext
*
s
, int16_t *
block
);
653
654
int
mpv_flags
;
///< flags set by private options
655
int
quantizer_noise_shaping
;
656
657
/**
658
* ratecontrol qmin qmax limiting method
659
* 0-> clipping, 1-> use a nice continuous function to limit qscale within qmin/qmax.
660
*/
661
float
rc_qsquish
;
662
float
rc_qmod_amp
;
663
int
rc_qmod_freq
;
664
float
rc_initial_cplx
;
665
float
rc_buffer_aggressivity
;
666
float
border_masking
;
667
int
lmin
,
lmax
;
668
669
char
*
rc_eq
;
670
671
/* temp buffers for rate control */
672
float
*
cplx_tab
, *
bits_tab
;
673
674
/* flag to indicate a reinitialization is required, e.g. after
675
* a frame size change */
676
int
context_reinit
;
677
678
ERContext
er
;
679
680
int
error_rate
;
681
682
/* temporary frames used by b_frame_strategy = 2 */
683
AVFrame
*
tmp_frames
[
MAX_B_FRAMES
+ 2];
684
}
MpegEncContext
;
685
686
/* mpegvideo_enc common options */
687
#define FF_MPV_FLAG_SKIP_RD 0x0001
688
#define FF_MPV_FLAG_STRICT_GOP 0x0002
689
#define FF_MPV_FLAG_QP_RD 0x0004
690
#define FF_MPV_FLAG_CBP_RD 0x0008
691
#define FF_MPV_FLAG_NAQ 0x0010
692
#define FF_MPV_FLAG_MV0 0x0020
693
694
#ifndef FF_MPV_OFFSET
695
#define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x)
696
#endif
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
{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", \
714
FF_MPV_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \
715
{"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}, \
716
{"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}, \
717
{"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " \
718
"defined in the section 'Expression Evaluation', the following functions are available: " \
719
"bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \
720
"fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \
721
FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \
722
{"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}, \
723
{"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}, \
724
{"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}, \
725
{"lmin", "minimum Lagrange factor (VBR)", FF_MPV_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \
726
{"lmax", "maximum Lagrange factor (VBR)", FF_MPV_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \
727
728
extern
const
AVOption
ff_mpv_generic_options
[];
729
730
#define FF_MPV_GENERIC_CLASS(name) \
731
static const AVClass name ## _class = {\
732
.class_name = #name " encoder",\
733
.item_name = av_default_item_name,\
734
.option = ff_mpv_generic_options,\
735
.version = LIBAVUTIL_VERSION_INT,\
736
};
737
738
/**
739
* Set the given MpegEncContext to common defaults (same for encoding
740
* and decoding). The changed fields will not depend upon the prior
741
* state of the MpegEncContext.
742
*/
743
void
ff_mpv_common_defaults
(
MpegEncContext
*
s
);
744
745
void
ff_dct_encode_init_x86
(
MpegEncContext
*
s
);
746
747
int
ff_mpv_common_init
(
MpegEncContext
*
s
);
748
void
ff_mpv_common_init_arm
(
MpegEncContext
*
s
);
749
void
ff_mpv_common_init_axp
(
MpegEncContext
*
s
);
750
void
ff_mpv_common_init_neon
(
MpegEncContext
*
s
);
751
void
ff_mpv_common_init_ppc
(
MpegEncContext
*
s
);
752
void
ff_mpv_common_init_x86
(
MpegEncContext
*
s
);
753
754
int
ff_mpv_common_frame_size_change
(
MpegEncContext
*
s
);
755
void
ff_mpv_common_end
(
MpegEncContext
*
s
);
756
757
void
ff_mpv_decode_defaults
(
MpegEncContext
*
s
);
758
void
ff_mpv_decode_init
(
MpegEncContext
*
s
,
AVCodecContext
*
avctx
);
759
void
ff_mpv_decode_mb
(
MpegEncContext
*
s
, int16_t
block
[12][64]);
760
void
ff_mpv_report_decode_progress
(
MpegEncContext
*
s
);
761
762
int
ff_mpv_frame_start
(
MpegEncContext
*
s
,
AVCodecContext
*
avctx
);
763
void
ff_mpv_frame_end
(
MpegEncContext
*
s
);
764
765
int
ff_mpv_lowest_referenced_row
(
MpegEncContext
*
s
,
int
dir);
766
767
int
ff_mpv_encode_init
(
AVCodecContext
*
avctx
);
768
void
ff_mpv_encode_init_x86
(
MpegEncContext
*
s
);
769
770
int
ff_mpv_encode_end
(
AVCodecContext
*
avctx
);
771
int
ff_mpv_encode_picture
(
AVCodecContext
*
avctx
,
AVPacket
*
pkt
,
772
const
AVFrame
*
frame
,
int
*got_packet);
773
774
void
ff_clean_intra_table_entries
(
MpegEncContext
*
s
);
775
void
ff_mpeg_draw_horiz_band
(
MpegEncContext
*
s
,
int
y
,
int
h);
776
void
ff_mpeg_flush
(
AVCodecContext
*
avctx
);
777
778
void
ff_print_debug_info
(
MpegEncContext
*
s
,
Picture
*p,
AVFrame
*pict);
779
void
ff_print_debug_info2
(
AVCodecContext
*
avctx
,
AVFrame
*pict,
uint8_t
*
mbskip_table
,
780
uint32_t *mbtype_table, int8_t *qscale_table, int16_t (*motion_val[2])[2],
781
int
*
low_delay
,
782
int
mb_width
,
int
mb_height
,
int
mb_stride
,
int
quarter_sample
);
783
784
int
ff_mpv_export_qp_table
(
MpegEncContext
*
s
,
AVFrame
*f,
Picture
*p,
int
qp_type);
785
786
void
ff_write_quant_matrix
(
PutBitContext
*
pb
, uint16_t *matrix);
787
int
ff_find_unused_picture
(
MpegEncContext
*
s
,
int
shared);
788
int
ff_update_duplicate_context
(
MpegEncContext
*dst,
MpegEncContext
*
src
);
789
int
ff_mpeg_update_thread_context
(
AVCodecContext
*dst,
const
AVCodecContext
*
src
);
790
void
ff_set_qscale
(
MpegEncContext
*
s
,
int
qscale
);
791
792
void
ff_mpv_idct_init
(
MpegEncContext
*
s
);
793
int
ff_dct_encode_init
(
MpegEncContext
*
s
);
794
void
ff_convert_matrix
(
MpegEncContext
*
s
,
int
(*qmat)[64], uint16_t (*qmat16)[2][64],
795
const
uint16_t *quant_matrix,
int
bias,
int
qmin,
int
qmax,
int
intra);
796
int
ff_dct_quantize_c
(
MpegEncContext
*s, int16_t *
block
,
int
n
,
int
qscale
,
int
*overflow);
797
798
void
ff_init_block_index
(
MpegEncContext
*s);
799
800
void
ff_mpv_motion
(
MpegEncContext
*s,
801
uint8_t
*dest_y,
uint8_t
*dest_cb,
802
uint8_t
*dest_cr,
int
dir,
803
uint8_t
**ref_picture,
804
op_pixels_func
(*pix_op)[4],
805
qpel_mc_func
(*qpix_op)[16]);
806
807
/**
808
* Allocate a Picture.
809
* The pixels are allocated/set by calling get_buffer() if shared = 0.
810
*/
811
int
ff_alloc_picture
(
MpegEncContext
*s,
Picture
*pic,
int
shared);
812
813
/**
814
* permute block according to permuatation.
815
* @param last last non zero element in scantable order
816
*/
817
void
ff_block_permute
(int16_t *
block
,
uint8_t
*permutation,
const
uint8_t
*scantable,
int
last);
818
819
static
inline
void
ff_update_block_index
(
MpegEncContext
*s){
820
const
int
block_size= 8 >> s->
avctx
->
lowres
;
821
822
s->
block_index
[0]+=2;
823
s->
block_index
[1]+=2;
824
s->
block_index
[2]+=2;
825
s->
block_index
[3]+=2;
826
s->
block_index
[4]++;
827
s->
block_index
[5]++;
828
s->
dest
[0]+= 2*block_size;
829
s->
dest
[1]+= block_size;
830
s->
dest
[2]+= block_size;
831
}
832
833
static
inline
int
get_bits_diff
(
MpegEncContext
*s){
834
const
int
bits
=
put_bits_count
(&s->
pb
);
835
const
int
last= s->
last_bits
;
836
837
s->
last_bits
=
bits
;
838
839
return
bits - last;
840
}
841
842
static
inline
int
ff_h263_round_chroma
(
int
x){
843
static
const
uint8_t
h263_chroma_roundtab[16] = {
844
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
845
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
846
};
847
return
h263_chroma_roundtab[x & 0xf] + (x >> 3);
848
}
849
850
/* motion_est.c */
851
void
ff_estimate_p_frame_motion
(
MpegEncContext
* s,
852
int
mb_x
,
int
mb_y
);
853
void
ff_estimate_b_frame_motion
(
MpegEncContext
* s,
854
int
mb_x
,
int
mb_y
);
855
int
ff_get_best_fcode
(
MpegEncContext
* s, int16_t (*mv_table)[2],
int
type
);
856
void
ff_fix_long_p_mvs
(
MpegEncContext
* s);
857
void
ff_fix_long_mvs
(
MpegEncContext
* s,
uint8_t
*field_select_table,
int
field_select
,
858
int16_t (*mv_table)[2],
int
f_code
,
int
type
,
int
truncate);
859
int
ff_init_me
(
MpegEncContext
*s);
860
int
ff_pre_estimate_p_frame_motion
(
MpegEncContext
* s,
int
mb_x
,
int
mb_y
);
861
int
ff_epzs_motion_search
(
MpegEncContext
* s,
int
*mx_ptr,
int
*my_ptr,
862
int
P[10][2],
int
src_index,
int
ref_index, int16_t (*
last_mv
)[2],
863
int
ref_mv_scale,
int
size
,
int
h);
864
int
ff_get_mb_score
(
MpegEncContext
* s,
int
mx,
int
my,
int
src_index,
865
int
ref_index,
int
size
,
int
h,
int
add_rate);
866
867
/* mpeg12.c */
868
extern
const
uint8_t
ff_mpeg1_dc_scale_table
[128];
869
extern
const
uint8_t
*
const
ff_mpeg2_dc_scale_table
[4];
870
871
void
ff_mpeg1_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
872
void
ff_mpeg1_encode_mb
(
MpegEncContext
*s,
873
int16_t
block
[8][64],
874
int
motion_x,
int
motion_y);
875
void
ff_mpeg1_encode_init
(
MpegEncContext
*s);
876
void
ff_mpeg1_encode_slice_header
(
MpegEncContext
*s);
877
878
extern
const
uint8_t
ff_aic_dc_scale_table
[32];
879
extern
const
uint8_t
ff_h263_chroma_qscale_table
[32];
880
881
/* rv10.c */
882
int
ff_rv10_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
883
int
ff_rv_decode_dc
(
MpegEncContext
*s,
int
n
);
884
void
ff_rv20_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
885
886
887
/* msmpeg4.c */
888
void
ff_msmpeg4_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
889
void
ff_msmpeg4_encode_ext_header
(
MpegEncContext
* s);
890
void
ff_msmpeg4_encode_mb
(
MpegEncContext
* s,
891
int16_t
block
[6][64],
892
int
motion_x,
int
motion_y);
893
int
ff_msmpeg4_decode_picture_header
(
MpegEncContext
* s);
894
int
ff_msmpeg4_decode_ext_header
(
MpegEncContext
* s,
int
buf_size);
895
int
ff_msmpeg4_decode_init
(
AVCodecContext
*avctx);
896
int
ff_msmpeg4_encode_init
(
MpegEncContext
*s);
897
int
ff_wmv2_decode_picture_header
(
MpegEncContext
* s);
898
int
ff_wmv2_decode_secondary_picture_header
(
MpegEncContext
* s);
899
void
ff_wmv2_add_mb
(
MpegEncContext
*s, int16_t
block
[6][64],
uint8_t
*dest_y,
uint8_t
*dest_cb,
uint8_t
*dest_cr);
900
void
ff_mspel_motion
(
MpegEncContext
*s,
901
uint8_t
*dest_y,
uint8_t
*dest_cb,
uint8_t
*dest_cr,
902
uint8_t
**ref_picture,
op_pixels_func
(*pix_op)[4],
903
int
motion_x,
int
motion_y,
int
h);
904
int
ff_wmv2_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
905
void
ff_wmv2_encode_mb
(
MpegEncContext
* s,
906
int16_t
block
[6][64],
907
int
motion_x,
int
motion_y);
908
909
int
ff_mpeg_ref_picture
(
MpegEncContext
*s,
Picture
*dst,
Picture
*
src
);
910
void
ff_mpeg_unref_picture
(
MpegEncContext
*s,
Picture
*
picture
);
911
void
ff_free_picture_tables
(
Picture
*pic);
912
913
914
#endif
/* AVCODEC_MPEGVIDEO_H */
Generated on Sun Mar 8 2015 02:34:57 for FFmpeg by
1.8.2