diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2002-12-04 10:04:03 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2002-12-04 10:04:03 +0000 |
commit | 1e491e29c27cf6a6925666e4f4eac41b65e263d7 (patch) | |
tree | 99879470b8deeb55e7d88c62729b62ac27d249ee /libavcodec/mpegvideo.h | |
parent | 855ea723b0ea450137e54674179751c14e8fc6b5 (diff) | |
download | ffmpeg-1e491e29c27cf6a6925666e4f4eac41b65e263d7.tar.gz |
cleanup
adding AVVideoFrame
moving quality, pict_type, key_frame, qscale_table, ... to AVVideoFrame
removing obsolete variables in AVCodecContext
skiping of MBs in b frames
correctly initalizing AVCodecContext
picture buffer cleanup
Originally committed as revision 1302 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/mpegvideo.h')
-rw-r--r-- | libavcodec/mpegvideo.h | 67 |
1 files changed, 26 insertions, 41 deletions
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 73092b9c11..7a0682fc5a 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -28,6 +28,8 @@ enum OutputFormat { FMT_MJPEG, }; +#define EDGE_WIDTH 16 + #define MPEG_BUF_SIZE (16 * 1024) #define QMAT_SHIFT_MMX 16 @@ -35,7 +37,8 @@ enum OutputFormat { #define MAX_FCODE 7 #define MAX_MV 2048 -#define REORDER_BUFFER_SIZE (FF_MAX_B_FRAMES+2) + +#define MAX_PICTURE_COUNT 7 #define ME_MAP_SIZE 64 #define ME_MAP_SHIFT 3 @@ -90,14 +93,6 @@ typedef struct RateControlContext{ int last_non_b_pict_type; }RateControlContext; -typedef struct ReorderBuffer{ - UINT8 *picture[3]; - int pict_type; - int qscale; - int force_type; - int picture_number; - int picture_in_gop_number; -} ReorderBuffer; typedef struct ScanTable{ const UINT8 *scantable; @@ -109,6 +104,16 @@ typedef struct ScanTable{ #endif } ScanTable; +typedef struct Picture{ + FF_COMMON_PICTURE + + int mb_var_sum; /* sum of MB variance for current frame */ + int mc_mb_var_sum; /* motion compensated MB variance for current frame */ + uint16_t *mb_var; /* Table for MB variances */ + uint16_t *mc_mb_var; /* Table for motion compensated MB variances */ + uint8_t *mb_mean; /* Table for MB luminance */ +} Picture; + typedef struct ParseContext{ UINT8 *buffer; int index; @@ -145,7 +150,6 @@ typedef struct MpegEncContext { int max_qdiff; /* max qscale difference between frames */ int encoding; /* true if we are encoding (vs decoding) */ int flags; /* AVCodecContext.flags (HQ, MV4, ...) */ - int force_input_type;/* 0= no force, otherwise I_TYPE, P_TYPE, ... */ int max_b_frames; /* max number of b-frames for encoding */ int b_frame_strategy; int luma_elim_threshold; @@ -160,10 +164,7 @@ typedef struct MpegEncContext { /* sequence parameters */ int context_initialized; int input_picture_number; - int input_picture_in_gop_number; /* 0-> first pic in gop, ... */ int picture_number; - int fake_picture_number; /* picture number at the bitstream frame rate */ - int gop_picture_number; /* index of the first picture of a GOP based on fake_pic_num & mpeg1 specific */ int picture_in_gop_number; /* 0-> first pic in gop, ... */ int b_frames_since_non_b; /* used for encoding, relative to not yet reordered input */ int mb_width, mb_height; /* number of MBs horizontally & vertically */ @@ -171,20 +172,13 @@ typedef struct MpegEncContext { int mb_num; /* number of MBs of a picture */ int linesize; /* line size, in bytes, may be different from width */ int uvlinesize; /* line size, for chroma in bytes, may be different from width */ - UINT8 *new_picture[3]; /* picture to be compressed */ - UINT8 *picture_buffer[REORDER_BUFFER_SIZE][3]; /* internal buffers used for reordering of input pictures */ - int picture_buffer_index; - ReorderBuffer coded_order[REORDER_BUFFER_SIZE]; - UINT8 *last_picture[3]; /* previous picture */ - UINT8 *last_picture_base[3]; /* real start of the picture */ - UINT8 *next_picture[3]; /* previous picture (for bidir pred) */ - UINT8 *next_picture_base[3]; /* real start of the picture */ - UINT8 *aux_picture[3]; /* aux picture (for B frames only) */ - UINT8 *aux_picture_base[3]; /* real start of the picture */ - UINT8 *current_picture[3]; /* buffer to store the decompressed current picture */ - void *last_dr_opaque; - void *next_dr_opaque; - int ip_buffer_count; /* number of buffers, currently only >2 if dr1 is used */ + Picture picture[MAX_PICTURE_COUNT]; /* main picture buffer */ + Picture *input_picture[MAX_PICTURE_COUNT]; /* next pictures on display order for encoding*/ + Picture *reordered_input_picture[MAX_PICTURE_COUNT]; /* pointer to the next pictures in codedorder for encoding*/ + Picture last_picture; /* previous picture */ + Picture next_picture; /* previous picture (for bidir pred) */ + Picture new_picture; /* source picture for encoding */ + Picture current_picture; /* buffer to store the decompressed current picture */ int num_available_buffers; /* is 0 at the start & after seeking, after the first I frame its 1 after next I/P 2 */ int last_dc[3]; /* last DC values for MPEG1 */ INT16 *dc_val[3]; /* used for mpeg4 DC prediction, all 3 arrays must be continuous */ @@ -200,17 +194,10 @@ typedef struct MpegEncContext { UINT8 *mbintra_table; /* used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding */ UINT8 *cbp_table; /* used to store cbp, ac_pred for partitioned decoding */ UINT8 *pred_dir_table; /* used to store pred_dir for partitioned decoding */ - INT8 *qscale_table; /* used to store qscale */ - INT8 *aux_qscale_table; - INT8 *next_qscale_table; - INT8 *last_qscale_table; //FIXME move these into some picture struct (MpegEncContext.aux.qscale_table[]) UINT8 *edge_emu_buffer; - int input_qscale; /* qscale prior to reordering of frames */ - int input_pict_type; /* pict_type prior to reordering of frames */ - int force_type; /* 0= no force, otherwise I_TYPE, P_TYPE, ... */ int qscale; /* QP */ - float frame_qscale; /* qscale from the frame level rc */ + float frame_qscale; /* qscale from the frame level rc FIXME remove*/ int adaptive_quant; /* use adaptive quantization */ int dquant; /* qscale difference to prev qscale */ int pict_type; /* I_TYPE, P_TYPE, B_TYPE, ... */ @@ -272,9 +259,6 @@ typedef struct MpegEncContext { int mb_x, mb_y; int mb_incr; int mb_intra; - UINT16 *mb_var; /* Table for MB variances */ - UINT16 *mc_mb_var; /* Table for motion compensated MB variances */ - UINT8 *mb_mean; /* Table for MB luminance */ UINT8 *mb_type; /* Table for MB type */ #define MB_TYPE_INTRA 0x01 #define MB_TYPE_INTER 0x02 @@ -325,8 +309,6 @@ typedef struct MpegEncContext { /* bit rate control */ int I_frame_bits; //FIXME used in mpeg12 ... - int mb_var_sum; /* sum of MB variance for current frame */ - int mc_mb_var_sum; /* motion compensated MB variance for current frame */ INT64 wanted_bits; INT64 total_bits; int frame_bits; /* bits used for the current frame */ @@ -476,6 +458,10 @@ typedef struct MpegEncContext { /* decompression specific */ GetBitContext gb; + /* Mpeg1 specific */ + int fake_picture_number; /* picture number at the bitstream frame rate */ + int gop_picture_number; /* index of the first picture of a GOP based on fake_pic_num & mpeg1 specific */ + /* MPEG2 specific - I wish I had not to support this mess. */ int progressive_sequence; int mpeg_f_code[2][2]; @@ -498,7 +484,6 @@ typedef struct MpegEncContext { int mpeg2; int full_pel[2]; int interlaced_dct; - int last_qscale; int first_slice; /* RTP specific */ |