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