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
int
linesize
;
///< line size, in bytes, may be different from width
288
int
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_video()
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 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
549
/* H.263+ specific */
550
int
umvplus
;
///< == H263+ && unrestricted_mv
551
int
h263_aic_dir
;
///< AIC direction: 0 = left, 1 = top
552
int
h263_slice_structured
;
553
int
alt_inter_vlc
;
///< alternative inter vlc
554
int
modified_quant
;
555
int
loop_filter
;
556
int
custom_pcf
;
557
558
/* mpeg4 specific */
559
int
time_increment_bits
;
///< number of bits to represent the fractional part of time
560
int
last_time_base
;
561
int
time_base
;
///< time in seconds of last I,P,S Frame
562
int64_t
time
;
///< time of current frame
563
int64_t
last_non_b_time
;
564
uint16_t
pp_time
;
///< time distance between the last 2 p,s,i frames
565
uint16_t
pb_time
;
///< time distance between the last b and p,s,i frame
566
uint16_t
pp_field_time
;
567
uint16_t
pb_field_time
;
///< like above, just for interlaced
568
int
shape
;
569
int
vol_sprite_usage
;
570
int
sprite_width
;
571
int
sprite_height
;
572
int
sprite_left
;
573
int
sprite_top
;
574
int
sprite_brightness_change
;
575
int
num_sprite_warping_points
;
576
int
real_sprite_warping_points
;
577
uint16_t
sprite_traj
[4][2];
///< sprite trajectory points
578
int
sprite_offset
[2][2];
///< sprite offset[isChroma][isMVY]
579
int
sprite_delta
[2][2];
///< sprite_delta [isY][isMVY]
580
int
sprite_shift
[2];
///< sprite shift [isChroma]
581
int
mcsel
;
582
int
quant_precision
;
583
int
quarter_sample
;
///< 1->qpel, 0->half pel ME/MC
584
int
scalability
;
585
int
hierachy_type
;
586
int
enhancement_type
;
587
int
new_pred
;
588
int
reduced_res_vop
;
589
int
aspect_ratio_info
;
//FIXME remove
590
int
sprite_warping_accuracy
;
591
int
low_latency_sprite
;
592
int
data_partitioning
;
///< data partitioning flag from header
593
int
partitioned_frame
;
///< is current frame partitioned
594
int
rvlc
;
///< reversible vlc
595
int
resync_marker
;
///< could this stream contain resync markers
596
int
low_delay
;
///< no reordering needed / has no b-frames
597
int
vo_type
;
598
int
vol_control_parameters
;
///< does the stream contain the low_delay flag, used to workaround buggy encoders
599
int
intra_dc_threshold
;
///< QP above whch the ac VLC should be used for intra dc
600
int
use_intra_dc_vlc
;
601
PutBitContext
tex_pb
;
///< used for data partitioned VOPs
602
PutBitContext
pb2
;
///< used for data partitioned VOPs
603
int
mpeg_quant
;
604
int
t_frame
;
///< time distance of first I -> B, used for interlaced b frames
605
int
padding_bug_score
;
///< used to detect the VERY common padding bug in MPEG4
606
int
cplx_estimation_trash_i
;
607
int
cplx_estimation_trash_p
;
608
int
cplx_estimation_trash_b
;
609
610
/* divx specific, used to workaround (many) bugs in divx5 */
611
int
divx_version
;
612
int
divx_build
;
613
int
divx_packed
;
614
uint8_t
*
bitstream_buffer
;
//Divx 5.01 puts several frames in a single one, this is used to reorder them
615
int
bitstream_buffer_size
;
616
unsigned
int
allocated_bitstream_buffer_size
;
617
618
int
xvid_build
;
619
620
/* lavc specific stuff, used to workaround bugs in libavcodec */
621
int
lavc_build
;
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
mjpeg_vsample
[3];
///< vertical sampling factors, default = {2, 1, 1}
631
int
mjpeg_hsample
[3];
///< horizontal sampling factors, default = {2, 1, 1}
632
int
esc_pos
;
633
634
/* MSMPEG4 specific */
635
int
mv_table_index
;
636
int
rl_table_index
;
637
int
rl_chroma_table_index
;
638
int
dc_table_index
;
639
int
use_skip_mb_code
;
640
int
slice_height
;
///< in macroblocks
641
int
first_slice_line
;
///< used in mpeg4 too to handle resync markers
642
int
flipflop_rounding
;
643
int
msmpeg4_version
;
///< 0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 4=wmv1/7 5=wmv2/8
644
int
per_mb_rl_table
;
645
int
esc3_level_length
;
646
int
esc3_run_length
;
647
/** [mb_intra][isChroma][level][run][last] */
648
int (*
ac_stats
)[2][
MAX_LEVEL
+1][
MAX_RUN
+1][2];
649
int
inter_intra_pred
;
650
int
mspel
;
651
652
/* decompression specific */
653
GetBitContext
gb
;
654
655
/* Mpeg1 specific */
656
int
gop_picture_number
;
///< index of the first picture of a GOP based on fake_pic_num & mpeg1 specific
657
int
last_mv_dir
;
///< last mv_dir, used for b frame encoding
658
int
broken_link
;
///< no_output_of_prior_pics_flag
659
uint8_t
*
vbv_delay_ptr
;
///< pointer to vbv_delay in the bitstream
660
661
/* MPEG-2-specific - I wished not to have to support this mess. */
662
int
progressive_sequence
;
663
int
mpeg_f_code
[2][2];
664
int
picture_structure
;
665
/* picture type */
666
#define PICT_TOP_FIELD 1
667
#define PICT_BOTTOM_FIELD 2
668
#define PICT_FRAME 3
669
670
int
intra_dc_precision
;
671
int
frame_pred_frame_dct
;
672
int
top_field_first
;
673
int
concealment_motion_vectors
;
674
int
q_scale_type
;
675
int
intra_vlc_format
;
676
int
alternate_scan
;
677
int
repeat_first_field
;
678
int
chroma_420_type
;
679
int
chroma_format
;
680
#define CHROMA_420 1
681
#define CHROMA_422 2
682
#define CHROMA_444 3
683
int
chroma_x_shift
;
//depend on pix_format, that depend on chroma_format
684
int
chroma_y_shift
;
685
686
int
progressive_frame
;
687
int
full_pel
[2];
688
int
interlaced_dct
;
689
int
first_slice
;
690
int
first_field
;
///< is 1 for the first field of a field picture 0 otherwise
691
int
drop_frame_timecode
;
///< timecode is in drop frame format.
692
int
scan_offset
;
///< reserve space for SVCD scan offset user data.
693
694
/* RTP specific */
695
int
rtp_mode
;
696
697
char
*
tc_opt_str
;
///< timecode option string
698
AVTimecode
tc
;
///< timecode context
699
700
uint8_t
*
ptr_lastgob
;
701
int
swap_uv
;
//vcr2 codec is an MPEG-2 variant with U and V swapped
702
int16_t (*
pblocks
[12])[64];
703
704
int16_t (*
block
)[64];
///< points to one of the following blocks
705
int16_t (*
blocks
)[12][64];
// for HQ mode we need to keep the best block
706
int (*
decode_mb
)(
struct
MpegEncContext
*
s
, int16_t
block
[6][64]);
// used by some codecs to avoid a switch()
707
#define SLICE_OK 0
708
#define SLICE_ERROR -1
709
#define SLICE_END -2
///<end marker found
710
#define SLICE_NOEND -3
///<no end marker or error found but mb count exceeded
711
712
void
(*
dct_unquantize_mpeg1_intra
)(
struct
MpegEncContext
*
s
,
713
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
714
void
(*
dct_unquantize_mpeg1_inter
)(
struct
MpegEncContext
*
s
,
715
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
716
void
(*
dct_unquantize_mpeg2_intra
)(
struct
MpegEncContext
*
s
,
717
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
718
void
(*
dct_unquantize_mpeg2_inter
)(
struct
MpegEncContext
*
s
,
719
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
720
void
(*
dct_unquantize_h263_intra
)(
struct
MpegEncContext
*
s
,
721
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
722
void
(*
dct_unquantize_h263_inter
)(
struct
MpegEncContext
*
s
,
723
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
724
void
(*
dct_unquantize_h261_intra
)(
struct
MpegEncContext
*
s
,
725
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
726
void
(*
dct_unquantize_h261_inter
)(
struct
MpegEncContext
*
s
,
727
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
728
void
(*
dct_unquantize_intra
)(
struct
MpegEncContext
*
s
,
// unquantizer to use (mpeg4 can use both)
729
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
730
void
(*
dct_unquantize_inter
)(
struct
MpegEncContext
*
s
,
// unquantizer to use (mpeg4 can use both)
731
int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
);
732
int (*
dct_quantize
)(
struct
MpegEncContext
*
s
, int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
,
int
*overflow);
733
int (*
fast_dct_quantize
)(
struct
MpegEncContext
*
s
, int16_t *
block
/*align 16*/
,
int
n
,
int
qscale
,
int
*overflow);
734
void
(*
denoise_dct
)(
struct
MpegEncContext
*
s
, int16_t *
block
);
735
736
int
mpv_flags
;
///< flags set by private options
737
int
quantizer_noise_shaping
;
738
739
/* temp buffers for rate control */
740
float
*
cplx_tab
, *
bits_tab
;
741
742
/* flag to indicate a reinitialization is required, e.g. after
743
* a frame size change */
744
int
context_reinit
;
745
746
ERContext
er
;
747
}
MpegEncContext
;
748
749
#define REBASE_PICTURE(pic, new_ctx, old_ctx) \
750
((pic && pic >= old_ctx->picture && \
751
pic < old_ctx->picture + MAX_PICTURE_COUNT) ? \
752
&new_ctx->picture[pic - old_ctx->picture] : NULL)
753
754
/* mpegvideo_enc common options */
755
#define FF_MPV_FLAG_SKIP_RD 0x0001
756
#define FF_MPV_FLAG_STRICT_GOP 0x0002
757
#define FF_MPV_FLAG_QP_RD 0x0004
758
#define FF_MPV_FLAG_CBP_RD 0x0008
759
760
#define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x)
761
#define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
762
#define FF_MPV_COMMON_OPTS \
763
{ "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" },\
764
{ "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" },\
765
{ "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" },\
766
{ "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" },\
767
{ "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" },\
768
{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\
769
FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
770
{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\
771
FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
772
{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },
773
774
extern
const
AVOption
ff_mpv_generic_options
[];
775
776
#define FF_MPV_GENERIC_CLASS(name) \
777
static const AVClass name ## _class = {\
778
.class_name = #name " encoder",\
779
.item_name = av_default_item_name,\
780
.option = ff_mpv_generic_options,\
781
.version = LIBAVUTIL_VERSION_INT,\
782
};
783
784
/**
785
* Set the given MpegEncContext to common defaults (same for encoding
786
* and decoding). The changed fields will not depend upon the prior
787
* state of the MpegEncContext.
788
*/
789
void
ff_MPV_common_defaults
(
MpegEncContext
*
s
);
790
791
void
ff_MPV_decode_defaults
(
MpegEncContext
*
s
);
792
int
ff_MPV_common_init
(
MpegEncContext
*
s
);
793
int
ff_mpv_frame_size_alloc
(
MpegEncContext
*
s
,
int
linesize
);
794
int
ff_MPV_common_frame_size_change
(
MpegEncContext
*
s
);
795
void
ff_MPV_common_end
(
MpegEncContext
*
s
);
796
void
ff_MPV_decode_mb
(
MpegEncContext
*
s
, int16_t
block
[12][64]);
797
int
ff_MPV_frame_start
(
MpegEncContext
*
s
,
AVCodecContext
*
avctx
);
798
void
ff_MPV_frame_end
(
MpegEncContext
*
s
);
799
int
ff_MPV_encode_init
(
AVCodecContext
*
avctx
);
800
int
ff_MPV_encode_end
(
AVCodecContext
*
avctx
);
801
int
ff_MPV_encode_picture
(
AVCodecContext
*
avctx
,
AVPacket
*
pkt
,
802
AVFrame
*
frame
,
int
*got_packet);
803
void
ff_dct_encode_init_x86
(
MpegEncContext
*
s
);
804
void
ff_MPV_common_init_x86
(
MpegEncContext
*
s
);
805
void
ff_MPV_common_init_axp
(
MpegEncContext
*
s
);
806
void
ff_MPV_common_init_arm
(
MpegEncContext
*
s
);
807
void
ff_MPV_common_init_bfin
(
MpegEncContext
*
s
);
808
void
ff_MPV_common_init_ppc
(
MpegEncContext
*
s
);
809
void
ff_clean_intra_table_entries
(
MpegEncContext
*
s
);
810
void
ff_draw_horiz_band
(
AVCodecContext
*
avctx
,
DSPContext
*
dsp
,
Picture
*cur,
811
Picture
*last,
int
y
,
int
h,
int
picture_structure
,
812
int
first_field
,
int
draw_edges
,
int
low_delay
,
813
int
v_edge_pos
,
int
h_edge_pos
);
814
void
ff_mpeg_draw_horiz_band
(
MpegEncContext
*
s
,
int
y
,
int
h);
815
void
ff_mpeg_flush
(
AVCodecContext
*
avctx
);
816
817
void
ff_print_debug_info
(
MpegEncContext
*
s
,
Picture
*p,
AVFrame
*pict);
818
void
ff_print_debug_info2
(
AVCodecContext
*
avctx
,
Picture
*p,
AVFrame
*pict,
uint8_t
*
mbskip_table
,
819
int
*
low_delay
,
820
int
mb_width
,
int
mb_height
,
int
mb_stride
,
int
quarter_sample
);
821
822
int
ff_mpv_export_qp_table
(
MpegEncContext
*
s
,
AVFrame
*f,
Picture
*p,
int
qp_type);
823
824
void
ff_write_quant_matrix
(
PutBitContext
*
pb
, uint16_t *matrix);
825
void
ff_release_unused_pictures
(
MpegEncContext
*
s
,
int
remove_current);
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
extern
const
uint8_t
ff_h263_loop_filter_strength
[32];
927
928
/* rv10.c */
929
void
ff_rv10_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
930
int
ff_rv_decode_dc
(
MpegEncContext
*s,
int
n
);
931
void
ff_rv20_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
932
933
934
/* msmpeg4.c */
935
void
ff_msmpeg4_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
936
void
ff_msmpeg4_encode_ext_header
(
MpegEncContext
* s);
937
void
ff_msmpeg4_encode_mb
(
MpegEncContext
* s,
938
int16_t
block
[6][64],
939
int
motion_x,
int
motion_y);
940
int
ff_msmpeg4_decode_picture_header
(
MpegEncContext
* s);
941
int
ff_msmpeg4_decode_ext_header
(
MpegEncContext
* s,
int
buf_size);
942
int
ff_msmpeg4_decode_init
(
AVCodecContext
*
avctx
);
943
void
ff_msmpeg4_encode_init
(
MpegEncContext
*s);
944
int
ff_wmv2_decode_picture_header
(
MpegEncContext
* s);
945
int
ff_wmv2_decode_secondary_picture_header
(
MpegEncContext
* s);
946
void
ff_wmv2_add_mb
(
MpegEncContext
*s, int16_t
block
[6][64],
uint8_t
*dest_y,
uint8_t
*dest_cb,
uint8_t
*dest_cr);
947
void
ff_mspel_motion
(
MpegEncContext
*s,
948
uint8_t
*dest_y,
uint8_t
*dest_cb,
uint8_t
*dest_cr,
949
uint8_t
**ref_picture,
op_pixels_func
(*pix_op)[4],
950
int
motion_x,
int
motion_y,
int
h);
951
int
ff_wmv2_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
952
void
ff_wmv2_encode_mb
(
MpegEncContext
* s,
953
int16_t
block
[6][64],
954
int
motion_x,
int
motion_y);
955
956
int
ff_mpeg_ref_picture
(
MpegEncContext
*s,
Picture
*dst,
Picture
*
src
);
957
void
ff_mpeg_unref_picture
(
MpegEncContext
*s,
Picture
*
picture
);
958
959
960
#endif
/* AVCODEC_MPEGVIDEO_H */
Generated on Wed Jul 10 2013 23:48:02 for FFmpeg by
1.8.2