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