Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
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 Libav.
7
*
8
* Libav 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
* Libav 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 Libav; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
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
40
#define FRAME_SKIPPED 100
41
42
enum
OutputFormat
{
43
FMT_MPEG1
,
44
FMT_H261
,
45
FMT_H263
,
46
FMT_MJPEG
,
47
FMT_H264
,
48
};
49
50
#define MPEG_BUF_SIZE (16 * 1024)
51
52
#define QMAT_SHIFT_MMX 16
53
#define QMAT_SHIFT 22
54
55
#define MAX_FCODE 7
56
#define MAX_MV 2048
57
58
#define MAX_THREADS 16
59
60
#define MAX_PICTURE_COUNT 32
61
62
#define ME_MAP_SIZE 64
63
#define ME_MAP_SHIFT 3
64
#define ME_MAP_MV_BITS 11
65
66
#define MAX_MB_BYTES (30*16*16*3/8 + 120)
67
68
#define INPLACE_OFFSET 16
69
70
/* Start codes. */
71
#define SEQ_END_CODE 0x000001b7
72
#define SEQ_START_CODE 0x000001b3
73
#define GOP_START_CODE 0x000001b8
74
#define PICTURE_START_CODE 0x00000100
75
#define SLICE_MIN_START_CODE 0x00000101
76
#define SLICE_MAX_START_CODE 0x000001af
77
#define EXT_START_CODE 0x000001b5
78
#define USER_START_CODE 0x000001b2
79
80
struct
MpegEncContext
;
81
85
typedef
struct
Picture
{
86
struct
AVFrame
f
;
87
91
uint8_t *
interpolated
[3];
92
int8_t *
qscale_table_base
;
93
int16_t (*
motion_val_base
[2])[2];
94
uint32_t *
mb_type_base
;
95
#define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if there is just one type
96
#define IS_INTRA4x4(a) ((a)&MB_TYPE_INTRA4x4)
97
#define IS_INTRA16x16(a) ((a)&MB_TYPE_INTRA16x16)
98
#define IS_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
99
#define IS_INTRA(a) ((a)&7)
100
#define IS_INTER(a) ((a)&(MB_TYPE_16x16|MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8))
101
#define IS_SKIP(a) ((a)&MB_TYPE_SKIP)
102
#define IS_INTRA_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
103
#define IS_INTERLACED(a) ((a)&MB_TYPE_INTERLACED)
104
#define IS_DIRECT(a) ((a)&MB_TYPE_DIRECT2)
105
#define IS_GMC(a) ((a)&MB_TYPE_GMC)
106
#define IS_16X16(a) ((a)&MB_TYPE_16x16)
107
#define IS_16X8(a) ((a)&MB_TYPE_16x8)
108
#define IS_8X16(a) ((a)&MB_TYPE_8x16)
109
#define IS_8X8(a) ((a)&MB_TYPE_8x8)
110
#define IS_SUB_8X8(a) ((a)&MB_TYPE_16x16) //note reused
111
#define IS_SUB_8X4(a) ((a)&MB_TYPE_16x8) //note reused
112
#define IS_SUB_4X8(a) ((a)&MB_TYPE_8x16) //note reused
113
#define IS_SUB_4X4(a) ((a)&MB_TYPE_8x8) //note reused
114
#define IS_ACPRED(a) ((a)&MB_TYPE_ACPRED)
115
#define IS_QUANT(a) ((a)&MB_TYPE_QUANT)
116
#define IS_DIR(a, part, list) ((a) & (MB_TYPE_P0L0<<((part)+2*(list))))
117
#define USES_LIST(a, list) ((a) & ((MB_TYPE_P0L0|MB_TYPE_P1L0)<<(2*(list))))
118
#define HAS_CBP(a) ((a)&MB_TYPE_CBP)
119
120
int
field_poc
[2];
121
int
poc
;
122
int
frame_num
;
123
int
mmco_reset
;
124
int
pic_id
;
126
int
long_ref
;
127
int
ref_poc
[2][2][32];
128
int
ref_count
[2][2];
129
int
mbaff
;
130
int
field_picture
;
131
132
int
mb_var_sum
;
133
int
mc_mb_var_sum
;
134
uint16_t *
mb_var
;
135
uint16_t *
mc_mb_var
;
136
uint8_t *
mb_mean
;
137
int32_t *
mb_cmp_score
;
138
int
b_frame_score
;
/* */
139
struct
MpegEncContext
*
owner2
;
140
}
Picture
;
141
145
typedef
struct
MotionEstContext
{
146
AVCodecContext
*
avctx
;
147
int
skip
;
148
int
co_located_mv
[4][2];
149
int
direct_basis_mv
[4][2];
150
uint8_t *
scratchpad
;
151
uint8_t *
best_mb
;
152
uint8_t *
temp_mb
[2];
153
uint8_t *
temp
;
154
int
best_bits
;
155
uint32_t *
map
;
156
uint32_t *
score_map
;
157
unsigned
map_generation
;
158
int
pre_penalty_factor
;
159
int
penalty_factor
;
164
int
sub_penalty_factor
;
165
int
mb_penalty_factor
;
166
int
flags
;
167
int
sub_flags
;
168
int
mb_flags
;
169
int
pre_pass
;
170
int
dia_size
;
171
int
xmin
;
172
int
xmax
;
173
int
ymin
;
174
int
ymax
;
175
int
pred_x
;
176
int
pred_y
;
177
uint8_t *
src
[4][4];
178
uint8_t *
ref
[4][4];
179
int
stride
;
180
int
uvstride
;
181
/* temp variables for picture complexity calculation */
182
int
mc_mb_var_sum_temp
;
183
int
mb_var_sum_temp
;
184
int
scene_change_score
;
185
/* cmp, chroma_cmp;*/
186
op_pixels_func
(*
hpel_put
)[4];
187
op_pixels_func
(*
hpel_avg
)[4];
188
qpel_mc_func
(*
qpel_put
)[16];
189
qpel_mc_func
(*
qpel_avg
)[16];
190
uint8_t (*
mv_penalty
)[
MAX_MV
*2+1];
191
uint8_t *
current_mv_penalty
;
192
int (*
sub_motion_search
)(
struct
MpegEncContext
* s,
193
int
*mx_ptr,
int
*my_ptr,
int
dmin,
194
int
src_index,
int
ref_index,
195
int
size
,
int
h);
196
}
MotionEstContext
;
197
201
typedef
struct
MpegEncContext
{
202
AVClass
*
class
;
203
struct
AVCodecContext
*
avctx
;
204
/* the following parameters must be initialized before encoding */
205
int
width
,
height
;
206
int
gop_size
;
207
int
intra_only
;
208
int
bit_rate
;
209
enum
OutputFormat
out_format
;
210
int
h263_pred
;
211
int
pb_frame
;
212
213
/* the following codec id fields are deprecated in favor of codec_id */
214
int
h263_plus
;
215
int
h263_flv
;
216
217
enum
CodecID
codec_id
;
/* see CODEC_ID_xxx */
218
int
fixed_qscale
;
219
int
encoding
;
220
int
flags
;
221
int
flags2
;
222
int
max_b_frames
;
223
int
luma_elim_threshold
;
224
int
chroma_elim_threshold
;
225
int
strict_std_compliance
;
226
int
workaround_bugs
;
227
int
codec_tag
;
228
int
stream_codec_tag
;
229
/* the following fields are managed internally by the encoder */
230
231
/* sequence parameters */
232
int
context_initialized
;
233
int
input_picture_number
;
234
int
coded_picture_number
;
235
int
picture_number
;
//FIXME remove, unclear definition
236
int
picture_in_gop_number
;
237
int
mb_width
,
mb_height
;
238
int
mb_stride
;
239
int
b8_stride
;
240
int
b4_stride
;
241
int
h_edge_pos
,
v_edge_pos
;
242
int
mb_num
;
243
int
linesize
;
244
int
uvlinesize
;
245
Picture
*
picture
;
246
Picture
**
input_picture
;
247
Picture
**
reordered_input_picture
;
248
249
int
y_dc_scale
,
c_dc_scale
;
250
int
ac_pred
;
251
int
block_last_index
[12];
252
int
h263_aic
;
253
254
/* scantables */
255
ScanTable
inter_scantable
;
256
ScanTable
intra_scantable
;
257
ScanTable
intra_h_scantable
;
258
ScanTable
intra_v_scantable
;
259
260
/* WARNING: changes above this line require updates to hardcoded
261
* offsets used in asm. */
262
263
int64_t
user_specified_pts
;
264
266
PutBitContext
pb
;
267
268
int
start_mb_y
;
269
int
end_mb_y
;
270
struct
MpegEncContext
*
thread_context
[
MAX_THREADS
];
271
int
slice_context_count
;
272
277
Picture
last_picture
;
278
283
Picture
next_picture
;
284
289
Picture
new_picture
;
290
295
Picture
current_picture
;
296
297
Picture
*
last_picture_ptr
;
298
Picture
*
next_picture_ptr
;
299
Picture
*
current_picture_ptr
;
300
int
picture_count
;
301
int
picture_range_start
,
picture_range_end
;
302
uint8_t *
visualization_buffer
[3];
303
int
last_dc
[3];
304
int16_t *
dc_val_base
;
305
int16_t *
dc_val
[3];
306
const
uint8_t *
y_dc_scale_table
;
307
const
uint8_t *
c_dc_scale_table
;
308
const
uint8_t *
chroma_qscale_table
;
309
uint8_t *
coded_block_base
;
310
uint8_t *
coded_block
;
311
int16_t (*
ac_val_base
)[16];
312
int16_t (*
ac_val
[3])[16];
313
int
mb_skipped
;
314
uint8_t *
mbskip_table
;
316
uint8_t *
mbintra_table
;
317
uint8_t *
cbp_table
;
318
uint8_t *
pred_dir_table
;
319
uint8_t *
edge_emu_buffer
;
320
uint8_t *
rd_scratchpad
;
321
uint8_t *
obmc_scratchpad
;
322
uint8_t *
b_scratchpad
;
323
324
int
qscale
;
325
int
chroma_qscale
;
326
unsigned
int
lambda
;
327
unsigned
int
lambda2
;
328
int
*
lambda_table
;
329
int
adaptive_quant
;
330
int
dquant
;
331
int
pict_type
;
332
int
last_pict_type
;
//FIXME removes
333
int
last_non_b_pict_type
;
334
int
dropable
;
335
int
frame_rate_index
;
336
int
last_lambda_for
[5];
337
int
skipdct
;
338
339
/* motion compensation */
340
int
unrestricted_mv
;
341
int
h263_long_vectors
;
342
343
DSPContext
dsp
;
344
int
f_code
;
345
int
b_code
;
346
int16_t (*
p_mv_table_base
)[2];
347
int16_t (*
b_forw_mv_table_base
)[2];
348
int16_t (*
b_back_mv_table_base
)[2];
349
int16_t (*
b_bidir_forw_mv_table_base
)[2];
350
int16_t (*
b_bidir_back_mv_table_base
)[2];
351
int16_t (*
b_direct_mv_table_base
)[2];
352
int16_t (*
p_field_mv_table_base
[2][2])[2];
353
int16_t (*
b_field_mv_table_base
[2][2][2])[2];
354
int16_t (*
p_mv_table
)[2];
355
int16_t (*
b_forw_mv_table
)[2];
356
int16_t (*
b_back_mv_table
)[2];
357
int16_t (*
b_bidir_forw_mv_table
)[2];
358
int16_t (*
b_bidir_back_mv_table
)[2];
359
int16_t (*
b_direct_mv_table
)[2];
360
int16_t (*
p_field_mv_table
[2][2])[2];
361
int16_t (*
b_field_mv_table
[2][2][2])[2];
362
uint8_t (*
p_field_select_table
[2]);
363
uint8_t (*
b_field_select_table
[2][2]);
364
int
me_method
;
365
int
mv_dir
;
366
#define MV_DIR_FORWARD 1
367
#define MV_DIR_BACKWARD 2
368
#define MV_DIRECT 4
369
int mv_type;
370
#define MV_TYPE_16X16 0
371
#define MV_TYPE_8X8 1
372
#define MV_TYPE_16X8 2
373
#define MV_TYPE_FIELD 3
374
#define MV_TYPE_DMV 4
375
380
int mv[2][4][2];
381
int
field_select
[2][2];
382
int
last_mv
[2][2][2];
383
uint8_t *
fcode_tab
;
384
int16_t
direct_scale_mv
[2][64];
385
386
MotionEstContext
me
;
387
388
int
no_rounding
;
391
/* macroblock layer */
392
int
mb_x
,
mb_y
;
393
int
mb_skip_run
;
394
int
mb_intra
;
395
uint16_t *
mb_type
;
396
#define CANDIDATE_MB_TYPE_INTRA 0x01
397
#define CANDIDATE_MB_TYPE_INTER 0x02
398
#define CANDIDATE_MB_TYPE_INTER4V 0x04
399
#define CANDIDATE_MB_TYPE_SKIPPED 0x08
400
//#define MB_TYPE_GMC 0x10
401
402
#define CANDIDATE_MB_TYPE_DIRECT 0x10
403
#define CANDIDATE_MB_TYPE_FORWARD 0x20
404
#define CANDIDATE_MB_TYPE_BACKWARD 0x40
405
#define CANDIDATE_MB_TYPE_BIDIR 0x80
406
407
#define CANDIDATE_MB_TYPE_INTER_I 0x100
408
#define CANDIDATE_MB_TYPE_FORWARD_I 0x200
409
#define CANDIDATE_MB_TYPE_BACKWARD_I 0x400
410
#define CANDIDATE_MB_TYPE_BIDIR_I 0x800
411
412
#define CANDIDATE_MB_TYPE_DIRECT0 0x1000
413
414
int
block_index
[6];
415
int
block_wrap
[6];
416
uint8_t *
dest
[3];
417
418
int
*
mb_index2xy
;
419
421
uint16_t
intra_matrix
[64];
422
uint16_t
chroma_intra_matrix
[64];
423
uint16_t
inter_matrix
[64];
424
uint16_t
chroma_inter_matrix
[64];
425
#define QUANT_BIAS_SHIFT 8
426
int
intra_quant_bias
;
427
int
inter_quant_bias
;
428
int
min_qcoeff
;
429
int
max_qcoeff
;
430
int
ac_esc_length
;
431
uint8_t *
intra_ac_vlc_length
;
432
uint8_t *
intra_ac_vlc_last_length
;
433
uint8_t *
inter_ac_vlc_length
;
434
uint8_t *
inter_ac_vlc_last_length
;
435
uint8_t *
luma_dc_vlc_length
;
436
#define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
437
438
int
coded_score
[8];
439
441
int (*
q_intra_matrix
)[64];
442
int (*
q_inter_matrix
)[64];
444
uint16_t (*
q_intra_matrix16
)[2][64];
445
uint16_t (*
q_inter_matrix16
)[2][64];
446
447
/* noise reduction */
448
int (*
dct_error_sum
)[64];
449
int
dct_count
[2];
450
uint16_t (*
dct_offset
)[64];
451
452
void
*
opaque
;
453
454
/* bit rate control */
455
int64_t
total_bits
;
456
int
frame_bits
;
457
int
next_lambda
;
458
RateControlContext
rc_context
;
459
460
/* statistics, used for 2-pass encoding */
461
int
mv_bits
;
462
int
header_bits
;
463
int
i_tex_bits
;
464
int
p_tex_bits
;
465
int
i_count
;
466
int
f_count
;
467
int
b_count
;
468
int
skip_count
;
469
int
misc_bits
;
470
int
last_bits
;
471
472
/* error concealment / resync */
473
int
error_count
,
error_occurred
;
474
uint8_t *
error_status_table
;
475
#define VP_START 1
476
#define ER_AC_ERROR 2
477
#define ER_DC_ERROR 4
478
#define ER_MV_ERROR 8
479
#define ER_AC_END 16
480
#define ER_DC_END 32
481
#define ER_MV_END 64
482
483
#define ER_MB_ERROR (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)
484
#define ER_MB_END (ER_AC_END|ER_DC_END|ER_MV_END)
485
486
int
resync_mb_x
;
487
int
resync_mb_y
;
488
GetBitContext
last_resync_gb
;
489
int
mb_num_left
;
490
int
next_p_frame_damaged
;
491
int
err_recognition
;
492
493
ParseContext
parse_context
;
494
495
/* H.263 specific */
496
int
gob_index
;
497
int
obmc
;
498
int
showed_packed_warning
;
499
500
/* H.263+ specific */
501
int
umvplus
;
502
int
h263_aic_dir
;
503
int
h263_slice_structured
;
504
int
alt_inter_vlc
;
505
int
modified_quant
;
506
int
loop_filter
;
507
int
custom_pcf
;
508
509
/* mpeg4 specific */
510
int
time_increment_bits
;
511
int
last_time_base
;
512
int
time_base
;
513
int64_t
time
;
514
int64_t
last_non_b_time
;
515
uint16_t
pp_time
;
516
uint16_t
pb_time
;
517
uint16_t
pp_field_time
;
518
uint16_t
pb_field_time
;
519
int
shape
;
520
int
vol_sprite_usage
;
521
int
sprite_width
;
522
int
sprite_height
;
523
int
sprite_left
;
524
int
sprite_top
;
525
int
sprite_brightness_change
;
526
int
num_sprite_warping_points
;
527
int
real_sprite_warping_points
;
528
uint16_t
sprite_traj
[4][2];
529
int
sprite_offset
[2][2];
530
int
sprite_delta
[2][2];
531
int
sprite_shift
[2];
532
int
mcsel
;
533
int
quant_precision
;
534
int
quarter_sample
;
535
int
scalability
;
536
int
hierachy_type
;
537
int
enhancement_type
;
538
int
new_pred
;
539
int
reduced_res_vop
;
540
int
aspect_ratio_info
;
//FIXME remove
541
int
sprite_warping_accuracy
;
542
int
low_latency_sprite
;
543
int
data_partitioning
;
544
int
partitioned_frame
;
545
int
rvlc
;
546
int
resync_marker
;
547
int
low_delay
;
548
int
vo_type
;
549
int
vol_control_parameters
;
550
int
intra_dc_threshold
;
551
int
use_intra_dc_vlc
;
552
PutBitContext
tex_pb
;
553
PutBitContext
pb2
;
554
int
mpeg_quant
;
555
int
t_frame
;
556
int
padding_bug_score
;
557
int
cplx_estimation_trash_i
;
558
int
cplx_estimation_trash_p
;
559
int
cplx_estimation_trash_b
;
560
561
/* divx specific, used to workaround (many) bugs in divx5 */
562
int
divx_version
;
563
int
divx_build
;
564
int
divx_packed
;
565
uint8_t *
bitstream_buffer
;
//Divx 5.01 puts several frames in a single one, this is used to reorder them
566
int
bitstream_buffer_size
;
567
unsigned
int
allocated_bitstream_buffer_size
;
568
569
int
xvid_build
;
570
571
/* lavc specific stuff, used to workaround bugs in libavcodec */
572
int
lavc_build
;
573
574
/* RV10 specific */
575
int
rv10_version
;
576
int
rv10_first_dc_coded
[3];
577
int
orig_width
,
orig_height
;
578
579
/* MJPEG specific */
580
struct
MJpegContext
*
mjpeg_ctx
;
581
int
mjpeg_vsample
[3];
582
int
mjpeg_hsample
[3];
583
584
/* MSMPEG4 specific */
585
int
mv_table_index
;
586
int
rl_table_index
;
587
int
rl_chroma_table_index
;
588
int
dc_table_index
;
589
int
use_skip_mb_code
;
590
int
slice_height
;
591
int
first_slice_line
;
592
int
flipflop_rounding
;
593
int
msmpeg4_version
;
594
int
per_mb_rl_table
;
595
int
esc3_level_length
;
596
int
esc3_run_length
;
598
int (*
ac_stats
)[2][
MAX_LEVEL
+1][
MAX_RUN
+1][2];
599
int
inter_intra_pred
;
600
int
mspel
;
601
602
/* decompression specific */
603
GetBitContext
gb
;
604
605
/* Mpeg1 specific */
606
int
gop_picture_number
;
607
int
last_mv_dir
;
608
int
broken_link
;
609
uint8_t *
vbv_delay_ptr
;
610
611
/* MPEG-2-specific - I wished not to have to support this mess. */
612
int
progressive_sequence
;
613
int
mpeg_f_code
[2][2];
614
int
picture_structure
;
615
/* picture type */
616
#define PICT_TOP_FIELD 1
617
#define PICT_BOTTOM_FIELD 2
618
#define PICT_FRAME 3
619
620
int
intra_dc_precision
;
621
int
frame_pred_frame_dct
;
622
int
top_field_first
;
623
int
concealment_motion_vectors
;
624
int
q_scale_type
;
625
int
intra_vlc_format
;
626
int
alternate_scan
;
627
int
repeat_first_field
;
628
int
chroma_420_type
;
629
int
chroma_format
;
630
#define CHROMA_420 1
631
#define CHROMA_422 2
632
#define CHROMA_444 3
633
int
chroma_x_shift
;
//depend on pix_format, that depend on chroma_format
634
int
chroma_y_shift
;
635
636
int
progressive_frame
;
637
int
full_pel
[2];
638
int
interlaced_dct
;
639
int
first_slice
;
640
int
first_field
;
641
int
drop_frame_timecode
;
642
int
scan_offset
;
643
644
/* RTP specific */
645
int
rtp_mode
;
646
647
uint8_t *
ptr_lastgob
;
648
int
swap_uv
;
//vcr2 codec is an MPEG-2 variant with U and V swapped
649
DCTELEM
(*
pblocks
[12])[64];
650
651
DCTELEM
(*
block
)[64];
652
DCTELEM
(*
blocks
)[8][64];
// for HQ mode we need to keep the best block
653
int (*
decode_mb
)(
struct
MpegEncContext
*s,
DCTELEM
block
[6][64]);
// used by some codecs to avoid a switch()
654
#define SLICE_OK 0
655
#define SLICE_ERROR -1
656
#define SLICE_END -2
657
#define SLICE_NOEND -3
658
659
void
(*
dct_unquantize_mpeg1_intra
)(
struct
MpegEncContext
*s,
660
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
661
void
(*
dct_unquantize_mpeg1_inter
)(
struct
MpegEncContext
*s,
662
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
663
void
(*
dct_unquantize_mpeg2_intra
)(
struct
MpegEncContext
*s,
664
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
665
void
(*
dct_unquantize_mpeg2_inter
)(
struct
MpegEncContext
*s,
666
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
667
void
(*
dct_unquantize_h263_intra
)(
struct
MpegEncContext
*s,
668
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
669
void
(*
dct_unquantize_h263_inter
)(
struct
MpegEncContext
*s,
670
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
671
void
(*
dct_unquantize_h261_intra
)(
struct
MpegEncContext
*s,
672
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
673
void
(*
dct_unquantize_h261_inter
)(
struct
MpegEncContext
*s,
674
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
675
void
(*
dct_unquantize_intra
)(
struct
MpegEncContext
*s,
// unquantizer to use (mpeg4 can use both)
676
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
677
void
(*
dct_unquantize_inter
)(
struct
MpegEncContext
*s,
// unquantizer to use (mpeg4 can use both)
678
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
679
int (*
dct_quantize
)(
struct
MpegEncContext
*s,
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
,
int
*overflow);
680
int (*
fast_dct_quantize
)(
struct
MpegEncContext
*s,
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
,
int
*overflow);
681
void
(*
denoise_dct
)(
struct
MpegEncContext
*s,
DCTELEM
*
block
);
682
683
uint8_t *
pkt_swapped
;
684
int
pkt_swapped_allocated
;
685
}
MpegEncContext
;
686
687
#define REBASE_PICTURE(pic, new_ctx, old_ctx) (pic ? \
688
(pic >= old_ctx->picture && pic < old_ctx->picture+old_ctx->picture_count ?\
689
&new_ctx->picture[pic - old_ctx->picture] : pic - (Picture*)old_ctx + (Picture*)new_ctx)\
690
: NULL)
691
692
void
MPV_decode_defaults
(
MpegEncContext
*s);
693
int
MPV_common_init
(
MpegEncContext
*s);
694
void
MPV_common_end
(
MpegEncContext
*s);
695
void
MPV_decode_mb
(
MpegEncContext
*s,
DCTELEM
block
[12][64]);
696
int
MPV_frame_start
(
MpegEncContext
*s,
AVCodecContext
*
avctx
);
697
void
MPV_frame_end
(
MpegEncContext
*s);
698
int
MPV_encode_init
(
AVCodecContext
*
avctx
);
699
int
MPV_encode_end
(
AVCodecContext
*
avctx
);
700
int
MPV_encode_picture
(
AVCodecContext
*
avctx
,
unsigned
char
*buf,
int
buf_size,
void
*
data
);
701
void
MPV_common_init_mmx
(
MpegEncContext
*s);
702
void
MPV_common_init_axp
(
MpegEncContext
*s);
703
void
MPV_common_init_mlib
(
MpegEncContext
*s);
704
void
MPV_common_init_mmi
(
MpegEncContext
*s);
705
void
MPV_common_init_arm
(
MpegEncContext
*s);
706
void
MPV_common_init_altivec
(
MpegEncContext
*s);
707
void
MPV_common_init_bfin
(
MpegEncContext
*s);
708
void
ff_clean_intra_table_entries
(
MpegEncContext
*s);
709
void
ff_draw_horiz_band
(
MpegEncContext
*s,
int
y,
int
h);
710
void
ff_mpeg_flush
(
AVCodecContext
*
avctx
);
711
void
ff_print_debug_info
(
MpegEncContext
*s,
AVFrame
*pict);
712
void
ff_write_quant_matrix
(
PutBitContext
*
pb
, uint16_t *matrix);
713
void
ff_release_unused_pictures
(
MpegEncContext
*s,
int
remove_current);
714
int
ff_find_unused_picture
(
MpegEncContext
*s,
int
shared);
715
void
ff_denoise_dct
(
MpegEncContext
*s,
DCTELEM
*
block
);
716
void
ff_update_duplicate_context
(
MpegEncContext
*dst,
MpegEncContext
*src);
717
int
MPV_lowest_referenced_row
(
MpegEncContext
*s,
int
dir);
718
void
MPV_report_decode_progress
(
MpegEncContext
*s);
719
int
ff_mpeg_update_thread_context
(
AVCodecContext
*dst,
const
AVCodecContext
*src);
720
const
uint8_t *
avpriv_mpv_find_start_code
(
const
uint8_t *p,
const
uint8_t *end, uint32_t *
state
);
721
void
ff_set_qscale
(
MpegEncContext
* s,
int
qscale
);
722
723
void
ff_er_frame_start
(
MpegEncContext
*s);
724
void
ff_er_frame_end
(
MpegEncContext
*s);
725
void
ff_er_add_slice
(
MpegEncContext
*s,
int
startx,
int
starty,
int
endx,
int
endy,
int
status);
726
727
int
ff_dct_common_init
(
MpegEncContext
*s);
728
void
ff_convert_matrix
(
DSPContext
*
dsp
,
int
(*qmat)[64], uint16_t (*qmat16)[2][64],
729
const
uint16_t *quant_matrix,
int
bias,
int
qmin,
int
qmax,
int
intra);
730
731
void
ff_init_block_index
(
MpegEncContext
*s);
732
void
ff_copy_picture
(
Picture
*dst,
Picture
*src);
733
738
int
ff_alloc_picture
(
MpegEncContext
*s,
Picture
*pic,
int
shared);
739
740
extern
const
enum
PixelFormat
ff_pixfmt_list_420
[];
741
extern
const
enum
PixelFormat
ff_hwaccel_pixfmt_list_420
[];
742
743
static
inline
void
ff_update_block_index
(
MpegEncContext
*s){
744
const
int
block_size= 8>>s->
avctx
->
lowres
;
745
746
s->
block_index
[0]+=2;
747
s->
block_index
[1]+=2;
748
s->
block_index
[2]+=2;
749
s->
block_index
[3]+=2;
750
s->
block_index
[4]++;
751
s->
block_index
[5]++;
752
s->
dest
[0]+= 2*block_size;
753
s->
dest
[1]+= block_size;
754
s->
dest
[2]+= block_size;
755
}
756
757
static
inline
int
get_bits_diff
(
MpegEncContext
*s){
758
const
int
bits
=
put_bits_count
(&s->
pb
);
759
const
int
last= s->
last_bits
;
760
761
s->
last_bits
=
bits
;
762
763
return
bits - last;
764
}
765
766
static
inline
int
ff_h263_round_chroma
(
int
x){
767
static
const
uint8_t h263_chroma_roundtab[16] = {
768
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
769
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
770
};
771
return
h263_chroma_roundtab[x & 0xf] + (x >> 3);
772
}
773
774
/* motion_est.c */
775
void
ff_estimate_p_frame_motion
(
MpegEncContext
* s,
776
int
mb_x
,
int
mb_y
);
777
void
ff_estimate_b_frame_motion
(
MpegEncContext
* s,
778
int
mb_x
,
int
mb_y
);
779
int
ff_get_best_fcode
(
MpegEncContext
* s, int16_t (*mv_table)[2],
int
type);
780
void
ff_fix_long_p_mvs
(
MpegEncContext
* s);
781
void
ff_fix_long_mvs
(
MpegEncContext
* s, uint8_t *field_select_table,
int
field_select
,
782
int16_t (*mv_table)[2],
int
f_code
,
int
type,
int
truncate);
783
int
ff_init_me
(
MpegEncContext
*s);
784
int
ff_pre_estimate_p_frame_motion
(
MpegEncContext
* s,
int
mb_x
,
int
mb_y
);
785
int
ff_epzs_motion_search
(
MpegEncContext
* s,
int
*mx_ptr,
int
*my_ptr,
786
int
P[10][2],
int
src_index,
int
ref_index, int16_t (*
last_mv
)[2],
787
int
ref_mv_scale,
int
size
,
int
h);
788
int
ff_get_mb_score
(
MpegEncContext
* s,
int
mx,
int
my,
int
src_index,
789
int
ref_index,
int
size
,
int
h,
int
add_rate);
790
791
/* mpeg12.c */
792
extern
const
uint8_t
ff_mpeg1_dc_scale_table
[128];
793
extern
const
uint8_t *
const
ff_mpeg2_dc_scale_table
[4];
794
795
void
mpeg1_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
796
void
mpeg1_encode_mb
(
MpegEncContext
*s,
797
DCTELEM
block
[6][64],
798
int
motion_x,
int
motion_y);
799
void
ff_mpeg1_encode_init
(
MpegEncContext
*s);
800
void
ff_mpeg1_encode_slice_header
(
MpegEncContext
*s);
801
void
ff_mpeg1_clean_buffers
(
MpegEncContext
*s);
802
int
ff_mpeg1_find_frame_end
(
ParseContext
*pc,
const
uint8_t *buf,
int
buf_size,
AVCodecParserContext
*s);
803
804
extern
const
uint8_t
ff_aic_dc_scale_table
[32];
805
extern
const
uint8_t
ff_h263_chroma_qscale_table
[32];
806
extern
const
uint8_t
ff_h263_loop_filter_strength
[32];
807
808
/* h261.c */
809
void
ff_h261_loop_filter
(
MpegEncContext
*s);
810
void
ff_h261_reorder_mb_index
(
MpegEncContext
* s);
811
void
ff_h261_encode_mb
(
MpegEncContext
*s,
812
DCTELEM
block
[6][64],
813
int
motion_x,
int
motion_y);
814
void
ff_h261_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
815
void
ff_h261_encode_init
(
MpegEncContext
*s);
816
int
ff_h261_get_picture_format
(
int
width
,
int
height
);
817
818
819
/* rv10.c */
820
void
rv10_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
821
int
rv_decode_dc
(
MpegEncContext
*s,
int
n);
822
void
rv20_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
823
824
825
/* msmpeg4.c */
826
void
msmpeg4_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
827
void
msmpeg4_encode_ext_header
(
MpegEncContext
* s);
828
void
msmpeg4_encode_mb
(
MpegEncContext
* s,
829
DCTELEM
block
[6][64],
830
int
motion_x,
int
motion_y);
831
int
msmpeg4_decode_picture_header
(
MpegEncContext
* s);
832
int
msmpeg4_decode_ext_header
(
MpegEncContext
* s,
int
buf_size);
833
int
ff_msmpeg4_decode_init
(
AVCodecContext
*
avctx
);
834
void
ff_msmpeg4_encode_init
(
MpegEncContext
*s);
835
int
ff_wmv2_decode_picture_header
(
MpegEncContext
* s);
836
int
ff_wmv2_decode_secondary_picture_header
(
MpegEncContext
* s);
837
void
ff_wmv2_add_mb
(
MpegEncContext
*s,
DCTELEM
block
[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr);
838
void
ff_mspel_motion
(
MpegEncContext
*s,
839
uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr,
840
uint8_t **ref_picture,
op_pixels_func
(*pix_op)[4],
841
int
motion_x,
int
motion_y,
int
h);
842
int
ff_wmv2_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
843
void
ff_wmv2_encode_mb
(
MpegEncContext
* s,
844
DCTELEM
block
[6][64],
845
int
motion_x,
int
motion_y);
846
847
#endif
/* AVCODEC_MPEGVIDEO_H */