📄 mpegvideo.h
字号:
int mb_num_left; /* number of MBs left in this video packet (for partitioned Slices only)*/ int next_p_frame_damaged; /* set if the next p frame is damaged, to avoid showing trashed b frames */ int error_resilience; ParseContext parse_context; /* H.263 specific */ int gob_number; int gob_index; /* H.263+ specific */ int umvplus; int umvplus_dec; int h263_aic; /* Advanded INTRA Coding (AIC) */ int h263_aic_dir; /* AIC direction: 0 = left, 1 = top */ /* mpeg4 specific */ int time_increment_resolution; int time_increment_bits; /* number of bits to represent the fractional part of time */ int last_time_base; int time_base; /* time in seconds of last I,P,S Frame */ INT64 time; /* time of current frame */ INT64 last_non_b_time; UINT16 pp_time; /* time distance between the last 2 p,s,i frames */ UINT16 pb_time; /* time distance between the last b and p,s,i frame */ UINT16 pp_field_time; UINT16 pb_field_time; /* like above, just for interlaced */ int shape; int vol_sprite_usage; int sprite_width; int sprite_height; int sprite_left; int sprite_top; int sprite_brightness_change; int num_sprite_warping_points; int real_sprite_warping_points; int sprite_offset[2][2]; /* sprite offset[isChroma][isMVY] */ int sprite_delta[2][2]; /* sprite_delta [isY][isMVY] */ int sprite_shift[2]; /* sprite shift [isChroma] */ int mcsel; int quant_precision; int quarter_sample; /* 1->qpel, 0->half pel ME/MC */ int scalability; int hierachy_type; int enhancement_type; int new_pred; int reduced_res_vop; int aspect_ratio_info; int aspected_width; int aspected_height; int sprite_warping_accuracy; int low_latency_sprite; int data_partitioning; /* data partitioning flag from header */ int partitioned_frame; /* is current frame partitioned */ int rvlc; /* reversible vlc */ int resync_marker; /* could this stream contain resync markers*/ int low_delay; /* no reordering needed / has no b-frames */ int vo_type; int vol_control_parameters; /* does the stream contain the low_delay flag, used to workaround buggy encoders */ PutBitContext tex_pb; /* used for data partitioned VOPs */ PutBitContext pb2; /* used for data partitioned VOPs */#define PB_BUFFER_SIZE 1024*256 uint8_t *tex_pb_buffer; uint8_t *pb2_buffer; int mpeg_quant;#define CO_LOCATED_TYPE_4MV 1#define CO_LOCATED_TYPE_FIELDMV 2 INT8 *co_located_type_table; /* 4mv & field_mv info for next b frame */ INT16 (*field_mv_table)[2][2]; /* used for interlaced b frame decoding */ INT8 (*field_select_table)[2]; /* wtf, no really another table for interlaced b frames */ int t_frame; /* time distance of first I -> B, used for interlaced b frames */ int padding_bug_score; /* used to detect the VERY common padding bug in MPEG4 */ /* divx specific, used to workaround (many) bugs in divx5 */ int divx_version; int divx_build;#define BITSTREAM_BUFFER_SIZE 1024*256 UINT8 *bitstream_buffer; //Divx 5.01 puts several frames in a single one, this is used to reorder them int bitstream_buffer_size; int xvid_build; /* lavc specific stuff, used to workaround bugs in libavcodec */ int ffmpeg_version; int lavc_build; /* RV10 specific */ int rv10_version; /* RV10 version: 0 or 3 */ int rv10_first_dc_coded[3]; /* MJPEG specific */ struct MJpegContext *mjpeg_ctx; int mjpeg_vsample[3]; /* vertical sampling factors, default = {2, 1, 1} */ int mjpeg_hsample[3]; /* horizontal sampling factors, default = {2, 1, 1} */ int mjpeg_write_tables; /* do we want to have quantisation- and huffmantables in the jpeg file ? */ int mjpeg_data_only_frames; /* frames only with SOI, SOS and EOI markers */ /* MSMPEG4 specific */ int mv_table_index; int rl_table_index; int rl_chroma_table_index; int dc_table_index; int use_skip_mb_code; int slice_height; /* in macroblocks */ int first_slice_line; /* used in mpeg4 too to handle resync markers */ int flipflop_rounding; int msmpeg4_version; /* 0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 4=wmv1/7 5=wmv2/8*/ int per_mb_rl_table; int esc3_level_length; int esc3_run_length; /* [mb_intra][isChroma][level][run][last] */ int (*ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2]; int inter_intra_pred; /* decompression specific */ GetBitContext gb; /* MPEG2 specific - I wish I had not to support this mess. */ int progressive_sequence; int mpeg_f_code[2][2]; int picture_structure;/* picture type */#define PICT_TOP_FIELD 1#define PICT_BOTTOM_FIELD 2#define PICT_FRAME 3 int intra_dc_precision; int frame_pred_frame_dct; int top_field_first; int concealment_motion_vectors; int q_scale_type; int intra_vlc_format; int alternate_scan; int repeat_first_field; int chroma_420_type; int progressive_frame; int mpeg2; int full_pel[2]; int interlaced_dct; int last_qscale; int first_slice; /* RTP specific */ /* These are explained on avcodec.h */ int rtp_mode; int rtp_payload_size; void (*rtp_callback)(void *data, int size, int packet_number); UINT8 *ptr_lastgob; UINT8 *ptr_last_mb_line; UINT32 mb_line_avgsize; DCTELEM (*block)[64]; /* points to one of the following blocks */ DCTELEM blocks[2][6][64] __align8; // for HQ mode we need to keep the best block int (*decode_mb)(struct MpegEncContext *s, DCTELEM block[6][64]); // used by some codecs to avoid a switch()#define SLICE_OK 0#define SLICE_ERROR -1#define SLICE_END -2 //end marker found#define SLICE_NOEND -3 //no end marker or error found but mb count exceeded void (*dct_unquantize_mpeg1)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale); void (*dct_unquantize_mpeg2)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale); void (*dct_unquantize_h263)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale); void (*dct_unquantize)(struct MpegEncContext *s, // unquantizer to use (mpeg4 can use both) DCTELEM *block, int n, int qscale); int (*dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow); void (*fdct)(DCTELEM *block/* align 16*/); void (*idct_put)(UINT8 *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/); void (*idct_add)(UINT8 *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/);} MpegEncContext;int DCT_common_init(MpegEncContext *s);int MPV_common_init(MpegEncContext *s);void MPV_common_end(MpegEncContext *s);void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx);void MPV_frame_end(MpegEncContext *s);#ifdef HAVE_MMXvoid MPV_common_init_mmx(MpegEncContext *s);#endif#ifdef ARCH_ALPHAvoid MPV_common_init_axp(MpegEncContext *s);#endif#ifdef HAVE_MLIBvoid MPV_common_init_mlib(MpegEncContext *s);#endif#ifdef HAVE_MMIvoid MPV_common_init_mmi(MpegEncContext *s);#endif#ifdef ARCH_ARMV4Lvoid MPV_common_init_armv4l(MpegEncContext *s);#endif#ifdef ARCH_POWERPCvoid MPV_common_init_ppc(MpegEncContext *s);#endifextern void (*draw_edges)(UINT8 *buf, int wrap, int width, int height, int w);void ff_conceal_past_errors(MpegEncContext *s, int conceal_all);void ff_copy_bits(PutBitContext *pb, UINT8 *src, int length);void ff_clean_intra_table_entries(MpegEncContext *s);void ff_init_scantable(MpegEncContext *s, ScanTable *st, const UINT8 *src_scantable);void ff_error_resilience(MpegEncContext *s);void ff_draw_horiz_band(MpegEncContext *s);extern int ff_bit_exact;static inline void ff_init_block_index(MpegEncContext *s){ s->block_index[0]= s->block_wrap[0]*(s->mb_y*2 + 1) - 1 + s->mb_x*2; s->block_index[1]= s->block_wrap[0]*(s->mb_y*2 + 1) + s->mb_x*2; s->block_index[2]= s->block_wrap[0]*(s->mb_y*2 + 2) - 1 + s->mb_x*2; s->block_index[3]= s->block_wrap[0]*(s->mb_y*2 + 2) + s->mb_x*2; s->block_index[4]= s->block_wrap[4]*(s->mb_y + 1) + s->block_wrap[0]*(s->mb_height*2 + 2) + s->mb_x; s->block_index[5]= s->block_wrap[4]*(s->mb_y + 1 + s->mb_height + 2) + s->block_wrap[0]*(s->mb_height*2 + 2) + s->mb_x;}static inline void ff_update_block_index(MpegEncContext *s){ s->block_index[0]+=2; s->block_index[1]+=2; s->block_index[2]+=2; s->block_index[3]+=2; s->block_index[4]++; s->block_index[5]++;}/* motion_est.c */void ff_estimate_p_frame_motion(MpegEncContext * s, int mb_x, int mb_y);void ff_estimate_b_frame_motion(MpegEncContext * s, int mb_x, int mb_y);int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type);void ff_fix_long_p_mvs(MpegEncContext * s);void ff_fix_long_b_mvs(MpegEncContext * s, int16_t (*mv_table)[2], int f_code, int type);/* mpeg12.c */extern const INT16 ff_mpeg1_default_intra_matrix[64];extern const INT16 ff_mpeg1_default_non_intra_matrix[64];extern UINT8 ff_mpeg1_dc_scale_table[128];void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number);void mpeg1_encode_mb(MpegEncContext *s, DCTELEM block[6][64], int motion_x, int motion_y);void ff_mpeg1_encode_init(MpegEncContext *s);/* h263enc.c */typedef struct RLTable { int n; /* number of entries of table_vlc minus 1 */ int last; /* number of values for last = 0 */ const UINT16 (*table_vlc)[2]; const INT8 *table_run; const INT8 *table_level; UINT8 *index_run[2]; /* encoding only */ INT8 *max_level[2]; /* encoding & decoding */ INT8 *max_run[2]; /* encoding & decoding */ VLC vlc; /* decoding only deprected FIXME remove*/ RL_VLC_ELEM *rl_vlc[32]; /* decoding only */} RLTable;void init_rl(RLTable *rl);void init_vlc_rl(RLTable *rl);static inline int get_rl_index(const RLTable *rl, int last, int run, int level){ int index; index = rl->index_run[last][run]; if (index >= rl->n) return rl->n; if (level > rl->max_level[last][run]) return rl->n; return index + level - 1;}extern UINT8 ff_mpeg4_y_dc_scale_table[32];extern UINT8 ff_mpeg4_c_dc_scale_table[32];extern const INT16 ff_mpeg4_default_intra_matrix[64];extern const INT16 ff_mpeg4_default_non_intra_matrix[64];void h263_encode_mb(MpegEncContext *s, DCTELEM block[6][64], int motion_x, int motion_y);void mpeg4_encode_mb(MpegEncContext *s, DCTELEM block[6][64], int motion_x, int motion_y);void h263_encode_picture_header(MpegEncContext *s, int picture_number);int h263_encode_gob_header(MpegEncContext * s, int mb_line);INT16 *h263_pred_motion(MpegEncContext * s, int block, int *px, int *py);void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n, int dir);void ff_set_mpeg4_time(MpegEncContext * s, int picture_number);void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);void h263_encode_init(MpegEncContext *s);void h263_decode_init_vlc(MpegEncContext *s);int h263_decode_picture_header(MpegEncContext *s);int ff_h263_decode_gob_header(MpegEncContext *s);int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb);int intel_h263_decode_picture_header(MpegEncContext *s);int ff_h263_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);int h263_get_picture_format(int width, int height);void ff_mpeg4_encode_video_packet_header(MpegEncContext *s);void ff_mpeg4_clean_buffers(MpegEncContext *s);void ff_mpeg4_stuffing(PutBitContext * pbc);void ff_mpeg4_init_partitions(MpegEncContext *s);void ff_mpeg4_merge_partitions(MpegEncContext *s);void ff_clean_mpeg4_qscales(MpegEncContext *s);void ff_clean_h263_qscales(MpegEncContext *s);int ff_mpeg4_decode_partitions(MpegEncContext *s);int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s);int ff_h263_resync(MpegEncContext *s);int ff_h263_get_gob_height(MpegEncContext *s);/* rv10.c */void rv10_encode_picture_header(MpegEncContext *s, int picture_number);int rv_decode_dc(MpegEncContext *s, int n);/* msmpeg4.c */void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number);void msmpeg4_encode_ext_header(MpegEncContext * s);void msmpeg4_encode_mb(MpegEncContext * s, DCTELEM block[6][64], int motion_x, int motion_y);int msmpeg4_decode_picture_header(MpegEncContext * s);int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);int ff_msmpeg4_decode_init(MpegEncContext *s);void ff_msmpeg4_encode_init(MpegEncContext *s);/* mjpegenc.c */int mjpeg_init(MpegEncContext *s);void mjpeg_close(MpegEncContext *s);void mjpeg_encode_mb(MpegEncContext *s, DCTELEM block[6][64]);void mjpeg_picture_header(MpegEncContext *s);void mjpeg_picture_trailer(MpegEncContext *s);/* rate control */int ff_rate_control_init(MpegEncContext *s);float ff_rate_estimate_qscale(MpegEncContext *s);void ff_write_pass1_stats(MpegEncContext *s);void ff_rate_control_uninit(MpegEncContext *s);double ff_eval(char *s, double *const_value, char **const_name, double (**func1)(void *, double), char **func1_name, double (**func2)(void *, double, double), char **func2_name, void *opaque);#endif /* AVCODEC_MPEGVIDEO_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -