00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00028 #ifndef AVCODEC_MPEGVIDEO_H
00029 #define AVCODEC_MPEGVIDEO_H
00030
00031 #include "avcodec.h"
00032 #include "dsputil.h"
00033 #include "get_bits.h"
00034 #include "put_bits.h"
00035 #include "ratecontrol.h"
00036 #include "parser.h"
00037 #include "mpeg12data.h"
00038 #include "rl.h"
00039
00040 #define FRAME_SKIPPED 100 ///< return value for header parsers if frame is not coded
00041
00042 enum OutputFormat {
00043 FMT_MPEG1,
00044 FMT_H261,
00045 FMT_H263,
00046 FMT_MJPEG,
00047 FMT_H264,
00048 };
00049
00050 #define MPEG_BUF_SIZE (16 * 1024)
00051
00052 #define QMAT_SHIFT_MMX 16
00053 #define QMAT_SHIFT 22
00054
00055 #define MAX_FCODE 7
00056 #define MAX_MV 2048
00057
00058 #define MAX_THREADS 16
00059
00060 #define MAX_PICTURE_COUNT 32
00061
00062 #define ME_MAP_SIZE 64
00063 #define ME_MAP_SHIFT 3
00064 #define ME_MAP_MV_BITS 11
00065
00066 #define MAX_MB_BYTES (30*16*16*3/8 + 120)
00067
00068 #define INPLACE_OFFSET 16
00069
00070
00071 #define SEQ_END_CODE 0x000001b7
00072 #define SEQ_START_CODE 0x000001b3
00073 #define GOP_START_CODE 0x000001b8
00074 #define PICTURE_START_CODE 0x00000100
00075 #define SLICE_MIN_START_CODE 0x00000101
00076 #define SLICE_MAX_START_CODE 0x000001af
00077 #define EXT_START_CODE 0x000001b5
00078 #define USER_START_CODE 0x000001b2
00079
00080 struct MpegEncContext;
00081
00085 typedef struct Picture{
00086 struct AVFrame f;
00087
00091 uint8_t *interpolated[3];
00092 int8_t *qscale_table_base;
00093 int16_t (*motion_val_base[2])[2];
00094 uint32_t *mb_type_base;
00095 #define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if there is just one type
00096 #define IS_INTRA4x4(a) ((a)&MB_TYPE_INTRA4x4)
00097 #define IS_INTRA16x16(a) ((a)&MB_TYPE_INTRA16x16)
00098 #define IS_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
00099 #define IS_INTRA(a) ((a)&7)
00100 #define IS_INTER(a) ((a)&(MB_TYPE_16x16|MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8))
00101 #define IS_SKIP(a) ((a)&MB_TYPE_SKIP)
00102 #define IS_INTRA_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
00103 #define IS_INTERLACED(a) ((a)&MB_TYPE_INTERLACED)
00104 #define IS_DIRECT(a) ((a)&MB_TYPE_DIRECT2)
00105 #define IS_GMC(a) ((a)&MB_TYPE_GMC)
00106 #define IS_16X16(a) ((a)&MB_TYPE_16x16)
00107 #define IS_16X8(a) ((a)&MB_TYPE_16x8)
00108 #define IS_8X16(a) ((a)&MB_TYPE_8x16)
00109 #define IS_8X8(a) ((a)&MB_TYPE_8x8)
00110 #define IS_SUB_8X8(a) ((a)&MB_TYPE_16x16) //note reused
00111 #define IS_SUB_8X4(a) ((a)&MB_TYPE_16x8) //note reused
00112 #define IS_SUB_4X8(a) ((a)&MB_TYPE_8x16) //note reused
00113 #define IS_SUB_4X4(a) ((a)&MB_TYPE_8x8) //note reused
00114 #define IS_ACPRED(a) ((a)&MB_TYPE_ACPRED)
00115 #define IS_QUANT(a) ((a)&MB_TYPE_QUANT)
00116 #define IS_DIR(a, part, list) ((a) & (MB_TYPE_P0L0<<((part)+2*(list))))
00117 #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
00118 #define HAS_CBP(a) ((a)&MB_TYPE_CBP)
00119
00120 int field_poc[2];
00121 int poc;
00122 int frame_num;
00123 int mmco_reset;
00124 int pic_id;
00126 int long_ref;
00127 int ref_poc[2][2][16];
00128 int ref_count[2][2];
00129 int mbaff;
00130 int field_picture;
00131
00132 int mb_var_sum;
00133 int mc_mb_var_sum;
00134 uint16_t *mb_var;
00135 uint16_t *mc_mb_var;
00136 uint8_t *mb_mean;
00137 int32_t *mb_cmp_score;
00138 int b_frame_score;
00139 struct MpegEncContext *owner2;
00140 } Picture;
00141
00145 typedef struct MotionEstContext{
00146 AVCodecContext *avctx;
00147 int skip;
00148 int co_located_mv[4][2];
00149 int direct_basis_mv[4][2];
00150 uint8_t *scratchpad;
00151 uint8_t *best_mb;
00152 uint8_t *temp_mb[2];
00153 uint8_t *temp;
00154 int best_bits;
00155 uint32_t *map;
00156 uint32_t *score_map;
00157 unsigned map_generation;
00158 int pre_penalty_factor;
00159 int penalty_factor;
00164 int sub_penalty_factor;
00165 int mb_penalty_factor;
00166 int flags;
00167 int sub_flags;
00168 int mb_flags;
00169 int pre_pass;
00170 int dia_size;
00171 int xmin;
00172 int xmax;
00173 int ymin;
00174 int ymax;
00175 int pred_x;
00176 int pred_y;
00177 uint8_t *src[4][4];
00178 uint8_t *ref[4][4];
00179 int stride;
00180 int uvstride;
00181
00182 int mc_mb_var_sum_temp;
00183 int mb_var_sum_temp;
00184 int scene_change_score;
00185
00186 op_pixels_func (*hpel_put)[4];
00187 op_pixels_func (*hpel_avg)[4];
00188 qpel_mc_func (*qpel_put)[16];
00189 qpel_mc_func (*qpel_avg)[16];
00190 uint8_t (*mv_penalty)[MAX_MV*2+1];
00191 uint8_t *current_mv_penalty;
00192 int (*sub_motion_search)(struct MpegEncContext * s,
00193 int *mx_ptr, int *my_ptr, int dmin,
00194 int src_index, int ref_index,
00195 int size, int h);
00196 }MotionEstContext;
00197
00201 typedef struct MpegEncContext {
00202 AVClass *class;
00203 struct AVCodecContext *avctx;
00204
00205 int width, height;
00206 int gop_size;
00207 int intra_only;
00208 int bit_rate;
00209 enum OutputFormat out_format;
00210 int h263_pred;
00211 int pb_frame;
00212
00213
00214 int h263_plus;
00215 int h263_flv;
00216
00217 enum CodecID codec_id;
00218 int fixed_qscale;
00219 int encoding;
00220 int flags;
00221 int flags2;
00222 int max_b_frames;
00223 int luma_elim_threshold;
00224 int chroma_elim_threshold;
00225 int strict_std_compliance;
00226 int workaround_bugs;
00227 int codec_tag;
00228 int stream_codec_tag;
00229
00230
00231
00232 int context_initialized;
00233 int input_picture_number;
00234 int coded_picture_number;
00235 int picture_number;
00236 int picture_in_gop_number;
00237 int mb_width, mb_height;
00238 int mb_stride;
00239 int b8_stride;
00240 int b4_stride;
00241 int h_edge_pos, v_edge_pos;
00242 int mb_num;
00243 int linesize;
00244 int uvlinesize;
00245 Picture *picture;
00246 Picture **input_picture;
00247 Picture **reordered_input_picture;
00248
00249 int y_dc_scale, c_dc_scale;
00250 int ac_pred;
00251 int block_last_index[12];
00252 int h263_aic;
00253
00254
00255 ScanTable inter_scantable;
00256 ScanTable intra_scantable;
00257 ScanTable intra_h_scantable;
00258 ScanTable intra_v_scantable;
00259
00260
00261
00262
00263 int64_t user_specified_pts;
00264
00266 PutBitContext pb;
00267
00268 int start_mb_y;
00269 int end_mb_y;
00270 struct MpegEncContext *thread_context[MAX_THREADS];
00271 int slice_context_count;
00272
00277 Picture last_picture;
00278
00283 Picture next_picture;
00284
00289 Picture new_picture;
00290
00295 Picture current_picture;
00296
00297 Picture *last_picture_ptr;
00298 Picture *next_picture_ptr;
00299 Picture *current_picture_ptr;
00300 int picture_count;
00301 int picture_range_start, picture_range_end;
00302 uint8_t *visualization_buffer[3];
00303 int last_dc[3];
00304 int16_t *dc_val_base;
00305 int16_t *dc_val[3];
00306 const uint8_t *y_dc_scale_table;
00307 const uint8_t *c_dc_scale_table;
00308 const uint8_t *chroma_qscale_table;
00309 uint8_t *coded_block_base;
00310 uint8_t *coded_block;
00311 int16_t (*ac_val_base)[16];
00312 int16_t (*ac_val[3])[16];
00313 int mb_skipped;
00314 uint8_t *mbskip_table;
00316 uint8_t *mbintra_table;
00317 uint8_t *cbp_table;
00318 uint8_t *pred_dir_table;
00319 uint8_t *edge_emu_buffer;
00320 uint8_t *rd_scratchpad;
00321 uint8_t *obmc_scratchpad;
00322 uint8_t *b_scratchpad;
00323
00324 int qscale;
00325 int chroma_qscale;
00326 unsigned int lambda;
00327 unsigned int lambda2;
00328 int *lambda_table;
00329 int adaptive_quant;
00330 int dquant;
00331 int pict_type;
00332 int last_pict_type;
00333 int last_non_b_pict_type;
00334 int dropable;
00335 int frame_rate_index;
00336 int last_lambda_for[5];
00337 int skipdct;
00338
00339
00340 int unrestricted_mv;
00341 int h263_long_vectors;
00342
00343 DSPContext dsp;
00344 int f_code;
00345 int b_code;
00346 int16_t (*p_mv_table_base)[2];
00347 int16_t (*b_forw_mv_table_base)[2];
00348 int16_t (*b_back_mv_table_base)[2];
00349 int16_t (*b_bidir_forw_mv_table_base)[2];
00350 int16_t (*b_bidir_back_mv_table_base)[2];
00351 int16_t (*b_direct_mv_table_base)[2];
00352 int16_t (*p_field_mv_table_base[2][2])[2];
00353 int16_t (*b_field_mv_table_base[2][2][2])[2];
00354 int16_t (*p_mv_table)[2];
00355 int16_t (*b_forw_mv_table)[2];
00356 int16_t (*b_back_mv_table)[2];
00357 int16_t (*b_bidir_forw_mv_table)[2];
00358 int16_t (*b_bidir_back_mv_table)[2];
00359 int16_t (*b_direct_mv_table)[2];
00360 int16_t (*p_field_mv_table[2][2])[2];
00361 int16_t (*b_field_mv_table[2][2][2])[2];
00362 uint8_t (*p_field_select_table[2]);
00363 uint8_t (*b_field_select_table[2][2]);
00364 int me_method;
00365 int mv_dir;
00366 #define MV_DIR_FORWARD 1
00367 #define MV_DIR_BACKWARD 2
00368 #define MV_DIRECT 4 ///< bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4)
00369 int mv_type;
00370 #define MV_TYPE_16X16 0 ///< 1 vector for the whole mb
00371 #define MV_TYPE_8X8 1 ///< 4 vectors (h263, mpeg4 4MV)
00372 #define MV_TYPE_16X8 2 ///< 2 vectors, one per 16x8 block
00373 #define MV_TYPE_FIELD 3 ///< 2 vectors, one per field
00374 #define MV_TYPE_DMV 4 ///< 2 vectors, special mpeg2 Dual Prime Vectors
00375
00380 int mv[2][4][2];
00381 int field_select[2][2];
00382 int last_mv[2][2][2];
00383 uint8_t *fcode_tab;
00384 int16_t direct_scale_mv[2][64];
00385
00386 MotionEstContext me;
00387
00388 int no_rounding;
00391
00392 int mb_x, mb_y;
00393 int mb_skip_run;
00394 int mb_intra;
00395 uint16_t *mb_type;
00396 #define CANDIDATE_MB_TYPE_INTRA 0x01
00397 #define CANDIDATE_MB_TYPE_INTER 0x02
00398 #define CANDIDATE_MB_TYPE_INTER4V 0x04
00399 #define CANDIDATE_MB_TYPE_SKIPPED 0x08
00400
00401
00402 #define CANDIDATE_MB_TYPE_DIRECT 0x10
00403 #define CANDIDATE_MB_TYPE_FORWARD 0x20
00404 #define CANDIDATE_MB_TYPE_BACKWARD 0x40
00405 #define CANDIDATE_MB_TYPE_BIDIR 0x80
00406
00407 #define CANDIDATE_MB_TYPE_INTER_I 0x100
00408 #define CANDIDATE_MB_TYPE_FORWARD_I 0x200
00409 #define CANDIDATE_MB_TYPE_BACKWARD_I 0x400
00410 #define CANDIDATE_MB_TYPE_BIDIR_I 0x800
00411
00412 #define CANDIDATE_MB_TYPE_DIRECT0 0x1000
00413
00414 int block_index[6];
00415 int block_wrap[6];
00416 uint8_t *dest[3];
00417
00418 int *mb_index2xy;
00419
00421 uint16_t intra_matrix[64];
00422 uint16_t chroma_intra_matrix[64];
00423 uint16_t inter_matrix[64];
00424 uint16_t chroma_inter_matrix[64];
00425 #define QUANT_BIAS_SHIFT 8
00426 int intra_quant_bias;
00427 int inter_quant_bias;
00428 int min_qcoeff;
00429 int max_qcoeff;
00430 int ac_esc_length;
00431 uint8_t *intra_ac_vlc_length;
00432 uint8_t *intra_ac_vlc_last_length;
00433 uint8_t *inter_ac_vlc_length;
00434 uint8_t *inter_ac_vlc_last_length;
00435 uint8_t *luma_dc_vlc_length;
00436 #define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
00437
00438 int coded_score[8];
00439
00441 int (*q_intra_matrix)[64];
00442 int (*q_inter_matrix)[64];
00444 uint16_t (*q_intra_matrix16)[2][64];
00445 uint16_t (*q_inter_matrix16)[2][64];
00446
00447
00448 int (*dct_error_sum)[64];
00449 int dct_count[2];
00450 uint16_t (*dct_offset)[64];
00451
00452 void *opaque;
00453
00454
00455 int64_t total_bits;
00456 int frame_bits;
00457 int next_lambda;
00458 RateControlContext rc_context;
00459
00460
00461 int mv_bits;
00462 int header_bits;
00463 int i_tex_bits;
00464 int p_tex_bits;
00465 int i_count;
00466 int f_count;
00467 int b_count;
00468 int skip_count;
00469 int misc_bits;
00470 int last_bits;
00471
00472
00473 int error_count, error_occurred;
00474 uint8_t *error_status_table;
00475 #define VP_START 1 ///< current MB is the first after a resync marker
00476 #define ER_AC_ERROR 2
00477 #define ER_DC_ERROR 4
00478 #define ER_MV_ERROR 8
00479 #define ER_AC_END 16
00480 #define ER_DC_END 32
00481 #define ER_MV_END 64
00482
00483 #define ER_MB_ERROR (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)
00484 #define ER_MB_END (ER_AC_END|ER_DC_END|ER_MV_END)
00485
00486 int resync_mb_x;
00487 int resync_mb_y;
00488 GetBitContext last_resync_gb;
00489 int mb_num_left;
00490 int next_p_frame_damaged;
00491 int err_recognition;
00492
00493 ParseContext parse_context;
00494
00495
00496 int gob_index;
00497 int obmc;
00498 int showed_packed_warning;
00499
00500
00501 int umvplus;
00502 int h263_aic_dir;
00503 int h263_slice_structured;
00504 int alt_inter_vlc;
00505 int modified_quant;
00506 int loop_filter;
00507 int custom_pcf;
00508
00509
00510 int time_increment_bits;
00511 int last_time_base;
00512 int time_base;
00513 int64_t time;
00514 int64_t last_non_b_time;
00515 uint16_t pp_time;
00516 uint16_t pb_time;
00517 uint16_t pp_field_time;
00518 uint16_t pb_field_time;
00519 int shape;
00520 int vol_sprite_usage;
00521 int sprite_width;
00522 int sprite_height;
00523 int sprite_left;
00524 int sprite_top;
00525 int sprite_brightness_change;
00526 int num_sprite_warping_points;
00527 int real_sprite_warping_points;
00528 uint16_t sprite_traj[4][2];
00529 int sprite_offset[2][2];
00530 int sprite_delta[2][2];
00531 int sprite_shift[2];
00532 int mcsel;
00533 int quant_precision;
00534 int quarter_sample;
00535 int scalability;
00536 int hierachy_type;
00537 int enhancement_type;
00538 int new_pred;
00539 int reduced_res_vop;
00540 int aspect_ratio_info;
00541 int sprite_warping_accuracy;
00542 int low_latency_sprite;
00543 int data_partitioning;
00544 int partitioned_frame;
00545 int rvlc;
00546 int resync_marker;
00547 int low_delay;
00548 int vo_type;
00549 int vol_control_parameters;
00550 int intra_dc_threshold;
00551 int use_intra_dc_vlc;
00552 PutBitContext tex_pb;
00553 PutBitContext pb2;
00554 int mpeg_quant;
00555 int t_frame;
00556 int padding_bug_score;
00557 int cplx_estimation_trash_i;
00558 int cplx_estimation_trash_p;
00559 int cplx_estimation_trash_b;
00560
00561
00562 int divx_version;
00563 int divx_build;
00564 int divx_packed;
00565 uint8_t *bitstream_buffer;
00566 int bitstream_buffer_size;
00567 unsigned int allocated_bitstream_buffer_size;
00568
00569 int xvid_build;
00570
00571
00572 int lavc_build;
00573
00574
00575 int rv10_version;
00576 int rv10_first_dc_coded[3];
00577 int orig_width, orig_height;
00578
00579
00580 struct MJpegContext *mjpeg_ctx;
00581 int mjpeg_vsample[3];
00582 int mjpeg_hsample[3];
00583
00584
00585 int mv_table_index;
00586 int rl_table_index;
00587 int rl_chroma_table_index;
00588 int dc_table_index;
00589 int use_skip_mb_code;
00590 int slice_height;
00591 int first_slice_line;
00592 int flipflop_rounding;
00593 int msmpeg4_version;
00594 int per_mb_rl_table;
00595 int esc3_level_length;
00596 int esc3_run_length;
00598 int (*ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2];
00599 int inter_intra_pred;
00600 int mspel;
00601
00602
00603 GetBitContext gb;
00604
00605
00606 int gop_picture_number;
00607 int last_mv_dir;
00608 int broken_link;
00609 uint8_t *vbv_delay_ptr;
00610
00611
00612 int progressive_sequence;
00613 int mpeg_f_code[2][2];
00614 int picture_structure;
00615
00616 #define PICT_TOP_FIELD 1
00617 #define PICT_BOTTOM_FIELD 2
00618 #define PICT_FRAME 3
00619
00620 int intra_dc_precision;
00621 int frame_pred_frame_dct;
00622 int top_field_first;
00623 int concealment_motion_vectors;
00624 int q_scale_type;
00625 int intra_vlc_format;
00626 int alternate_scan;
00627 int repeat_first_field;
00628 int chroma_420_type;
00629 int chroma_format;
00630 #define CHROMA_420 1
00631 #define CHROMA_422 2
00632 #define CHROMA_444 3
00633 int chroma_x_shift;
00634 int chroma_y_shift;
00635
00636 int progressive_frame;
00637 int full_pel[2];
00638 int interlaced_dct;
00639 int first_slice;
00640 int first_field;
00641 int drop_frame_timecode;
00642 int scan_offset;
00643
00644
00645 int rtp_mode;
00646
00647 uint8_t *ptr_lastgob;
00648 int swap_uv;
00649 DCTELEM (*pblocks[12])[64];
00650
00651 DCTELEM (*block)[64];
00652 DCTELEM (*blocks)[8][64];
00653 int (*decode_mb)(struct MpegEncContext *s, DCTELEM block[6][64]);
00654 #define SLICE_OK 0
00655 #define SLICE_ERROR -1
00656 #define SLICE_END -2 ///<end marker found
00657 #define SLICE_NOEND -3 ///<no end marker or error found but mb count exceeded
00658
00659 void (*dct_unquantize_mpeg1_intra)(struct MpegEncContext *s,
00660 DCTELEM *block, int n, int qscale);
00661 void (*dct_unquantize_mpeg1_inter)(struct MpegEncContext *s,
00662 DCTELEM *block, int n, int qscale);
00663 void (*dct_unquantize_mpeg2_intra)(struct MpegEncContext *s,
00664 DCTELEM *block, int n, int qscale);
00665 void (*dct_unquantize_mpeg2_inter)(struct MpegEncContext *s,
00666 DCTELEM *block, int n, int qscale);
00667 void (*dct_unquantize_h263_intra)(struct MpegEncContext *s,
00668 DCTELEM *block, int n, int qscale);
00669 void (*dct_unquantize_h263_inter)(struct MpegEncContext *s,
00670 DCTELEM *block, int n, int qscale);
00671 void (*dct_unquantize_h261_intra)(struct MpegEncContext *s,
00672 DCTELEM *block, int n, int qscale);
00673 void (*dct_unquantize_h261_inter)(struct MpegEncContext *s,
00674 DCTELEM *block, int n, int qscale);
00675 void (*dct_unquantize_intra)(struct MpegEncContext *s,
00676 DCTELEM *block, int n, int qscale);
00677 void (*dct_unquantize_inter)(struct MpegEncContext *s,
00678 DCTELEM *block, int n, int qscale);
00679 int (*dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
00680 int (*fast_dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
00681 void (*denoise_dct)(struct MpegEncContext *s, DCTELEM *block);
00682 } MpegEncContext;
00683
00684 #define REBASE_PICTURE(pic, new_ctx, old_ctx) (pic ? \
00685 (pic >= old_ctx->picture && pic < old_ctx->picture+old_ctx->picture_count ?\
00686 &new_ctx->picture[pic - old_ctx->picture] : pic - (Picture*)old_ctx + (Picture*)new_ctx)\
00687 : NULL)
00688
00689 void MPV_decode_defaults(MpegEncContext *s);
00690 int MPV_common_init(MpegEncContext *s);
00691 void MPV_common_end(MpegEncContext *s);
00692 void MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]);
00693 int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx);
00694 void MPV_frame_end(MpegEncContext *s);
00695 int MPV_encode_init(AVCodecContext *avctx);
00696 int MPV_encode_end(AVCodecContext *avctx);
00697 int MPV_encode_picture(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data);
00698 void MPV_common_init_mmx(MpegEncContext *s);
00699 void MPV_common_init_axp(MpegEncContext *s);
00700 void MPV_common_init_mlib(MpegEncContext *s);
00701 void MPV_common_init_mmi(MpegEncContext *s);
00702 void MPV_common_init_arm(MpegEncContext *s);
00703 void MPV_common_init_altivec(MpegEncContext *s);
00704 void MPV_common_init_bfin(MpegEncContext *s);
00705 void ff_clean_intra_table_entries(MpegEncContext *s);
00706 void ff_draw_horiz_band(MpegEncContext *s, int y, int h);
00707 void ff_mpeg_flush(AVCodecContext *avctx);
00708 void ff_print_debug_info(MpegEncContext *s, AVFrame *pict);
00709 void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
00710 void ff_release_unused_pictures(MpegEncContext *s, int remove_current);
00711 int ff_find_unused_picture(MpegEncContext *s, int shared);
00712 void ff_denoise_dct(MpegEncContext *s, DCTELEM *block);
00713 void ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src);
00714 int MPV_lowest_referenced_row(MpegEncContext *s, int dir);
00715 void MPV_report_decode_progress(MpegEncContext *s);
00716 int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src);
00717 const uint8_t *avpriv_mpv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state);
00718 void ff_set_qscale(MpegEncContext * s, int qscale);
00719
00720 void ff_er_frame_start(MpegEncContext *s);
00721 void ff_er_frame_end(MpegEncContext *s);
00722 void ff_er_add_slice(MpegEncContext *s, int startx, int starty, int endx, int endy, int status);
00723
00724 int ff_dct_common_init(MpegEncContext *s);
00725 void ff_convert_matrix(DSPContext *dsp, int (*qmat)[64], uint16_t (*qmat16)[2][64],
00726 const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra);
00727
00728 void ff_init_block_index(MpegEncContext *s);
00729 void ff_copy_picture(Picture *dst, Picture *src);
00730
00735 int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared);
00736
00737 extern const enum PixelFormat ff_pixfmt_list_420[];
00738 extern const enum PixelFormat ff_hwaccel_pixfmt_list_420[];
00739
00740 static inline void ff_update_block_index(MpegEncContext *s){
00741 const int block_size= 8>>s->avctx->lowres;
00742
00743 s->block_index[0]+=2;
00744 s->block_index[1]+=2;
00745 s->block_index[2]+=2;
00746 s->block_index[3]+=2;
00747 s->block_index[4]++;
00748 s->block_index[5]++;
00749 s->dest[0]+= 2*block_size;
00750 s->dest[1]+= block_size;
00751 s->dest[2]+= block_size;
00752 }
00753
00754 static inline int get_bits_diff(MpegEncContext *s){
00755 const int bits= put_bits_count(&s->pb);
00756 const int last= s->last_bits;
00757
00758 s->last_bits = bits;
00759
00760 return bits - last;
00761 }
00762
00763 static inline int ff_h263_round_chroma(int x){
00764 static const uint8_t h263_chroma_roundtab[16] = {
00765
00766 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
00767 };
00768 return h263_chroma_roundtab[x & 0xf] + (x >> 3);
00769 }
00770
00771
00772 void ff_estimate_p_frame_motion(MpegEncContext * s,
00773 int mb_x, int mb_y);
00774 void ff_estimate_b_frame_motion(MpegEncContext * s,
00775 int mb_x, int mb_y);
00776 int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type);
00777 void ff_fix_long_p_mvs(MpegEncContext * s);
00778 void ff_fix_long_mvs(MpegEncContext * s, uint8_t *field_select_table, int field_select,
00779 int16_t (*mv_table)[2], int f_code, int type, int truncate);
00780 int ff_init_me(MpegEncContext *s);
00781 int ff_pre_estimate_p_frame_motion(MpegEncContext * s, int mb_x, int mb_y);
00782 int ff_epzs_motion_search(MpegEncContext * s, int *mx_ptr, int *my_ptr,
00783 int P[10][2], int src_index, int ref_index, int16_t (*last_mv)[2],
00784 int ref_mv_scale, int size, int h);
00785 int ff_get_mb_score(MpegEncContext * s, int mx, int my, int src_index,
00786 int ref_index, int size, int h, int add_rate);
00787
00788
00789 extern const uint8_t ff_mpeg1_dc_scale_table[128];
00790 extern const uint8_t * const ff_mpeg2_dc_scale_table[4];
00791
00792 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number);
00793 void mpeg1_encode_mb(MpegEncContext *s,
00794 DCTELEM block[6][64],
00795 int motion_x, int motion_y);
00796 void ff_mpeg1_encode_init(MpegEncContext *s);
00797 void ff_mpeg1_encode_slice_header(MpegEncContext *s);
00798 void ff_mpeg1_clean_buffers(MpegEncContext *s);
00799 int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size, AVCodecParserContext *s);
00800
00801 extern const uint8_t ff_aic_dc_scale_table[32];
00802 extern const uint8_t ff_h263_chroma_qscale_table[32];
00803 extern const uint8_t ff_h263_loop_filter_strength[32];
00804
00805
00806 void ff_h261_loop_filter(MpegEncContext *s);
00807 void ff_h261_reorder_mb_index(MpegEncContext* s);
00808 void ff_h261_encode_mb(MpegEncContext *s,
00809 DCTELEM block[6][64],
00810 int motion_x, int motion_y);
00811 void ff_h261_encode_picture_header(MpegEncContext * s, int picture_number);
00812 void ff_h261_encode_init(MpegEncContext *s);
00813 int ff_h261_get_picture_format(int width, int height);
00814
00815
00816
00817 void rv10_encode_picture_header(MpegEncContext *s, int picture_number);
00818 int rv_decode_dc(MpegEncContext *s, int n);
00819 void rv20_encode_picture_header(MpegEncContext *s, int picture_number);
00820
00821
00822
00823 void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number);
00824 void msmpeg4_encode_ext_header(MpegEncContext * s);
00825 void msmpeg4_encode_mb(MpegEncContext * s,
00826 DCTELEM block[6][64],
00827 int motion_x, int motion_y);
00828 int msmpeg4_decode_picture_header(MpegEncContext * s);
00829 int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
00830 int ff_msmpeg4_decode_init(AVCodecContext *avctx);
00831 void ff_msmpeg4_encode_init(MpegEncContext *s);
00832 int ff_wmv2_decode_picture_header(MpegEncContext * s);
00833 int ff_wmv2_decode_secondary_picture_header(MpegEncContext * s);
00834 void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr);
00835 void ff_mspel_motion(MpegEncContext *s,
00836 uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr,
00837 uint8_t **ref_picture, op_pixels_func (*pix_op)[4],
00838 int motion_x, int motion_y, int h);
00839 int ff_wmv2_encode_picture_header(MpegEncContext * s, int picture_number);
00840 void ff_wmv2_encode_mb(MpegEncContext * s,
00841 DCTELEM block[6][64],
00842 int motion_x, int motion_y);
00843
00844 #endif