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