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
#include "
videodsp.h
"
40
41
#include "
libavutil/opt.h
"
42
43
#define FRAME_SKIPPED 100
44
45
enum
OutputFormat
{
46
FMT_MPEG1
,
47
FMT_H261
,
48
FMT_H263
,
49
FMT_MJPEG
,
50
FMT_H264
,
51
};
52
53
#define MPEG_BUF_SIZE (16 * 1024)
54
55
#define QMAT_SHIFT_MMX 16
56
#define QMAT_SHIFT 22
57
58
#define MAX_FCODE 7
59
#define MAX_MV 2048
60
61
#define MAX_THREADS 16
62
63
#define MAX_PICTURE_COUNT 32
64
65
#define ME_MAP_SIZE 64
66
#define ME_MAP_SHIFT 3
67
#define ME_MAP_MV_BITS 11
68
69
#define MAX_MB_BYTES (30*16*16*3/8 + 120)
70
71
#define INPLACE_OFFSET 16
72
73
/* Start codes. */
74
#define SEQ_END_CODE 0x000001b7
75
#define SEQ_START_CODE 0x000001b3
76
#define GOP_START_CODE 0x000001b8
77
#define PICTURE_START_CODE 0x00000100
78
#define SLICE_MIN_START_CODE 0x00000101
79
#define SLICE_MAX_START_CODE 0x000001af
80
#define EXT_START_CODE 0x000001b5
81
#define USER_START_CODE 0x000001b2
82
87
#define DELAYED_PIC_REF 4
88
89
struct
MpegEncContext
;
90
94
typedef
struct
Picture
{
95
struct
AVFrame
f
;
96
100
uint8_t
*
interpolated
[3];
101
int8_t *
qscale_table_base
;
102
int16_t (*
motion_val_base
[2])[2];
103
uint32_t *
mb_type_base
;
104
#define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if there is just one type
105
#define IS_INTRA4x4(a) ((a)&MB_TYPE_INTRA4x4)
106
#define IS_INTRA16x16(a) ((a)&MB_TYPE_INTRA16x16)
107
#define IS_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
108
#define IS_INTRA(a) ((a)&7)
109
#define IS_INTER(a) ((a)&(MB_TYPE_16x16|MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8))
110
#define IS_SKIP(a) ((a)&MB_TYPE_SKIP)
111
#define IS_INTRA_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
112
#define IS_INTERLACED(a) ((a)&MB_TYPE_INTERLACED)
113
#define IS_DIRECT(a) ((a)&MB_TYPE_DIRECT2)
114
#define IS_GMC(a) ((a)&MB_TYPE_GMC)
115
#define IS_16X16(a) ((a)&MB_TYPE_16x16)
116
#define IS_16X8(a) ((a)&MB_TYPE_16x8)
117
#define IS_8X16(a) ((a)&MB_TYPE_8x16)
118
#define IS_8X8(a) ((a)&MB_TYPE_8x8)
119
#define IS_SUB_8X8(a) ((a)&MB_TYPE_16x16) //note reused
120
#define IS_SUB_8X4(a) ((a)&MB_TYPE_16x8) //note reused
121
#define IS_SUB_4X8(a) ((a)&MB_TYPE_8x16) //note reused
122
#define IS_SUB_4X4(a) ((a)&MB_TYPE_8x8) //note reused
123
#define IS_ACPRED(a) ((a)&MB_TYPE_ACPRED)
124
#define IS_QUANT(a) ((a)&MB_TYPE_QUANT)
125
#define IS_DIR(a, part, list) ((a) & (MB_TYPE_P0L0<<((part)+2*(list))))
126
#define USES_LIST(a, list) ((a) & ((MB_TYPE_P0L0|MB_TYPE_P1L0)<<(2*(list))))
127
#define HAS_CBP(a) ((a)&MB_TYPE_CBP)
128
129
int
field_poc
[2];
130
int
poc
;
131
int
frame_num
;
132
int
mmco_reset
;
133
int
pic_id
;
135
int
long_ref
;
136
int
ref_poc
[2][2][32];
137
int
ref_count
[2][2];
138
int
mbaff
;
139
int
field_picture
;
140
141
int
mb_var_sum
;
142
int
mc_mb_var_sum
;
143
uint16_t *
mb_var
;
144
uint16_t *
mc_mb_var
;
145
uint8_t
*
mb_mean
;
146
int32_t
*
mb_cmp_score
;
147
int
b_frame_score
;
/* */
148
struct
MpegEncContext
*
owner2
;
149
int
needs_realloc
;
150
}
Picture
;
151
155
typedef
struct
MotionEstContext
{
156
AVCodecContext
*
avctx
;
157
int
skip
;
158
int
co_located_mv
[4][2];
159
int
direct_basis_mv
[4][2];
160
uint8_t
*
scratchpad
;
161
uint8_t
*
best_mb
;
162
uint8_t
*
temp_mb
[2];
163
uint8_t
*
temp
;
164
int
best_bits
;
165
uint32_t *
map
;
166
uint32_t *
score_map
;
167
unsigned
map_generation
;
168
int
pre_penalty_factor
;
169
int
penalty_factor
;
174
int
sub_penalty_factor
;
175
int
mb_penalty_factor
;
176
int
flags
;
177
int
sub_flags
;
178
int
mb_flags
;
179
int
pre_pass
;
180
int
dia_size
;
181
int
xmin
;
182
int
xmax
;
183
int
ymin
;
184
int
ymax
;
185
int
pred_x
;
186
int
pred_y
;
187
uint8_t
*
src
[4][4];
188
uint8_t
*
ref
[4][4];
189
int
stride
;
190
int
uvstride
;
191
/* temp variables for picture complexity calculation */
192
int
mc_mb_var_sum_temp
;
193
int
mb_var_sum_temp
;
194
int
scene_change_score
;
195
/* cmp, chroma_cmp;*/
196
op_pixels_func
(*
hpel_put
)[4];
197
op_pixels_func
(*
hpel_avg
)[4];
198
qpel_mc_func
(*
qpel_put
)[16];
199
qpel_mc_func
(*
qpel_avg
)[16];
200
uint8_t
(*
mv_penalty
)[
MAX_MV
*2+1];
201
uint8_t
*
current_mv_penalty
;
202
int (*
sub_motion_search
)(
struct
MpegEncContext
* s,
203
int
*mx_ptr,
int
*my_ptr,
int
dmin,
204
int
src_index,
int
ref_index,
205
int
size
,
int
h);
206
}
MotionEstContext
;
207
211
typedef
struct
MpegEncContext
{
212
AVClass
*
class
;
213
struct
AVCodecContext
*
avctx
;
214
/* the following parameters must be initialized before encoding */
215
int
width
,
height
;
216
int
gop_size
;
217
int
intra_only
;
218
int
bit_rate
;
219
enum
OutputFormat
out_format
;
220
int
h263_pred
;
221
int
pb_frame
;
222
223
/* the following codec id fields are deprecated in favor of codec_id */
224
int
h263_plus
;
225
int
h263_flv
;
226
227
enum
AVCodecID
codec_id
;
/* see AV_CODEC_ID_xxx */
228
int
fixed_qscale
;
229
int
encoding
;
230
int
flags
;
231
int
flags2
;
232
int
max_b_frames
;
233
int
luma_elim_threshold
;
234
int
chroma_elim_threshold
;
235
int
strict_std_compliance
;
236
int
workaround_bugs
;
237
int
codec_tag
;
238
int
stream_codec_tag
;
239
/* the following fields are managed internally by the encoder */
240
241
/* sequence parameters */
242
int
context_initialized
;
243
int
input_picture_number
;
244
int
coded_picture_number
;
245
int
picture_number
;
//FIXME remove, unclear definition
246
int
picture_in_gop_number
;
247
int
mb_width
,
mb_height
;
248
int
mb_stride
;
249
int
b8_stride
;
250
int
b4_stride
;
251
int
h_edge_pos
,
v_edge_pos
;
252
int
mb_num
;
253
int
linesize
;
254
int
uvlinesize
;
255
Picture
*
picture
;
256
Picture
**
input_picture
;
257
Picture
**
reordered_input_picture
;
258
259
int
y_dc_scale
,
c_dc_scale
;
260
int
ac_pred
;
261
int
block_last_index
[12];
262
int
h263_aic
;
263
264
/* scantables */
265
ScanTable
inter_scantable
;
266
ScanTable
intra_scantable
;
267
ScanTable
intra_h_scantable
;
268
ScanTable
intra_v_scantable
;
269
270
/* WARNING: changes above this line require updates to hardcoded
271
* offsets used in asm. */
272
273
int64_t
user_specified_pts
;
274
277
int64_t
dts_delta
;
281
int64_t
reordered_pts
;
282
284
PutBitContext
pb
;
285
286
int
start_mb_y
;
287
int
end_mb_y
;
288
struct
MpegEncContext
*
thread_context
[
MAX_THREADS
];
289
int
slice_context_count
;
290
295
Picture
last_picture
;
296
301
Picture
next_picture
;
302
307
Picture
new_picture
;
308
313
Picture
current_picture
;
314
315
Picture
*
last_picture_ptr
;
316
Picture
*
next_picture_ptr
;
317
Picture
*
current_picture_ptr
;
318
int
picture_count
;
319
int
picture_range_start
,
picture_range_end
;
320
uint8_t
*
visualization_buffer
[3];
321
int
last_dc
[3];
322
int16_t *
dc_val_base
;
323
int16_t *
dc_val
[3];
324
const
uint8_t
*
y_dc_scale_table
;
325
const
uint8_t
*
c_dc_scale_table
;
326
const
uint8_t
*
chroma_qscale_table
;
327
uint8_t
*
coded_block_base
;
328
uint8_t
*
coded_block
;
329
int16_t (*
ac_val_base
)[16];
330
int16_t (*
ac_val
[3])[16];
331
int
mb_skipped
;
332
uint8_t
*
mbskip_table
;
334
uint8_t
*
mbintra_table
;
335
uint8_t
*
cbp_table
;
336
uint8_t
*
pred_dir_table
;
337
uint8_t
*
edge_emu_buffer
;
338
uint8_t
*
rd_scratchpad
;
339
uint8_t
*
obmc_scratchpad
;
340
uint8_t
*
b_scratchpad
;
341
342
int
qscale
;
343
int
chroma_qscale
;
344
unsigned
int
lambda
;
345
unsigned
int
lambda2
;
346
int
*
lambda_table
;
347
int
adaptive_quant
;
348
int
dquant
;
349
int
pict_type
;
350
int
last_pict_type
;
//FIXME removes
351
int
last_non_b_pict_type
;
352
int
droppable
;
353
int
frame_rate_index
;
354
int
last_lambda_for
[5];
355
int
skipdct
;
356
357
/* motion compensation */
358
int
unrestricted_mv
;
359
int
h263_long_vectors
;
360
361
DSPContext
dsp
;
362
VideoDSPContext
vdsp
;
363
int
f_code
;
364
int
b_code
;
365
int16_t (*
p_mv_table_base
)[2];
366
int16_t (*
b_forw_mv_table_base
)[2];
367
int16_t (*
b_back_mv_table_base
)[2];
368
int16_t (*
b_bidir_forw_mv_table_base
)[2];
369
int16_t (*
b_bidir_back_mv_table_base
)[2];
370
int16_t (*
b_direct_mv_table_base
)[2];
371
int16_t (*
p_field_mv_table_base
[2][2])[2];
372
int16_t (*
b_field_mv_table_base
[2][2][2])[2];
373
int16_t (*
p_mv_table
)[2];
374
int16_t (*
b_forw_mv_table
)[2];
375
int16_t (*
b_back_mv_table
)[2];
376
int16_t (*
b_bidir_forw_mv_table
)[2];
377
int16_t (*
b_bidir_back_mv_table
)[2];
378
int16_t (*
b_direct_mv_table
)[2];
379
int16_t (*
p_field_mv_table
[2][2])[2];
380
int16_t (*
b_field_mv_table
[2][2][2])[2];
381
uint8_t
(*
p_field_select_table
[2]);
382
uint8_t
(*
b_field_select_table
[2][2]);
383
int
me_method
;
384
int
mv_dir
;
385
#define MV_DIR_FORWARD 1
386
#define MV_DIR_BACKWARD 2
387
#define MV_DIRECT 4
388
int mv_type;
389
#define MV_TYPE_16X16 0
390
#define MV_TYPE_8X8 1
391
#define MV_TYPE_16X8 2
392
#define MV_TYPE_FIELD 3
393
#define MV_TYPE_DMV 4
394
399
int mv[2][4][2];
400
int
field_select
[2][2];
401
int
last_mv
[2][2][2];
402
uint8_t
*
fcode_tab
;
403
int16_t
direct_scale_mv
[2][64];
404
405
MotionEstContext
me
;
406
407
int
no_rounding
;
410
/* macroblock layer */
411
int
mb_x
,
mb_y
;
412
int
mb_skip_run
;
413
int
mb_intra
;
414
uint16_t *
mb_type
;
415
#define CANDIDATE_MB_TYPE_INTRA 0x01
416
#define CANDIDATE_MB_TYPE_INTER 0x02
417
#define CANDIDATE_MB_TYPE_INTER4V 0x04
418
#define CANDIDATE_MB_TYPE_SKIPPED 0x08
419
//#define MB_TYPE_GMC 0x10
420
421
#define CANDIDATE_MB_TYPE_DIRECT 0x10
422
#define CANDIDATE_MB_TYPE_FORWARD 0x20
423
#define CANDIDATE_MB_TYPE_BACKWARD 0x40
424
#define CANDIDATE_MB_TYPE_BIDIR 0x80
425
426
#define CANDIDATE_MB_TYPE_INTER_I 0x100
427
#define CANDIDATE_MB_TYPE_FORWARD_I 0x200
428
#define CANDIDATE_MB_TYPE_BACKWARD_I 0x400
429
#define CANDIDATE_MB_TYPE_BIDIR_I 0x800
430
431
#define CANDIDATE_MB_TYPE_DIRECT0 0x1000
432
433
int
block_index
[6];
434
int
block_wrap
[6];
435
uint8_t
*
dest
[3];
436
437
int
*
mb_index2xy
;
438
440
uint16_t
intra_matrix
[64];
441
uint16_t
chroma_intra_matrix
[64];
442
uint16_t
inter_matrix
[64];
443
uint16_t
chroma_inter_matrix
[64];
444
#define QUANT_BIAS_SHIFT 8
445
int
intra_quant_bias
;
446
int
inter_quant_bias
;
447
int
min_qcoeff
;
448
int
max_qcoeff
;
449
int
ac_esc_length
;
450
uint8_t
*
intra_ac_vlc_length
;
451
uint8_t
*
intra_ac_vlc_last_length
;
452
uint8_t
*
inter_ac_vlc_length
;
453
uint8_t
*
inter_ac_vlc_last_length
;
454
uint8_t
*
luma_dc_vlc_length
;
455
#define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
456
457
int
coded_score
[8];
458
460
int (*
q_intra_matrix
)[64];
461
int (*
q_inter_matrix
)[64];
463
uint16_t (*
q_intra_matrix16
)[2][64];
464
uint16_t (*
q_inter_matrix16
)[2][64];
465
466
/* noise reduction */
467
int (*
dct_error_sum
)[64];
468
int
dct_count
[2];
469
uint16_t (*
dct_offset
)[64];
470
471
void
*
opaque
;
472
473
/* bit rate control */
474
int64_t
total_bits
;
475
int
frame_bits
;
476
int
next_lambda
;
477
RateControlContext
rc_context
;
478
479
/* statistics, used for 2-pass encoding */
480
int
mv_bits
;
481
int
header_bits
;
482
int
i_tex_bits
;
483
int
p_tex_bits
;
484
int
i_count
;
485
int
f_count
;
486
int
b_count
;
487
int
skip_count
;
488
int
misc_bits
;
489
int
last_bits
;
490
491
/* error concealment / resync */
492
int
error_count
,
error_occurred
;
493
uint8_t
*
error_status_table
;
494
#define VP_START 1
495
#define ER_AC_ERROR 2
496
#define ER_DC_ERROR 4
497
#define ER_MV_ERROR 8
498
#define ER_AC_END 16
499
#define ER_DC_END 32
500
#define ER_MV_END 64
501
502
#define ER_MB_ERROR (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)
503
#define ER_MB_END (ER_AC_END|ER_DC_END|ER_MV_END)
504
505
int
resync_mb_x
;
506
int
resync_mb_y
;
507
GetBitContext
last_resync_gb
;
508
int
mb_num_left
;
509
int
next_p_frame_damaged
;
510
int
err_recognition
;
511
512
ParseContext
parse_context
;
513
514
/* H.263 specific */
515
int
gob_index
;
516
int
obmc
;
517
int
showed_packed_warning
;
518
int
mb_info
;
519
int
prev_mb_info
,
last_mb_info
;
520
uint8_t
*
mb_info_ptr
;
521
int
mb_info_size
;
522
523
/* H.263+ specific */
524
int
umvplus
;
525
int
h263_aic_dir
;
526
int
h263_slice_structured
;
527
int
alt_inter_vlc
;
528
int
modified_quant
;
529
int
loop_filter
;
530
int
custom_pcf
;
531
532
/* mpeg4 specific */
533
int
time_increment_bits
;
534
int
last_time_base
;
535
int
time_base
;
536
int64_t
time
;
537
int64_t
last_non_b_time
;
538
uint16_t
pp_time
;
539
uint16_t
pb_time
;
540
uint16_t
pp_field_time
;
541
uint16_t
pb_field_time
;
542
int
shape
;
543
int
vol_sprite_usage
;
544
int
sprite_width
;
545
int
sprite_height
;
546
int
sprite_left
;
547
int
sprite_top
;
548
int
sprite_brightness_change
;
549
int
num_sprite_warping_points
;
550
int
real_sprite_warping_points
;
551
uint16_t
sprite_traj
[4][2];
552
int
sprite_offset
[2][2];
553
int
sprite_delta
[2][2];
554
int
sprite_shift
[2];
555
int
mcsel
;
556
int
quant_precision
;
557
int
quarter_sample
;
558
int
scalability
;
559
int
hierachy_type
;
560
int
enhancement_type
;
561
int
new_pred
;
562
int
reduced_res_vop
;
563
int
aspect_ratio_info
;
//FIXME remove
564
int
sprite_warping_accuracy
;
565
int
low_latency_sprite
;
566
int
data_partitioning
;
567
int
partitioned_frame
;
568
int
rvlc
;
569
int
resync_marker
;
570
int
low_delay
;
571
int
vo_type
;
572
int
vol_control_parameters
;
573
int
intra_dc_threshold
;
574
int
use_intra_dc_vlc
;
575
PutBitContext
tex_pb
;
576
PutBitContext
pb2
;
577
int
mpeg_quant
;
578
int
t_frame
;
579
int
padding_bug_score
;
580
int
cplx_estimation_trash_i
;
581
int
cplx_estimation_trash_p
;
582
int
cplx_estimation_trash_b
;
583
584
/* divx specific, used to workaround (many) bugs in divx5 */
585
int
divx_version
;
586
int
divx_build
;
587
int
divx_packed
;
588
uint8_t
*
bitstream_buffer
;
//Divx 5.01 puts several frames in a single one, this is used to reorder them
589
int
bitstream_buffer_size
;
590
unsigned
int
allocated_bitstream_buffer_size
;
591
592
int
xvid_build
;
593
594
/* lavc specific stuff, used to workaround bugs in libavcodec */
595
int
lavc_build
;
596
597
/* RV10 specific */
598
int
rv10_version
;
599
int
rv10_first_dc_coded
[3];
600
int
orig_width
,
orig_height
;
601
602
/* MJPEG specific */
603
struct
MJpegContext
*
mjpeg_ctx
;
604
int
mjpeg_vsample
[3];
605
int
mjpeg_hsample
[3];
606
607
/* MSMPEG4 specific */
608
int
mv_table_index
;
609
int
rl_table_index
;
610
int
rl_chroma_table_index
;
611
int
dc_table_index
;
612
int
use_skip_mb_code
;
613
int
slice_height
;
614
int
first_slice_line
;
615
int
flipflop_rounding
;
616
int
msmpeg4_version
;
617
int
per_mb_rl_table
;
618
int
esc3_level_length
;
619
int
esc3_run_length
;
621
int (*
ac_stats
)[2][
MAX_LEVEL
+1][
MAX_RUN
+1][2];
622
int
inter_intra_pred
;
623
int
mspel
;
624
625
/* decompression specific */
626
GetBitContext
gb
;
627
628
/* Mpeg1 specific */
629
int
gop_picture_number
;
630
int
last_mv_dir
;
631
int
broken_link
;
632
uint8_t
*
vbv_delay_ptr
;
633
634
/* MPEG-2-specific - I wished not to have to support this mess. */
635
int
progressive_sequence
;
636
int
mpeg_f_code
[2][2];
637
int
picture_structure
;
638
/* picture type */
639
#define PICT_TOP_FIELD 1
640
#define PICT_BOTTOM_FIELD 2
641
#define PICT_FRAME 3
642
643
int
intra_dc_precision
;
644
int
frame_pred_frame_dct
;
645
int
top_field_first
;
646
int
concealment_motion_vectors
;
647
int
q_scale_type
;
648
int
intra_vlc_format
;
649
int
alternate_scan
;
650
int
repeat_first_field
;
651
int
chroma_420_type
;
652
int
chroma_format
;
653
#define CHROMA_420 1
654
#define CHROMA_422 2
655
#define CHROMA_444 3
656
int
chroma_x_shift
;
//depend on pix_format, that depend on chroma_format
657
int
chroma_y_shift
;
658
659
int
progressive_frame
;
660
int
full_pel
[2];
661
int
interlaced_dct
;
662
int
first_slice
;
663
int
first_field
;
664
int
drop_frame_timecode
;
665
int
scan_offset
;
666
667
/* RTP specific */
668
int
rtp_mode
;
669
670
uint8_t
*
ptr_lastgob
;
671
int
swap_uv
;
//vcr2 codec is an MPEG-2 variant with U and V swapped
672
DCTELEM
(*
pblocks
[12])[64];
673
674
DCTELEM
(*
block
)[64];
675
DCTELEM
(*
blocks
)[8][64];
// for HQ mode we need to keep the best block
676
int (*
decode_mb
)(
struct
MpegEncContext
*s,
DCTELEM
block
[6][64]);
// used by some codecs to avoid a switch()
677
#define SLICE_OK 0
678
#define SLICE_ERROR -1
679
#define SLICE_END -2
680
#define SLICE_NOEND -3
681
682
void
(*
dct_unquantize_mpeg1_intra
)(
struct
MpegEncContext
*s,
683
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
684
void
(*
dct_unquantize_mpeg1_inter
)(
struct
MpegEncContext
*s,
685
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
686
void
(*
dct_unquantize_mpeg2_intra
)(
struct
MpegEncContext
*s,
687
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
688
void
(*
dct_unquantize_mpeg2_inter
)(
struct
MpegEncContext
*s,
689
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
690
void
(*
dct_unquantize_h263_intra
)(
struct
MpegEncContext
*s,
691
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
692
void
(*
dct_unquantize_h263_inter
)(
struct
MpegEncContext
*s,
693
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
694
void
(*
dct_unquantize_h261_intra
)(
struct
MpegEncContext
*s,
695
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
696
void
(*
dct_unquantize_h261_inter
)(
struct
MpegEncContext
*s,
697
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
698
void
(*
dct_unquantize_intra
)(
struct
MpegEncContext
*s,
// unquantizer to use (mpeg4 can use both)
699
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
700
void
(*
dct_unquantize_inter
)(
struct
MpegEncContext
*s,
// unquantizer to use (mpeg4 can use both)
701
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
);
702
int (*
dct_quantize
)(
struct
MpegEncContext
*s,
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
,
int
*overflow);
703
int (*
fast_dct_quantize
)(
struct
MpegEncContext
*s,
DCTELEM
*
block
/*align 16*/
,
int
n,
int
qscale
,
int
*overflow);
704
void
(*
denoise_dct
)(
struct
MpegEncContext
*s,
DCTELEM
*
block
);
705
706
int
mpv_flags
;
707
int
quantizer_noise_shaping
;
708
709
/* error resilience stuff */
710
uint8_t
*
er_temp_buffer
;
711
712
/* temp buffers for rate control */
713
float
*
cplx_tab
, *
bits_tab
;
714
715
/* flag to indicate a reinitialization is required, e.g. after
716
* a frame size change */
717
int
context_reinit
;
718
}
MpegEncContext
;
719
720
#define REBASE_PICTURE(pic, new_ctx, old_ctx) (pic ? \
721
(pic >= old_ctx->picture && pic < old_ctx->picture+old_ctx->picture_count ?\
722
&new_ctx->picture[pic - old_ctx->picture] : (Picture*) ((uint8_t*)pic - (uint8_t*)old_ctx + (uint8_t*)new_ctx))\
723
: NULL)
724
725
/* mpegvideo_enc common options */
726
#define FF_MPV_FLAG_SKIP_RD 0x0001
727
#define FF_MPV_FLAG_STRICT_GOP 0x0002
728
#define FF_MPV_FLAG_QP_RD 0x0004
729
#define FF_MPV_FLAG_CBP_RD 0x0008
730
731
#define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x)
732
#define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
733
#define FF_MPV_COMMON_OPTS \
734
{ "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" },\
735
{ "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" },\
736
{ "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" },\
737
{ "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" },\
738
{ "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" },\
739
{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\
740
FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
741
{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\
742
FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
743
{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },
744
745
extern
const
AVOption
ff_mpv_generic_options
[];
746
747
#define FF_MPV_GENERIC_CLASS(name) \
748
static const AVClass name ## _class = {\
749
.class_name = #name " encoder",\
750
.item_name = av_default_item_name,\
751
.option = ff_mpv_generic_options,\
752
.version = LIBAVUTIL_VERSION_INT,\
753
};
754
760
void
ff_MPV_common_defaults
(
MpegEncContext
*s);
761
762
void
ff_MPV_decode_defaults
(
MpegEncContext
*s);
763
int
ff_MPV_common_init
(
MpegEncContext
*s);
764
int
ff_mpv_frame_size_alloc
(
MpegEncContext
*s,
int
linesize
);
765
int
ff_MPV_common_frame_size_change
(
MpegEncContext
*s);
766
void
ff_MPV_common_end
(
MpegEncContext
*s);
767
void
ff_MPV_decode_mb
(
MpegEncContext
*s,
DCTELEM
block
[12][64]);
768
int
ff_MPV_frame_start
(
MpegEncContext
*s,
AVCodecContext
*
avctx
);
769
void
ff_MPV_frame_end
(
MpegEncContext
*s);
770
int
ff_MPV_encode_init
(
AVCodecContext
*
avctx
);
771
int
ff_MPV_encode_end
(
AVCodecContext
*
avctx
);
772
int
ff_MPV_encode_picture
(
AVCodecContext
*
avctx
,
AVPacket
*pkt,
773
const
AVFrame
*frame,
int
*got_packet);
774
void
ff_MPV_encode_init_x86
(
MpegEncContext
*s);
775
void
ff_MPV_common_init_x86
(
MpegEncContext
*s);
776
void
ff_MPV_common_init_axp
(
MpegEncContext
*s);
777
void
ff_MPV_common_init_arm
(
MpegEncContext
*s);
778
void
ff_MPV_common_init_altivec
(
MpegEncContext
*s);
779
void
ff_MPV_common_init_bfin
(
MpegEncContext
*s);
780
void
ff_clean_intra_table_entries
(
MpegEncContext
*s);
781
void
ff_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,
DCTELEM
*
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_er_frame_start
(
MpegEncContext
*s);
796
void
ff_er_frame_end
(
MpegEncContext
*s);
797
void
ff_er_add_slice
(
MpegEncContext
*s,
int
startx,
int
starty,
int
endx,
int
endy,
int
status);
798
799
int
ff_dct_common_init
(
MpegEncContext
*s);
800
void
ff_convert_matrix
(
DSPContext
*
dsp
,
int
(*qmat)[64], uint16_t (*qmat16)[2][64],
801
const
uint16_t *quant_matrix,
int
bias,
int
qmin,
int
qmax,
int
intra);
802
int
ff_dct_quantize_c
(
MpegEncContext
*s,
DCTELEM
*
block
,
int
n,
int
qscale
,
int
*overflow);
803
804
void
ff_init_block_index
(
MpegEncContext
*s);
805
void
ff_copy_picture
(
Picture
*dst,
Picture
*src);
806
807
void
ff_MPV_motion
(
MpegEncContext
*s,
808
uint8_t
*dest_y,
uint8_t
*dest_cb,
809
uint8_t
*dest_cr,
int
dir,
810
uint8_t
**ref_picture,
811
op_pixels_func
(*pix_op)[4],
812
qpel_mc_func
(*qpix_op)[16]);
813
818
int
ff_alloc_picture
(
MpegEncContext
*s,
Picture
*pic,
int
shared);
819
820
extern
const
enum
AVPixelFormat
ff_pixfmt_list_420
[];
821
extern
const
enum
AVPixelFormat
ff_hwaccel_pixfmt_list_420
[];
822
823
static
inline
void
ff_update_block_index
(
MpegEncContext
*s){
824
const
int
block_size = 8;
825
826
s->
block_index
[0]+=2;
827
s->
block_index
[1]+=2;
828
s->
block_index
[2]+=2;
829
s->
block_index
[3]+=2;
830
s->
block_index
[4]++;
831
s->
block_index
[5]++;
832
s->
dest
[0]+= 2*block_size;
833
s->
dest
[1]+= block_size;
834
s->
dest
[2]+= block_size;
835
}
836
837
static
inline
int
get_bits_diff
(
MpegEncContext
*s){
838
const
int
bits
=
put_bits_count
(&s->
pb
);
839
const
int
last= s->
last_bits
;
840
841
s->
last_bits
=
bits
;
842
843
return
bits - last;
844
}
845
846
static
inline
int
ff_h263_round_chroma
(
int
x){
847
static
const
uint8_t
h263_chroma_roundtab[16] = {
848
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
849
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
850
};
851
return
h263_chroma_roundtab[x & 0xf] + (x >> 3);
852
}
853
854
/* motion_est.c */
855
void
ff_estimate_p_frame_motion
(
MpegEncContext
* s,
856
int
mb_x
,
int
mb_y
);
857
void
ff_estimate_b_frame_motion
(
MpegEncContext
* s,
858
int
mb_x
,
int
mb_y
);
859
int
ff_get_best_fcode
(
MpegEncContext
* s, int16_t (*mv_table)[2],
int
type);
860
void
ff_fix_long_p_mvs
(
MpegEncContext
* s);
861
void
ff_fix_long_mvs
(
MpegEncContext
* s,
uint8_t
*field_select_table,
int
field_select
,
862
int16_t (*mv_table)[2],
int
f_code
,
int
type,
int
truncate);
863
int
ff_init_me
(
MpegEncContext
*s);
864
int
ff_pre_estimate_p_frame_motion
(
MpegEncContext
* s,
int
mb_x
,
int
mb_y
);
865
int
ff_epzs_motion_search
(
MpegEncContext
* s,
int
*mx_ptr,
int
*my_ptr,
866
int
P[10][2],
int
src_index,
int
ref_index, int16_t (*
last_mv
)[2],
867
int
ref_mv_scale,
int
size
,
int
h);
868
int
ff_get_mb_score
(
MpegEncContext
* s,
int
mx,
int
my,
int
src_index,
869
int
ref_index,
int
size
,
int
h,
int
add_rate);
870
871
/* mpeg12.c */
872
extern
const
uint8_t
ff_mpeg1_dc_scale_table
[128];
873
extern
const
uint8_t
*
const
ff_mpeg2_dc_scale_table
[4];
874
875
void
ff_mpeg1_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
876
void
ff_mpeg1_encode_mb
(
MpegEncContext
*s,
877
DCTELEM
block
[6][64],
878
int
motion_x,
int
motion_y);
879
void
ff_mpeg1_encode_init
(
MpegEncContext
*s);
880
void
ff_mpeg1_encode_slice_header
(
MpegEncContext
*s);
881
void
ff_mpeg1_clean_buffers
(
MpegEncContext
*s);
882
int
ff_mpeg1_find_frame_end
(
ParseContext
*pc,
const
uint8_t
*buf,
int
buf_size,
AVCodecParserContext
*s);
883
884
extern
const
uint8_t
ff_aic_dc_scale_table
[32];
885
extern
const
uint8_t
ff_h263_chroma_qscale_table
[32];
886
extern
const
uint8_t
ff_h263_loop_filter_strength
[32];
887
888
/* h261.c */
889
void
ff_h261_loop_filter
(
MpegEncContext
*s);
890
void
ff_h261_reorder_mb_index
(
MpegEncContext
* s);
891
void
ff_h261_encode_mb
(
MpegEncContext
*s,
892
DCTELEM
block
[6][64],
893
int
motion_x,
int
motion_y);
894
void
ff_h261_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
895
void
ff_h261_encode_init
(
MpegEncContext
*s);
896
int
ff_h261_get_picture_format
(
int
width
,
int
height
);
897
898
899
/* rv10.c */
900
void
ff_rv10_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
901
int
ff_rv_decode_dc
(
MpegEncContext
*s,
int
n);
902
void
ff_rv20_encode_picture_header
(
MpegEncContext
*s,
int
picture_number
);
903
904
905
/* msmpeg4.c */
906
void
ff_msmpeg4_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
907
void
ff_msmpeg4_encode_ext_header
(
MpegEncContext
* s);
908
void
ff_msmpeg4_encode_mb
(
MpegEncContext
* s,
909
DCTELEM
block
[6][64],
910
int
motion_x,
int
motion_y);
911
int
ff_msmpeg4_decode_picture_header
(
MpegEncContext
* s);
912
int
ff_msmpeg4_decode_ext_header
(
MpegEncContext
* s,
int
buf_size);
913
int
ff_msmpeg4_decode_init
(
AVCodecContext
*
avctx
);
914
void
ff_msmpeg4_encode_init
(
MpegEncContext
*s);
915
int
ff_wmv2_decode_picture_header
(
MpegEncContext
* s);
916
int
ff_wmv2_decode_secondary_picture_header
(
MpegEncContext
* s);
917
void
ff_wmv2_add_mb
(
MpegEncContext
*s,
DCTELEM
block
[6][64],
uint8_t
*dest_y,
uint8_t
*dest_cb,
uint8_t
*dest_cr);
918
void
ff_mspel_motion
(
MpegEncContext
*s,
919
uint8_t
*dest_y,
uint8_t
*dest_cb,
uint8_t
*dest_cr,
920
uint8_t
**ref_picture,
op_pixels_func
(*pix_op)[4],
921
int
motion_x,
int
motion_y,
int
h);
922
int
ff_wmv2_encode_picture_header
(
MpegEncContext
* s,
int
picture_number
);
923
void
ff_wmv2_encode_mb
(
MpegEncContext
* s,
924
DCTELEM
block
[6][64],
925
int
motion_x,
int
motion_y);
926
927
#endif
/* AVCODEC_MPEGVIDEO_H */