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