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