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 there is 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][16];
00146 int ref_count[2];
00147
00148 int mb_var_sum;
00149 int mc_mb_var_sum;
00150 uint16_t *mb_var;
00151 uint16_t *mc_mb_var;
00152 uint8_t *mb_mean;
00153 int32_t *mb_cmp_score;
00154 int b_frame_score;
00155 } Picture;
00156
00157 struct MpegEncContext;
00158
00162 typedef struct MotionEstContext{
00163 AVCodecContext *avctx;
00164 int skip;
00165 int co_located_mv[4][2];
00166 int direct_basis_mv[4][2];
00167 uint8_t *scratchpad;
00168 uint8_t *best_mb;
00169 uint8_t *temp_mb[2];
00170 uint8_t *temp;
00171 int best_bits;
00172 uint32_t *map;
00173 uint32_t *score_map;
00174 int map_generation;
00175 int pre_penalty_factor;
00176 int penalty_factor;
00181 int sub_penalty_factor;
00182 int mb_penalty_factor;
00183 int flags;
00184 int sub_flags;
00185 int mb_flags;
00186 int pre_pass;
00187 int dia_size;
00188 int xmin;
00189 int xmax;
00190 int ymin;
00191 int ymax;
00192 int pred_x;
00193 int pred_y;
00194 uint8_t *src[4][4];
00195 uint8_t *ref[4][4];
00196 int stride;
00197 int uvstride;
00198
00199 int mc_mb_var_sum_temp;
00200 int mb_var_sum_temp;
00201 int scene_change_score;
00202
00203 op_pixels_func (*hpel_put)[4];
00204 op_pixels_func (*hpel_avg)[4];
00205 qpel_mc_func (*qpel_put)[16];
00206 qpel_mc_func (*qpel_avg)[16];
00207 uint8_t (*mv_penalty)[MAX_MV*2+1];
00208 uint8_t *current_mv_penalty;
00209 int (*sub_motion_search)(struct MpegEncContext * s,
00210 int *mx_ptr, int *my_ptr, int dmin,
00211 int src_index, int ref_index,
00212 int size, int h);
00213 }MotionEstContext;
00214
00218 typedef struct MpegEncContext {
00219 struct AVCodecContext *avctx;
00220
00221 int width, height;
00222 int gop_size;
00223 int intra_only;
00224 int bit_rate;
00225 enum OutputFormat out_format;
00226 int h263_pred;
00227
00228
00229 int h263_plus;
00230 int h263_msmpeg4;
00231 int h263_flv;
00232
00233 enum CodecID codec_id;
00234 int fixed_qscale;
00235 int encoding;
00236 int flags;
00237 int flags2;
00238 int max_b_frames;
00239 int luma_elim_threshold;
00240 int chroma_elim_threshold;
00241 int strict_std_compliance;
00242 int workaround_bugs;
00243 int codec_tag;
00244 int stream_codec_tag;
00245
00246
00248 PutBitContext pb;
00249
00250
00251 int context_initialized;
00252 int input_picture_number;
00253 int coded_picture_number;
00254 int picture_number;
00255 int picture_in_gop_number;
00256 int b_frames_since_non_b;
00257 int64_t user_specified_pts;
00258 int mb_width, mb_height;
00259 int mb_stride;
00260 int b8_stride;
00261 int b4_stride;
00262 int h_edge_pos, v_edge_pos;
00263 int mb_num;
00264 int linesize;
00265 int uvlinesize;
00266 Picture *picture;
00267 Picture **input_picture;
00268 Picture **reordered_input_picture;
00269
00270 int start_mb_y;
00271 int end_mb_y;
00272 struct MpegEncContext *thread_context[MAX_THREADS];
00273
00278 Picture last_picture;
00279
00284 Picture next_picture;
00285
00290 Picture new_picture;
00291
00296 Picture current_picture;
00297
00298 Picture *last_picture_ptr;
00299 Picture *next_picture_ptr;
00300 Picture *current_picture_ptr;
00301 uint8_t *visualization_buffer[3];
00302 int last_dc[3];
00303 int16_t *dc_val_base;
00304 int16_t *dc_val[3];
00305 int16_t dc_cache[4*5];
00306 int y_dc_scale, c_dc_scale;
00307 const uint8_t *y_dc_scale_table;
00308 const uint8_t *c_dc_scale_table;
00309 const uint8_t *chroma_qscale_table;
00310 uint8_t *coded_block_base;
00311 uint8_t *coded_block;
00312 int16_t (*ac_val_base)[16];
00313 int16_t (*ac_val[3])[16];
00314 int ac_pred;
00315 uint8_t *prev_pict_types;
00316 #define PREV_PICT_TYPES_BUFFER_SIZE 256
00317 int mb_skipped;
00318 uint8_t *mbskip_table;
00320 uint8_t *mbintra_table;
00321 uint8_t *cbp_table;
00322 uint8_t *pred_dir_table;
00323 uint8_t *allocated_edge_emu_buffer;
00324 uint8_t *edge_emu_buffer;
00325 uint8_t *rd_scratchpad;
00326 uint8_t *obmc_scratchpad;
00327 uint8_t *b_scratchpad;
00328
00329 int qscale;
00330 int chroma_qscale;
00331 unsigned int lambda;
00332 unsigned int lambda2;
00333 int *lambda_table;
00334 int adaptive_quant;
00335 int dquant;
00336 int pict_type;
00337 int last_pict_type;
00338 int last_non_b_pict_type;
00339 int dropable;
00340 int frame_rate_index;
00341 int last_lambda_for[5];
00342 int skipdct;
00343
00344
00345 int unrestricted_mv;
00346 int h263_long_vectors;
00347 int decode;
00348
00349 DSPContext dsp;
00350 int f_code;
00351 int b_code;
00352 int16_t (*p_mv_table_base)[2];
00353 int16_t (*b_forw_mv_table_base)[2];
00354 int16_t (*b_back_mv_table_base)[2];
00355 int16_t (*b_bidir_forw_mv_table_base)[2];
00356 int16_t (*b_bidir_back_mv_table_base)[2];
00357 int16_t (*b_direct_mv_table_base)[2];
00358 int16_t (*p_field_mv_table_base[2][2])[2];
00359 int16_t (*b_field_mv_table_base[2][2][2])[2];
00360 int16_t (*p_mv_table)[2];
00361 int16_t (*b_forw_mv_table)[2];
00362 int16_t (*b_back_mv_table)[2];
00363 int16_t (*b_bidir_forw_mv_table)[2];
00364 int16_t (*b_bidir_back_mv_table)[2];
00365 int16_t (*b_direct_mv_table)[2];
00366 int16_t (*p_field_mv_table[2][2])[2];
00367 int16_t (*b_field_mv_table[2][2][2])[2];
00368 uint8_t (*p_field_select_table[2]);
00369 uint8_t (*b_field_select_table[2][2]);
00370 int me_method;
00371 int mv_dir;
00372 #define MV_DIR_FORWARD 1
00373 #define MV_DIR_BACKWARD 2
00374 #define MV_DIRECT 4
00375 int mv_type;
00376 #define MV_TYPE_16X16 0
00377 #define MV_TYPE_8X8 1
00378 #define MV_TYPE_16X8 2
00379 #define MV_TYPE_FIELD 3
00380 #define MV_TYPE_DMV 4
00381
00386 int mv[2][4][2];
00387 int field_select[2][2];
00388 int last_mv[2][2][2];
00389 uint8_t *fcode_tab;
00390 int16_t direct_scale_mv[2][64];
00391
00392 MotionEstContext me;
00393
00394 int no_rounding;
00397 int hurry_up;
00400
00401 int mb_x, mb_y;
00402 int mb_skip_run;
00403 int mb_intra;
00404 uint16_t *mb_type;
00405 #define CANDIDATE_MB_TYPE_INTRA 0x01
00406 #define CANDIDATE_MB_TYPE_INTER 0x02
00407 #define CANDIDATE_MB_TYPE_INTER4V 0x04
00408 #define CANDIDATE_MB_TYPE_SKIPPED 0x08
00409
00410
00411 #define CANDIDATE_MB_TYPE_DIRECT 0x10
00412 #define CANDIDATE_MB_TYPE_FORWARD 0x20
00413 #define CANDIDATE_MB_TYPE_BACKWARD 0x40
00414 #define CANDIDATE_MB_TYPE_BIDIR 0x80
00415
00416 #define CANDIDATE_MB_TYPE_INTER_I 0x100
00417 #define CANDIDATE_MB_TYPE_FORWARD_I 0x200
00418 #define CANDIDATE_MB_TYPE_BACKWARD_I 0x400
00419 #define CANDIDATE_MB_TYPE_BIDIR_I 0x800
00420
00421 #define CANDIDATE_MB_TYPE_DIRECT0 0x1000
00422
00423 int block_index[6];
00424 int block_wrap[6];
00425 uint8_t *dest[3];
00426
00427 int *mb_index2xy;
00428
00430 uint16_t intra_matrix[64];
00431 uint16_t chroma_intra_matrix[64];
00432 uint16_t inter_matrix[64];
00433 uint16_t chroma_inter_matrix[64];
00434 #define QUANT_BIAS_SHIFT 8
00435 int intra_quant_bias;
00436 int inter_quant_bias;
00437 int min_qcoeff;
00438 int max_qcoeff;
00439 int ac_esc_length;
00440 uint8_t *intra_ac_vlc_length;
00441 uint8_t *intra_ac_vlc_last_length;
00442 uint8_t *inter_ac_vlc_length;
00443 uint8_t *inter_ac_vlc_last_length;
00444 uint8_t *luma_dc_vlc_length;
00445 uint8_t *chroma_dc_vlc_length;
00446 #define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
00447
00448 int coded_score[8];
00449
00451 int (*q_intra_matrix)[64];
00452 int (*q_inter_matrix)[64];
00454 uint16_t (*q_intra_matrix16)[2][64];
00455 uint16_t (*q_inter_matrix16)[2][64];
00456 int block_last_index[12];
00457
00458 DECLARE_ALIGNED_8(ScanTable, intra_scantable);
00459 ScanTable intra_h_scantable;
00460 ScanTable intra_v_scantable;
00461 ScanTable inter_scantable;
00462
00463
00464 int (*dct_error_sum)[64];
00465 int dct_count[2];
00466 uint16_t (*dct_offset)[64];
00467
00468 void *opaque;
00469
00470
00471 int64_t wanted_bits;
00472 int64_t total_bits;
00473 int frame_bits;
00474 int next_lambda;
00475 RateControlContext rc_context;
00476
00477
00478 int mv_bits;
00479 int header_bits;
00480 int i_tex_bits;
00481 int p_tex_bits;
00482 int i_count;
00483 int f_count;
00484 int b_count;
00485 int skip_count;
00486 int misc_bits;
00487 int last_bits;
00488
00489
00490 int error_count;
00491 uint8_t *error_status_table;
00492 #define VP_START 1
00493 #define AC_ERROR 2
00494 #define DC_ERROR 4
00495 #define MV_ERROR 8
00496 #define AC_END 16
00497 #define DC_END 32
00498 #define MV_END 64
00499
00500
00501 int resync_mb_x;
00502 int resync_mb_y;
00503 GetBitContext last_resync_gb;
00504 int mb_num_left;
00505 int next_p_frame_damaged;
00506 int error_resilience;
00507
00508 ParseContext parse_context;
00509
00510
00511 int gob_index;
00512 int obmc;
00513
00514
00515 int umvplus;
00516 int h263_aic;
00517 int h263_aic_dir;
00518 int h263_slice_structured;
00519 int alt_inter_vlc;
00520 int modified_quant;
00521 int loop_filter;
00522 int custom_pcf;
00523
00524
00525 int time_increment_bits;
00526 int last_time_base;
00527 int time_base;
00528 int64_t time;
00529 int64_t last_non_b_time;
00530 uint16_t pp_time;
00531 uint16_t pb_time;
00532 uint16_t pp_field_time;
00533 uint16_t pb_field_time;
00534 int shape;
00535 int vol_sprite_usage;
00536 int sprite_width;
00537 int sprite_height;
00538 int sprite_left;
00539 int sprite_top;
00540 int sprite_brightness_change;
00541 int num_sprite_warping_points;
00542 int real_sprite_warping_points;
00543 int sprite_offset[2][2];
00544 int sprite_delta[2][2];
00545 int sprite_shift[2];
00546 int mcsel;
00547 int quant_precision;
00548 int quarter_sample;
00549 int scalability;
00550 int hierachy_type;
00551 int enhancement_type;
00552 int new_pred;
00553 int reduced_res_vop;
00554 int aspect_ratio_info;
00555 int sprite_warping_accuracy;
00556 int low_latency_sprite;
00557 int data_partitioning;
00558 int partitioned_frame;
00559 int rvlc;
00560 int resync_marker;
00561 int low_delay;
00562 int vo_type;
00563 int vol_control_parameters;
00564 int intra_dc_threshold;
00565 int use_intra_dc_vlc;
00566 PutBitContext tex_pb;
00567 PutBitContext pb2;
00568 int mpeg_quant;
00569 int t_frame;
00570 int padding_bug_score;
00571
00572
00573 int divx_version;
00574 int divx_build;
00575 int divx_packed;
00576 uint8_t *bitstream_buffer;
00577 int bitstream_buffer_size;
00578 unsigned int allocated_bitstream_buffer_size;
00579
00580 int xvid_build;
00581
00582
00583 int lavc_build;
00584
00585
00586 int rv10_version;
00587 int rv10_first_dc_coded[3];
00588
00589
00590 struct MJpegContext *mjpeg_ctx;
00591 int mjpeg_vsample[3];
00592 int mjpeg_hsample[3];
00593
00594
00595 int mv_table_index;
00596 int rl_table_index;
00597 int rl_chroma_table_index;
00598 int dc_table_index;
00599 int use_skip_mb_code;
00600 int slice_height;
00601 int first_slice_line;
00602 int flipflop_rounding;
00603 int msmpeg4_version;
00604 int per_mb_rl_table;
00605 int esc3_level_length;
00606 int esc3_run_length;
00608 int (*ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2];
00609 int inter_intra_pred;
00610 int mspel;
00611
00612
00613 GetBitContext gb;
00614
00615
00616 int gop_picture_number;
00617 int last_mv_dir;
00618 int broken_link;
00619 uint8_t *vbv_delay_ptr;
00620
00621
00622 int progressive_sequence;
00623 int mpeg_f_code[2][2];
00624 int picture_structure;
00625
00626 #define PICT_TOP_FIELD 1
00627 #define PICT_BOTTOM_FIELD 2
00628 #define PICT_FRAME 3
00629
00630 int intra_dc_precision;
00631 int frame_pred_frame_dct;
00632 int top_field_first;
00633 int concealment_motion_vectors;
00634 int q_scale_type;
00635 int intra_vlc_format;
00636 int alternate_scan;
00637 int repeat_first_field;
00638 int chroma_420_type;
00639 int chroma_format;
00640 #define CHROMA_420 1
00641 #define CHROMA_422 2
00642 #define CHROMA_444 3
00643 int chroma_x_shift;
00644 int chroma_y_shift;
00645
00646 int progressive_frame;
00647 int full_pel[2];
00648 int interlaced_dct;
00649 int first_slice;
00650 int first_field;
00651
00652
00653 int rtp_mode;
00654
00655 uint8_t *ptr_lastgob;
00656 int swap_uv;
00657 short * pblocks[12];
00658
00659 DCTELEM (*block)[64];
00660 DCTELEM (*blocks)[8][64];
00661 int (*decode_mb)(struct MpegEncContext *s, DCTELEM block[6][64]);
00662 #define SLICE_OK 0
00663 #define SLICE_ERROR -1
00664 #define SLICE_END -2
00665 #define SLICE_NOEND -3
00666
00667 void (*dct_unquantize_mpeg1_intra)(struct MpegEncContext *s,
00668 DCTELEM *block, int n, int qscale);
00669 void (*dct_unquantize_mpeg1_inter)(struct MpegEncContext *s,
00670 DCTELEM *block, int n, int qscale);
00671 void (*dct_unquantize_mpeg2_intra)(struct MpegEncContext *s,
00672 DCTELEM *block, int n, int qscale);
00673 void (*dct_unquantize_mpeg2_inter)(struct MpegEncContext *s,
00674 DCTELEM *block, int n, int qscale);
00675 void (*dct_unquantize_h263_intra)(struct MpegEncContext *s,
00676 DCTELEM *block, int n, int qscale);
00677 void (*dct_unquantize_h263_inter)(struct MpegEncContext *s,
00678 DCTELEM *block, int n, int qscale);
00679 void (*dct_unquantize_h261_intra)(struct MpegEncContext *s,
00680 DCTELEM *block, int n, int qscale);
00681 void (*dct_unquantize_h261_inter)(struct MpegEncContext *s,
00682 DCTELEM *block, int n, int qscale);
00683 void (*dct_unquantize_intra)(struct MpegEncContext *s,
00684 DCTELEM *block, int n, int qscale);
00685 void (*dct_unquantize_inter)(struct MpegEncContext *s,
00686 DCTELEM *block, int n, int qscale);
00687 int (*dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
00688 int (*fast_dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
00689 void (*denoise_dct)(struct MpegEncContext *s, DCTELEM *block);
00690 } MpegEncContext;
00691
00692
00693 void MPV_decode_defaults(MpegEncContext *s);
00694 int MPV_common_init(MpegEncContext *s);
00695 void MPV_common_end(MpegEncContext *s);
00696 void MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]);
00697 int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx);
00698 void MPV_frame_end(MpegEncContext *s);
00699 int MPV_encode_init(AVCodecContext *avctx);
00700 int MPV_encode_end(AVCodecContext *avctx);
00701 int MPV_encode_picture(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data);
00702 void MPV_common_init_mmx(MpegEncContext *s);
00703 void MPV_common_init_axp(MpegEncContext *s);
00704 void MPV_common_init_mlib(MpegEncContext *s);
00705 void MPV_common_init_mmi(MpegEncContext *s);
00706 void MPV_common_init_armv4l(MpegEncContext *s);
00707 void MPV_common_init_altivec(MpegEncContext *s);
00708 extern void (*draw_edges)(uint8_t *buf, int wrap, int width, int height, int w);
00709 void ff_clean_intra_table_entries(MpegEncContext *s);
00710 void ff_init_scantable(uint8_t *, ScanTable *st, const uint8_t *src_scantable);
00711 void ff_draw_horiz_band(MpegEncContext *s, int y, int h);
00712 void ff_emulated_edge_mc(uint8_t *buf, uint8_t *src, int linesize, int block_w, int block_h,
00713 int src_x, int src_y, int w, int h);
00714 void ff_mpeg_flush(AVCodecContext *avctx);
00715 void ff_print_debug_info(MpegEncContext *s, AVFrame *pict);
00716 void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
00717 int ff_find_unused_picture(MpegEncContext *s, int shared);
00718 void ff_denoise_dct(MpegEncContext *s, DCTELEM *block);
00719 void ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src);
00720 const uint8_t *ff_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state);
00721
00722 void ff_er_frame_start(MpegEncContext *s);
00723 void ff_er_frame_end(MpegEncContext *s);
00724 void ff_er_add_slice(MpegEncContext *s, int startx, int starty, int endx, int endy, int status);
00725
00726 int ff_dct_common_init(MpegEncContext *s);
00727 void ff_convert_matrix(DSPContext *dsp, int (*qmat)[64], uint16_t (*qmat16)[2][64],
00728 const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra);
00729
00730 void ff_init_block_index(MpegEncContext *s);
00731
00732 static inline void ff_update_block_index(MpegEncContext *s){
00733 const int block_size= 8>>s->avctx->lowres;
00734
00735 s->block_index[0]+=2;
00736 s->block_index[1]+=2;
00737 s->block_index[2]+=2;
00738 s->block_index[3]+=2;
00739 s->block_index[4]++;
00740 s->block_index[5]++;
00741 s->dest[0]+= 2*block_size;
00742 s->dest[1]+= block_size;
00743 s->dest[2]+= block_size;
00744 }
00745
00746 static inline int get_bits_diff(MpegEncContext *s){
00747 const int bits= put_bits_count(&s->pb);
00748 const int last= s->last_bits;
00749
00750 s->last_bits = bits;
00751
00752 return bits - last;
00753 }
00754
00755 static inline int ff_h263_round_chroma(int x){
00756 static const uint8_t h263_chroma_roundtab[16] = {
00757
00758 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
00759 };
00760 return h263_chroma_roundtab[x & 0xf] + (x >> 3);
00761 }
00762
00763
00764 void ff_estimate_p_frame_motion(MpegEncContext * s,
00765 int mb_x, int mb_y);
00766 void ff_estimate_b_frame_motion(MpegEncContext * s,
00767 int mb_x, int mb_y);
00768 int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type);
00769 void ff_fix_long_p_mvs(MpegEncContext * s);
00770 void ff_fix_long_mvs(MpegEncContext * s, uint8_t *field_select_table, int field_select,
00771 int16_t (*mv_table)[2], int f_code, int type, int truncate);
00772 void ff_init_me(MpegEncContext *s);
00773 int ff_pre_estimate_p_frame_motion(MpegEncContext * s, int mb_x, int mb_y);
00774 int ff_epzs_motion_search(MpegEncContext * s, int *mx_ptr, int *my_ptr,
00775 int P[10][2], int src_index, int ref_index, int16_t (*last_mv)[2],
00776 int ref_mv_scale, int size, int h);
00777 int ff_get_mb_score(MpegEncContext * s, int mx, int my, int src_index,
00778 int ref_index, int size, int h, int add_rate);
00779
00780
00781 extern const uint16_t ff_mpeg1_default_intra_matrix[64];
00782 extern const uint16_t ff_mpeg1_default_non_intra_matrix[64];
00783 extern const uint8_t ff_mpeg1_dc_scale_table[128];
00784 extern const AVRational ff_frame_rate_tab[];
00785
00786 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number);
00787 void mpeg1_encode_mb(MpegEncContext *s,
00788 DCTELEM block[6][64],
00789 int motion_x, int motion_y);
00790 void ff_mpeg1_encode_init(MpegEncContext *s);
00791 void ff_mpeg1_encode_slice_header(MpegEncContext *s);
00792 void ff_mpeg1_clean_buffers(MpegEncContext *s);
00793 int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size);
00794
00795 #include "rl.h"
00796
00797 extern const uint8_t ff_mpeg4_y_dc_scale_table[32];
00798 extern const uint8_t ff_mpeg4_c_dc_scale_table[32];
00799 extern const uint8_t ff_aic_dc_scale_table[32];
00800 extern const int16_t ff_mpeg4_default_intra_matrix[64];
00801 extern const int16_t ff_mpeg4_default_non_intra_matrix[64];
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 int ff_h263_decode_init(AVCodecContext *avctx);
00818 int ff_h263_decode_frame(AVCodecContext *avctx,
00819 void *data, int *data_size,
00820 const uint8_t *buf, int buf_size);
00821 int ff_h263_decode_end(AVCodecContext *avctx);
00822 void h263_encode_mb(MpegEncContext *s,
00823 DCTELEM block[6][64],
00824 int motion_x, int motion_y);
00825 void mpeg4_encode_mb(MpegEncContext *s,
00826 DCTELEM block[6][64],
00827 int motion_x, int motion_y);
00828 void h263_encode_picture_header(MpegEncContext *s, int picture_number);
00829 void ff_flv_encode_picture_header(MpegEncContext *s, int picture_number);
00830 void h263_encode_gob_header(MpegEncContext * s, int mb_line);
00831 int16_t *h263_pred_motion(MpegEncContext * s, int block, int dir,
00832 int *px, int *py);
00833 void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
00834 int dir);
00835 void ff_set_mpeg4_time(MpegEncContext * s);
00836 void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);
00837 void h263_encode_init(MpegEncContext *s);
00838 void h263_decode_init_vlc(MpegEncContext *s);
00839 int h263_decode_picture_header(MpegEncContext *s);
00840 int ff_h263_decode_gob_header(MpegEncContext *s);
00841 int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb);
00842 void ff_h263_update_motion_val(MpegEncContext * s);
00843 void ff_h263_loop_filter(MpegEncContext * s);
00844 void ff_set_qscale(MpegEncContext * s, int qscale);
00845 int ff_h263_decode_mba(MpegEncContext *s);
00846 void ff_h263_encode_mba(MpegEncContext *s);
00847
00848 int intel_h263_decode_picture_header(MpegEncContext *s);
00849 int flv_h263_decode_picture_header(MpegEncContext *s);
00850 int ff_h263_decode_mb(MpegEncContext *s,
00851 DCTELEM block[6][64]);
00852 int ff_mpeg4_decode_mb(MpegEncContext *s,
00853 DCTELEM block[6][64]);
00854 int h263_get_picture_format(int width, int height);
00855 void ff_mpeg4_encode_video_packet_header(MpegEncContext *s);
00856 void ff_mpeg4_clean_buffers(MpegEncContext *s);
00857 void ff_mpeg4_stuffing(PutBitContext * pbc);
00858 void ff_mpeg4_init_partitions(MpegEncContext *s);
00859 void ff_mpeg4_merge_partitions(MpegEncContext *s);
00860 void ff_clean_mpeg4_qscales(MpegEncContext *s);
00861 void ff_clean_h263_qscales(MpegEncContext *s);
00862 int ff_mpeg4_decode_partitions(MpegEncContext *s);
00863 int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s);
00864 int ff_h263_resync(MpegEncContext *s);
00865 int ff_h263_get_gob_height(MpegEncContext *s);
00866 void ff_mpeg4_init_direct_mv(MpegEncContext *s);
00867 int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my);
00868 void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code);
00869
00870
00871
00872 void rv10_encode_picture_header(MpegEncContext *s, int picture_number);
00873 int rv_decode_dc(MpegEncContext *s, int n);
00874 void rv20_encode_picture_header(MpegEncContext *s, int picture_number);
00875
00876
00877
00878 void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number);
00879 void msmpeg4_encode_ext_header(MpegEncContext * s);
00880 void msmpeg4_encode_mb(MpegEncContext * s,
00881 DCTELEM block[6][64],
00882 int motion_x, int motion_y);
00883 int msmpeg4_decode_picture_header(MpegEncContext * s);
00884 int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
00885 int ff_msmpeg4_decode_init(MpegEncContext *s);
00886 void ff_msmpeg4_encode_init(MpegEncContext *s);
00887 int ff_wmv2_decode_picture_header(MpegEncContext * s);
00888 int ff_wmv2_decode_secondary_picture_header(MpegEncContext * s);
00889 void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr);
00890 void ff_mspel_motion(MpegEncContext *s,
00891 uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr,
00892 uint8_t **ref_picture, op_pixels_func (*pix_op)[4],
00893 int motion_x, int motion_y, int h);
00894 int ff_wmv2_encode_picture_header(MpegEncContext * s, int picture_number);
00895 void ff_wmv2_encode_mb(MpegEncContext * s,
00896 DCTELEM block[6][64],
00897 int motion_x, int motion_y);
00898
00899 #endif
00900