00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00028 #ifndef FFMPEG_MPEGVIDEO_H
00029 #define FFMPEG_MPEGVIDEO_H
00030
00031 #include "dsputil.h"
00032 #include "bitstream.h"
00033 #include "ratecontrol.h"
00034 #include "parser.h"
00035
00036 #define FRAME_SKIPPED 100
00037
00038 enum OutputFormat {
00039 FMT_MPEG1,
00040 FMT_H261,
00041 FMT_H263,
00042 FMT_MJPEG,
00043 FMT_H264,
00044 };
00045
00046 #define EDGE_WIDTH 16
00047
00048 #define MPEG_BUF_SIZE (16 * 1024)
00049
00050 #define QMAT_SHIFT_MMX 16
00051 #define QMAT_SHIFT 22
00052
00053 #define MAX_FCODE 7
00054 #define MAX_MV 2048
00055
00056 #define MAX_THREADS 8
00057
00058 #define MAX_PICTURE_COUNT 32
00059
00060 #define ME_MAP_SIZE 64
00061 #define ME_MAP_SHIFT 3
00062 #define ME_MAP_MV_BITS 11
00063
00064
00065 #define MAX_RUN 64
00066 #define MAX_LEVEL 64
00067
00068 #define I_TYPE FF_I_TYPE
00069 #define P_TYPE FF_P_TYPE
00070 #define B_TYPE FF_B_TYPE
00071 #define S_TYPE FF_S_TYPE
00072 #define SI_TYPE FF_SI_TYPE
00073 #define SP_TYPE FF_SP_TYPE
00074
00075 #define MAX_MB_BYTES (30*16*16*3/8 + 120)
00076
00077 #define INPLACE_OFFSET 16
00078
00079
00080 #define SEQ_END_CODE 0x000001b7
00081 #define SEQ_START_CODE 0x000001b3
00082 #define GOP_START_CODE 0x000001b8
00083 #define PICTURE_START_CODE 0x00000100
00084 #define SLICE_MIN_START_CODE 0x00000101
00085 #define SLICE_MAX_START_CODE 0x000001af
00086 #define EXT_START_CODE 0x000001b5
00087 #define USER_START_CODE 0x000001b2
00088
00092 typedef struct ScanTable{
00093 const uint8_t *scantable;
00094 uint8_t permutated[64];
00095 uint8_t raster_end[64];
00096 #ifdef ARCH_POWERPC
00097
00098 DECLARE_ALIGNED_8(uint8_t, inverse[64]);
00099 #endif
00100 } ScanTable;
00101
00105 typedef struct Picture{
00106 FF_COMMON_FRAME
00107
00111 uint8_t *interpolated[3];
00112 int16_t (*motion_val_base[2])[2];
00113 uint32_t *mb_type_base;
00114 #define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if theres just one type
00115 #define IS_INTRA4x4(a) ((a)&MB_TYPE_INTRA4x4)
00116 #define IS_INTRA16x16(a) ((a)&MB_TYPE_INTRA16x16)
00117 #define IS_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
00118 #define IS_INTRA(a) ((a)&7)
00119 #define IS_INTER(a) ((a)&(MB_TYPE_16x16|MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8))
00120 #define IS_SKIP(a) ((a)&MB_TYPE_SKIP)
00121 #define IS_INTRA_PCM(a) ((a)&MB_TYPE_INTRA_PCM)
00122 #define IS_INTERLACED(a) ((a)&MB_TYPE_INTERLACED)
00123 #define IS_DIRECT(a) ((a)&MB_TYPE_DIRECT2)
00124 #define IS_GMC(a) ((a)&MB_TYPE_GMC)
00125 #define IS_16X16(a) ((a)&MB_TYPE_16x16)
00126 #define IS_16X8(a) ((a)&MB_TYPE_16x8)
00127 #define IS_8X16(a) ((a)&MB_TYPE_8x16)
00128 #define IS_8X8(a) ((a)&MB_TYPE_8x8)
00129 #define IS_SUB_8X8(a) ((a)&MB_TYPE_16x16) //note reused
00130 #define IS_SUB_8X4(a) ((a)&MB_TYPE_16x8) //note reused
00131 #define IS_SUB_4X8(a) ((a)&MB_TYPE_8x16) //note reused
00132 #define IS_SUB_4X4(a) ((a)&MB_TYPE_8x8) //note reused
00133 #define IS_ACPRED(a) ((a)&MB_TYPE_ACPRED)
00134 #define IS_QUANT(a) ((a)&MB_TYPE_QUANT)
00135 #define IS_DIR(a, part, list) ((a) & (MB_TYPE_P0L0<<((part)+2*(list))))
00136 #define USES_LIST(a, list) ((a) & ((MB_TYPE_P0L0|MB_TYPE_P1L0)<<(2*(list))))
00137 #define HAS_CBP(a) ((a)&MB_TYPE_CBP)
00138
00139 int field_poc[2];
00140 int poc;
00141 int frame_num;
00142 int pic_id;
00144 int long_ref;
00145 int ref_poc[2][2][16];
00146 int ref_count[2][2];
00147 int mbaff;
00148
00149 int mb_var_sum;
00150 int mc_mb_var_sum;
00151 uint16_t *mb_var;
00152 uint16_t *mc_mb_var;
00153 uint8_t *mb_mean;
00154 int32_t *mb_cmp_score;
00155 int b_frame_score;
00156 } Picture;
00157
00158 struct MpegEncContext;
00159
00163 typedef struct MotionEstContext{
00164 AVCodecContext *avctx;
00165 int skip;
00166 int co_located_mv[4][2];
00167 int direct_basis_mv[4][2];
00168 uint8_t *scratchpad;
00169 uint8_t *best_mb;
00170 uint8_t *temp_mb[2];
00171 uint8_t *temp;
00172 int best_bits;
00173 uint32_t *map;
00174 uint32_t *score_map;
00175 int map_generation;
00176 int pre_penalty_factor;
00177 int penalty_factor;
00182 int sub_penalty_factor;
00183 int mb_penalty_factor;
00184 int flags;
00185 int sub_flags;
00186 int mb_flags;
00187 int pre_pass;
00188 int dia_size;
00189 int xmin;
00190 int xmax;
00191 int ymin;
00192 int ymax;
00193 int pred_x;
00194 int pred_y;
00195 uint8_t *src[4][4];
00196 uint8_t *ref[4][4];
00197 int stride;
00198 int uvstride;
00199
00200 int mc_mb_var_sum_temp;
00201 int mb_var_sum_temp;
00202 int scene_change_score;
00203
00204 op_pixels_func (*hpel_put)[4];
00205 op_pixels_func (*hpel_avg)[4];
00206 qpel_mc_func (*qpel_put)[16];
00207 qpel_mc_func (*qpel_avg)[16];
00208 uint8_t (*mv_penalty)[MAX_MV*2+1];
00209 uint8_t *current_mv_penalty;
00210 int (*sub_motion_search)(struct MpegEncContext * s,
00211 int *mx_ptr, int *my_ptr, int dmin,
00212 int src_index, int ref_index,
00213 int size, int h);
00214 }MotionEstContext;
00215
00219 typedef struct MpegEncContext {
00220 struct AVCodecContext *avctx;
00221
00222 int width, height;
00223 int gop_size;
00224 int intra_only;
00225 int bit_rate;
00226 enum OutputFormat out_format;
00227 int h263_pred;
00228
00229
00230 int h263_plus;
00231 int h263_msmpeg4;
00232 int h263_flv;
00233
00234 enum CodecID codec_id;
00235 int fixed_qscale;
00236 int encoding;
00237 int flags;
00238 int flags2;
00239 int max_b_frames;
00240 int luma_elim_threshold;
00241 int chroma_elim_threshold;
00242 int strict_std_compliance;
00243 int workaround_bugs;
00244 int codec_tag;
00245 int stream_codec_tag;
00246
00247
00249 PutBitContext pb;
00250
00251
00252 int context_initialized;
00253 int input_picture_number;
00254 int coded_picture_number;
00255 int picture_number;
00256 int picture_in_gop_number;
00257 int b_frames_since_non_b;
00258 int64_t user_specified_pts;
00259 int mb_width, mb_height;
00260 int mb_stride;
00261 int b8_stride;
00262 int b4_stride;
00263 int h_edge_pos, v_edge_pos;
00264 int mb_num;
00265 int linesize;
00266 int uvlinesize;
00267 Picture *picture;
00268 Picture **input_picture;
00269 Picture **reordered_input_picture;
00270
00271 int start_mb_y;
00272 int end_mb_y;
00273 struct MpegEncContext *thread_context[MAX_THREADS];
00274
00279 Picture last_picture;
00280
00285 Picture next_picture;
00286
00291 Picture new_picture;
00292
00297 Picture current_picture;
00298
00299 Picture *last_picture_ptr;
00300 Picture *next_picture_ptr;
00301 Picture *current_picture_ptr;
00302 uint8_t *visualization_buffer[3];
00303 int last_dc[3];
00304 int16_t *dc_val_base;
00305 int16_t *dc_val[3];
00306 int16_t dc_cache[4*5];
00307 int y_dc_scale, c_dc_scale;
00308 const uint8_t *y_dc_scale_table;
00309 const uint8_t *c_dc_scale_table;
00310 const uint8_t *chroma_qscale_table;
00311 uint8_t *coded_block_base;
00312 uint8_t *coded_block;
00313 int16_t (*ac_val_base)[16];
00314 int16_t (*ac_val[3])[16];
00315 int ac_pred;
00316 uint8_t *prev_pict_types;
00317 #define PREV_PICT_TYPES_BUFFER_SIZE 256
00318 int mb_skipped;
00319 uint8_t *mbskip_table;
00321 uint8_t *mbintra_table;
00322 uint8_t *cbp_table;
00323 uint8_t *pred_dir_table;
00324 uint8_t *allocated_edge_emu_buffer;
00325 uint8_t *edge_emu_buffer;
00326 uint8_t *rd_scratchpad;
00327 uint8_t *obmc_scratchpad;
00328 uint8_t *b_scratchpad;
00329
00330 int qscale;
00331 int chroma_qscale;
00332 unsigned int lambda;
00333 unsigned int lambda2;
00334 int *lambda_table;
00335 int adaptive_quant;
00336 int dquant;
00337 int pict_type;
00338 int last_pict_type;
00339 int last_non_b_pict_type;
00340 int dropable;
00341 int frame_rate_index;
00342 int last_lambda_for[5];
00343 int skipdct;
00344
00345
00346 int unrestricted_mv;
00347 int h263_long_vectors;
00348 int decode;
00349
00350 DSPContext dsp;
00351 int f_code;
00352 int b_code;
00353 int16_t (*p_mv_table_base)[2];
00354 int16_t (*b_forw_mv_table_base)[2];
00355 int16_t (*b_back_mv_table_base)[2];
00356 int16_t (*b_bidir_forw_mv_table_base)[2];
00357 int16_t (*b_bidir_back_mv_table_base)[2];
00358 int16_t (*b_direct_mv_table_base)[2];
00359 int16_t (*p_field_mv_table_base[2][2])[2];
00360 int16_t (*b_field_mv_table_base[2][2][2])[2];
00361 int16_t (*p_mv_table)[2];
00362 int16_t (*b_forw_mv_table)[2];
00363 int16_t (*b_back_mv_table)[2];
00364 int16_t (*b_bidir_forw_mv_table)[2];
00365 int16_t (*b_bidir_back_mv_table)[2];
00366 int16_t (*b_direct_mv_table)[2];
00367 int16_t (*p_field_mv_table[2][2])[2];
00368 int16_t (*b_field_mv_table[2][2][2])[2];
00369 uint8_t (*p_field_select_table[2]);
00370 uint8_t (*b_field_select_table[2][2]);
00371 int me_method;
00372 int mv_dir;
00373 #define MV_DIR_FORWARD 1
00374 #define MV_DIR_BACKWARD 2
00375 #define MV_DIRECT 4
00376 int mv_type;
00377 #define MV_TYPE_16X16 0
00378 #define MV_TYPE_8X8 1
00379 #define MV_TYPE_16X8 2
00380 #define MV_TYPE_FIELD 3
00381 #define MV_TYPE_DMV 4
00382
00387 int mv[2][4][2];
00388 int field_select[2][2];
00389 int last_mv[2][2][2];
00390 uint8_t *fcode_tab;
00391 int16_t direct_scale_mv[2][64];
00392
00393 MotionEstContext me;
00394
00395 int no_rounding;
00398 int hurry_up;
00401
00402 int mb_x, mb_y;
00403 int mb_skip_run;
00404 int mb_intra;
00405 uint16_t *mb_type;
00406 #define CANDIDATE_MB_TYPE_INTRA 0x01
00407 #define CANDIDATE_MB_TYPE_INTER 0x02
00408 #define CANDIDATE_MB_TYPE_INTER4V 0x04
00409 #define CANDIDATE_MB_TYPE_SKIPPED 0x08
00410
00411
00412 #define CANDIDATE_MB_TYPE_DIRECT 0x10
00413 #define CANDIDATE_MB_TYPE_FORWARD 0x20
00414 #define CANDIDATE_MB_TYPE_BACKWARD 0x40
00415 #define CANDIDATE_MB_TYPE_BIDIR 0x80
00416
00417 #define CANDIDATE_MB_TYPE_INTER_I 0x100
00418 #define CANDIDATE_MB_TYPE_FORWARD_I 0x200
00419 #define CANDIDATE_MB_TYPE_BACKWARD_I 0x400
00420 #define CANDIDATE_MB_TYPE_BIDIR_I 0x800
00421
00422 #define CANDIDATE_MB_TYPE_DIRECT0 0x1000
00423
00424 int block_index[6];
00425 int block_wrap[6];
00426 uint8_t *dest[3];
00427
00428 int *mb_index2xy;
00429
00431 uint16_t intra_matrix[64];
00432 uint16_t chroma_intra_matrix[64];
00433 uint16_t inter_matrix[64];
00434 uint16_t chroma_inter_matrix[64];
00435 #define QUANT_BIAS_SHIFT 8
00436 int intra_quant_bias;
00437 int inter_quant_bias;
00438 int min_qcoeff;
00439 int max_qcoeff;
00440 int ac_esc_length;
00441 uint8_t *intra_ac_vlc_length;
00442 uint8_t *intra_ac_vlc_last_length;
00443 uint8_t *inter_ac_vlc_length;
00444 uint8_t *inter_ac_vlc_last_length;
00445 uint8_t *luma_dc_vlc_length;
00446 uint8_t *chroma_dc_vlc_length;
00447 #define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
00448
00449 int coded_score[8];
00450
00452 int (*q_intra_matrix)[64];
00453 int (*q_inter_matrix)[64];
00455 uint16_t (*q_intra_matrix16)[2][64];
00456 uint16_t (*q_inter_matrix16)[2][64];
00457 int block_last_index[12];
00458
00459 DECLARE_ALIGNED_8(ScanTable, intra_scantable);
00460 ScanTable intra_h_scantable;
00461 ScanTable intra_v_scantable;
00462 ScanTable inter_scantable;
00463
00464
00465 int (*dct_error_sum)[64];
00466 int dct_count[2];
00467 uint16_t (*dct_offset)[64];
00468
00469 void *opaque;
00470
00471
00472 int64_t wanted_bits;
00473 int64_t total_bits;
00474 int frame_bits;
00475 int next_lambda;
00476 RateControlContext rc_context;
00477
00478
00479 int mv_bits;
00480 int header_bits;
00481 int i_tex_bits;
00482 int p_tex_bits;
00483 int i_count;
00484 int f_count;
00485 int b_count;
00486 int skip_count;
00487 int misc_bits;
00488 int last_bits;
00489
00490
00491 int error_count;
00492 uint8_t *error_status_table;
00493 #define VP_START 1
00494 #define AC_ERROR 2
00495 #define DC_ERROR 4
00496 #define MV_ERROR 8
00497 #define AC_END 16
00498 #define DC_END 32
00499 #define MV_END 64
00500
00501
00502 int resync_mb_x;
00503 int resync_mb_y;
00504 GetBitContext last_resync_gb;
00505 int mb_num_left;
00506 int next_p_frame_damaged;
00507 int error_resilience;
00508
00509 ParseContext parse_context;
00510
00511
00512 int gob_index;
00513 int obmc;
00514
00515
00516 int umvplus;
00517 int h263_aic;
00518 int h263_aic_dir;
00519 int h263_slice_structured;
00520 int alt_inter_vlc;
00521 int modified_quant;
00522 int loop_filter;
00523 int custom_pcf;
00524
00525
00526 int time_increment_bits;
00527 int last_time_base;
00528 int time_base;
00529 int64_t time;
00530 int64_t last_non_b_time;
00531 uint16_t pp_time;
00532 uint16_t pb_time;
00533 uint16_t pp_field_time;
00534 uint16_t pb_field_time;
00535 int shape;
00536 int vol_sprite_usage;
00537 int sprite_width;
00538 int sprite_height;
00539 int sprite_left;
00540 int sprite_top;
00541 int sprite_brightness_change;
00542 int num_sprite_warping_points;
00543 int real_sprite_warping_points;
00544 int sprite_offset[2][2];
00545 int sprite_delta[2][2];
00546 int sprite_shift[2];
00547 int mcsel;
00548 int quant_precision;
00549 int quarter_sample;
00550 int scalability;
00551 int hierachy_type;
00552 int enhancement_type;
00553 int new_pred;
00554 int reduced_res_vop;
00555 int aspect_ratio_info;
00556 int sprite_warping_accuracy;
00557 int low_latency_sprite;
00558 int data_partitioning;
00559 int partitioned_frame;
00560 int rvlc;
00561 int resync_marker;
00562 int low_delay;
00563 int vo_type;
00564 int vol_control_parameters;
00565 int intra_dc_threshold;
00566 int use_intra_dc_vlc;
00567 PutBitContext tex_pb;
00568 PutBitContext pb2;
00569 int mpeg_quant;
00570 int t_frame;
00571 int padding_bug_score;
00572
00573
00574 int divx_version;
00575 int divx_build;
00576 int divx_packed;
00577 uint8_t *bitstream_buffer;
00578 int bitstream_buffer_size;
00579 unsigned int allocated_bitstream_buffer_size;
00580
00581 int xvid_build;
00582
00583
00584 int lavc_build;
00585
00586
00587 int rv10_version;
00588 int rv10_first_dc_coded[3];
00589
00590
00591 struct MJpegContext *mjpeg_ctx;
00592 int mjpeg_vsample[3];
00593 int mjpeg_hsample[3];
00594
00595
00596 int mv_table_index;
00597 int rl_table_index;
00598 int rl_chroma_table_index;
00599 int dc_table_index;
00600 int use_skip_mb_code;
00601 int slice_height;
00602 int first_slice_line;
00603 int flipflop_rounding;
00604 int msmpeg4_version;
00605 int per_mb_rl_table;
00606 int esc3_level_length;
00607 int esc3_run_length;
00609 int (*ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2];
00610 int inter_intra_pred;
00611 int mspel;
00612
00613
00614 GetBitContext gb;
00615
00616
00617 int gop_picture_number;
00618 int last_mv_dir;
00619 int broken_link;
00620 uint8_t *vbv_delay_ptr;
00621
00622
00623 int progressive_sequence;
00624 int mpeg_f_code[2][2];
00625 int picture_structure;
00626
00627 #define PICT_TOP_FIELD 1
00628 #define PICT_BOTTOM_FIELD 2
00629 #define PICT_FRAME 3
00630
00631 int intra_dc_precision;
00632 int frame_pred_frame_dct;
00633 int top_field_first;
00634 int concealment_motion_vectors;
00635 int q_scale_type;
00636 int intra_vlc_format;
00637 int alternate_scan;
00638 int repeat_first_field;
00639 int chroma_420_type;
00640 int chroma_format;
00641 #define CHROMA_420 1
00642 #define CHROMA_422 2
00643 #define CHROMA_444 3
00644 int chroma_x_shift;
00645 int chroma_y_shift;
00646
00647 int progressive_frame;
00648 int full_pel[2];
00649 int interlaced_dct;
00650 int first_slice;
00651 int first_field;
00652
00653
00654 int rtp_mode;
00655
00656 uint8_t *ptr_lastgob;
00657 int swap_uv;
00658 short * pblocks[12];
00659
00660 DCTELEM (*block)[64];
00661 DCTELEM (*blocks)[8][64];
00662
00663 #define ATSC_CC_BUF_SIZE 1024
00666 uint8_t tmp_atsc_cc_buf[ATSC_CC_BUF_SIZE];
00667 int tmp_atsc_cc_len;
00668
00669 #define DVB_CC_BUF_SIZE 128
00672 uint8_t tmp_dvb_cc_buf[DVB_CC_BUF_SIZE];
00673 int tmp_dvb_cc_len;
00674
00675 int (*decode_mb)(struct MpegEncContext *s, DCTELEM block[6][64]);
00676 #define SLICE_OK 0
00677 #define SLICE_ERROR -1
00678 #define SLICE_END -2
00679 #define SLICE_NOEND -3
00680
00681 void (*dct_unquantize_mpeg1_intra)(struct MpegEncContext *s,
00682 DCTELEM *block, int n, int qscale);
00683 void (*dct_unquantize_mpeg1_inter)(struct MpegEncContext *s,
00684 DCTELEM *block, int n, int qscale);
00685 void (*dct_unquantize_mpeg2_intra)(struct MpegEncContext *s,
00686 DCTELEM *block, int n, int qscale);
00687 void (*dct_unquantize_mpeg2_inter)(struct MpegEncContext *s,
00688 DCTELEM *block, int n, int qscale);
00689 void (*dct_unquantize_h263_intra)(struct MpegEncContext *s,
00690 DCTELEM *block, int n, int qscale);
00691 void (*dct_unquantize_h263_inter)(struct MpegEncContext *s,
00692 DCTELEM *block, int n, int qscale);
00693 void (*dct_unquantize_h261_intra)(struct MpegEncContext *s,
00694 DCTELEM *block, int n, int qscale);
00695 void (*dct_unquantize_h261_inter)(struct MpegEncContext *s,
00696 DCTELEM *block, int n, int qscale);
00697 void (*dct_unquantize_intra)(struct MpegEncContext *s,
00698 DCTELEM *block, int n, int qscale);
00699 void (*dct_unquantize_inter)(struct MpegEncContext *s,
00700 DCTELEM *block, int n, int qscale);
00701 int (*dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
00702 int (*fast_dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
00703 void (*denoise_dct)(struct MpegEncContext *s, DCTELEM *block);
00704 } MpegEncContext;
00705
00706
00707 void MPV_decode_defaults(MpegEncContext *s);
00708 int MPV_common_init(MpegEncContext *s);
00709 void MPV_common_end(MpegEncContext *s);
00710 void MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]);
00711 int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx);
00712 void MPV_frame_end(MpegEncContext *s);
00713 int MPV_encode_init(AVCodecContext *avctx);
00714 int MPV_encode_end(AVCodecContext *avctx);
00715 int MPV_encode_picture(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data);
00716 void MPV_common_init_mmx(MpegEncContext *s);
00717 void MPV_common_init_axp(MpegEncContext *s);
00718 void MPV_common_init_mlib(MpegEncContext *s);
00719 void MPV_common_init_mmi(MpegEncContext *s);
00720 void MPV_common_init_armv4l(MpegEncContext *s);
00721 void MPV_common_init_altivec(MpegEncContext *s);
00722 extern void (*draw_edges)(uint8_t *buf, int wrap, int width, int height, int w);
00723 void ff_clean_intra_table_entries(MpegEncContext *s);
00724 void ff_init_scantable(uint8_t *, ScanTable *st, const uint8_t *src_scantable);
00725 void ff_draw_horiz_band(MpegEncContext *s, int y, int h);
00726 void ff_emulated_edge_mc(uint8_t *buf, uint8_t *src, int linesize, int block_w, int block_h,
00727 int src_x, int src_y, int w, int h);
00728 void ff_mpeg_flush(AVCodecContext *avctx);
00729 void ff_print_debug_info(MpegEncContext *s, AVFrame *pict);
00730 void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
00731 int ff_find_unused_picture(MpegEncContext *s, int shared);
00732 void ff_denoise_dct(MpegEncContext *s, DCTELEM *block);
00733 void ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src);
00734 const uint8_t *ff_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state);
00735
00736 void ff_er_frame_start(MpegEncContext *s);
00737 void ff_er_frame_end(MpegEncContext *s);
00738 void ff_er_add_slice(MpegEncContext *s, int startx, int starty, int endx, int endy, int status);
00739
00740 int ff_dct_common_init(MpegEncContext *s);
00741 void ff_convert_matrix(DSPContext *dsp, int (*qmat)[64], uint16_t (*qmat16)[2][64],
00742 const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra);
00743
00744 extern enum PixelFormat ff_yuv420p_list[2];
00745
00746 void ff_init_block_index(MpegEncContext *s);
00747
00748 static inline void ff_update_block_index(MpegEncContext *s){
00749 const int block_size= 8>>s->avctx->lowres;
00750
00751 s->block_index[0]+=2;
00752 s->block_index[1]+=2;
00753 s->block_index[2]+=2;
00754 s->block_index[3]+=2;
00755 s->block_index[4]++;
00756 s->block_index[5]++;
00757 s->dest[0]+= 2*block_size;
00758 s->dest[1]+= block_size;
00759 s->dest[2]+= block_size;
00760 }
00761
00762 static inline int get_bits_diff(MpegEncContext *s){
00763 const int bits= put_bits_count(&s->pb);
00764 const int last= s->last_bits;
00765
00766 s->last_bits = bits;
00767
00768 return bits - last;
00769 }
00770
00771 static inline int ff_h263_round_chroma(int x){
00772 static const uint8_t h263_chroma_roundtab[16] = {
00773
00774 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
00775 };
00776 return h263_chroma_roundtab[x & 0xf] + (x >> 3);
00777 }
00778
00779
00780 void ff_estimate_p_frame_motion(MpegEncContext * s,
00781 int mb_x, int mb_y);
00782 void ff_estimate_b_frame_motion(MpegEncContext * s,
00783 int mb_x, int mb_y);
00784 int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type);
00785 void ff_fix_long_p_mvs(MpegEncContext * s);
00786 void ff_fix_long_mvs(MpegEncContext * s, uint8_t *field_select_table, int field_select,
00787 int16_t (*mv_table)[2], int f_code, int type, int truncate);
00788 void ff_init_me(MpegEncContext *s);
00789 int ff_pre_estimate_p_frame_motion(MpegEncContext * s, int mb_x, int mb_y);
00790 inline int ff_epzs_motion_search(MpegEncContext * s, int *mx_ptr, int *my_ptr,
00791 int P[10][2], int src_index, int ref_index, int16_t (*last_mv)[2],
00792 int ref_mv_scale, int size, int h);
00793 inline int ff_get_mb_score(MpegEncContext * s, int mx, int my, int src_index,
00794 int ref_index, int size, int h, int add_rate);
00795
00796
00797 extern const uint16_t ff_mpeg1_default_intra_matrix[64];
00798 extern const uint16_t ff_mpeg1_default_non_intra_matrix[64];
00799 extern const uint8_t ff_mpeg1_dc_scale_table[128];
00800 extern const AVRational ff_frame_rate_tab[];
00801
00802 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number);
00803 void mpeg1_encode_mb(MpegEncContext *s,
00804 DCTELEM block[6][64],
00805 int motion_x, int motion_y);
00806 void ff_mpeg1_encode_init(MpegEncContext *s);
00807 void ff_mpeg1_encode_slice_header(MpegEncContext *s);
00808 void ff_mpeg1_clean_buffers(MpegEncContext *s);
00809 int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size);
00810
00811 #include "rl.h"
00812
00813 extern const uint8_t ff_mpeg4_y_dc_scale_table[32];
00814 extern const uint8_t ff_mpeg4_c_dc_scale_table[32];
00815 extern const uint8_t ff_aic_dc_scale_table[32];
00816 extern const int16_t ff_mpeg4_default_intra_matrix[64];
00817 extern const int16_t ff_mpeg4_default_non_intra_matrix[64];
00818 extern const uint8_t ff_h263_chroma_qscale_table[32];
00819 extern const uint8_t ff_h263_loop_filter_strength[32];
00820
00821
00822 void ff_h261_loop_filter(MpegEncContext *s);
00823 void ff_h261_reorder_mb_index(MpegEncContext* s);
00824 void ff_h261_encode_mb(MpegEncContext *s,
00825 DCTELEM block[6][64],
00826 int motion_x, int motion_y);
00827 void ff_h261_encode_picture_header(MpegEncContext * s, int picture_number);
00828 void ff_h261_encode_init(MpegEncContext *s);
00829 int ff_h261_get_picture_format(int width, int height);
00830
00831
00832
00833 int ff_h263_decode_init(AVCodecContext *avctx);
00834 int ff_h263_decode_frame(AVCodecContext *avctx,
00835 void *data, int *data_size,
00836 uint8_t *buf, int buf_size);
00837 int ff_h263_decode_end(AVCodecContext *avctx);
00838 void h263_encode_mb(MpegEncContext *s,
00839 DCTELEM block[6][64],
00840 int motion_x, int motion_y);
00841 void mpeg4_encode_mb(MpegEncContext *s,
00842 DCTELEM block[6][64],
00843 int motion_x, int motion_y);
00844 void h263_encode_picture_header(MpegEncContext *s, int picture_number);
00845 void ff_flv_encode_picture_header(MpegEncContext *s, int picture_number);
00846 void h263_encode_gob_header(MpegEncContext * s, int mb_line);
00847 int16_t *h263_pred_motion(MpegEncContext * s, int block, int dir,
00848 int *px, int *py);
00849 void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
00850 int dir);
00851 void ff_set_mpeg4_time(MpegEncContext * s);
00852 void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);
00853 void h263_encode_init(MpegEncContext *s);
00854 void h263_decode_init_vlc(MpegEncContext *s);
00855 int h263_decode_picture_header(MpegEncContext *s);
00856 int ff_h263_decode_gob_header(MpegEncContext *s);
00857 int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb);
00858 void ff_h263_update_motion_val(MpegEncContext * s);
00859 void ff_h263_loop_filter(MpegEncContext * s);
00860 void ff_set_qscale(MpegEncContext * s, int qscale);
00861 int ff_h263_decode_mba(MpegEncContext *s);
00862 void ff_h263_encode_mba(MpegEncContext *s);
00863
00864 int intel_h263_decode_picture_header(MpegEncContext *s);
00865 int flv_h263_decode_picture_header(MpegEncContext *s);
00866 int ff_h263_decode_mb(MpegEncContext *s,
00867 DCTELEM block[6][64]);
00868 int ff_mpeg4_decode_mb(MpegEncContext *s,
00869 DCTELEM block[6][64]);
00870 int h263_get_picture_format(int width, int height);
00871 void ff_mpeg4_encode_video_packet_header(MpegEncContext *s);
00872 void ff_mpeg4_clean_buffers(MpegEncContext *s);
00873 void ff_mpeg4_stuffing(PutBitContext * pbc);
00874 void ff_mpeg4_init_partitions(MpegEncContext *s);
00875 void ff_mpeg4_merge_partitions(MpegEncContext *s);
00876 void ff_clean_mpeg4_qscales(MpegEncContext *s);
00877 void ff_clean_h263_qscales(MpegEncContext *s);
00878 int ff_mpeg4_decode_partitions(MpegEncContext *s);
00879 int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s);
00880 int ff_h263_resync(MpegEncContext *s);
00881 int ff_h263_get_gob_height(MpegEncContext *s);
00882 void ff_mpeg4_init_direct_mv(MpegEncContext *s);
00883 int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my);
00884 void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code);
00885
00886
00887
00888 void rv10_encode_picture_header(MpegEncContext *s, int picture_number);
00889 int rv_decode_dc(MpegEncContext *s, int n);
00890 void rv20_encode_picture_header(MpegEncContext *s, int picture_number);
00891
00892
00893
00894 void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number);
00895 void msmpeg4_encode_ext_header(MpegEncContext * s);
00896 void msmpeg4_encode_mb(MpegEncContext * s,
00897 DCTELEM block[6][64],
00898 int motion_x, int motion_y);
00899 int msmpeg4_decode_picture_header(MpegEncContext * s);
00900 int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
00901 int ff_msmpeg4_decode_init(MpegEncContext *s);
00902 void ff_msmpeg4_encode_init(MpegEncContext *s);
00903 int ff_wmv2_decode_picture_header(MpegEncContext * s);
00904 int ff_wmv2_decode_secondary_picture_header(MpegEncContext * s);
00905 void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr);
00906 void ff_mspel_motion(MpegEncContext *s,
00907 uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr,
00908 uint8_t **ref_picture, op_pixels_func (*pix_op)[4],
00909 int motion_x, int motion_y, int h);
00910 int ff_wmv2_encode_picture_header(MpegEncContext * s, int picture_number);
00911 void ff_wmv2_encode_mb(MpegEncContext * s,
00912 DCTELEM block[6][64],
00913 int motion_x, int motion_y);
00914
00915 #endif
00916