⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpegvideo.h

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Generic DCT based hybrid video encoder * Copyright (c) 2000, 2001, 2002 Fabrice Bellard. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#ifndef AVCODEC_MPEGVIDEO_H#define AVCODEC_MPEGVIDEO_H#define FRAME_SKIPED 100 // return value for header parsers if frame is not codedenum OutputFormat {    FMT_MPEG1,    FMT_H263,    FMT_MJPEG, };#define MPEG_BUF_SIZE (16 * 1024)#define QMAT_SHIFT_MMX 16#define QMAT_SHIFT 22#define MAX_FCODE 7#define MAX_MV 2048#define REORDER_BUFFER_SIZE (FF_MAX_B_FRAMES+2)#define ME_MAP_SIZE 64#define ME_MAP_SHIFT 3#define ME_MAP_MV_BITS 11/* run length table */#define MAX_RUN    64#define MAX_LEVEL  64typedef struct Predictor{    double coeff;    double count;    double decay;} Predictor;typedef struct RateControlEntry{    int pict_type;    float qscale;    int mv_bits;    int i_tex_bits;    int p_tex_bits;    int misc_bits;    UINT64 expected_bits;    int new_pict_type;    float new_qscale;    int mc_mb_var_sum;    int mb_var_sum;    int i_count;    int f_code;    int b_code;}RateControlEntry;typedef struct RateControlContext{    FILE *stats_file;    int num_entries;          /* number of RateControlEntries */    RateControlEntry *entry;    int buffer_index;         /* amount of bits in the video/audio buffer */    Predictor pred[5];    double short_term_qsum;   /* sum of recent qscales */    double short_term_qcount; /* count of recent qscales */    double pass1_rc_eq_output_sum;/* sum of the output of the rc equation, this is used for normalization  */    double pass1_wanted_bits; /* bits which should have been outputed by the pass1 code (including complexity init) */    double last_qscale;    double last_qscale_for[5]; /* last qscale for a specific pict type, used for max_diff & ipb factor stuff */    int last_mc_mb_var_sum;    int last_mb_var_sum;    UINT64 i_cplx_sum[5];    UINT64 p_cplx_sum[5];    UINT64 mv_bits_sum[5];    UINT64 qscale_sum[5];    int frame_count[5];    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;    UINT8 permutated[64];    UINT8 raster_end[64];#ifdef ARCH_POWERPC		/* Used by dct_quantise_alitvec to find last-non-zero */    UINT8 __align8 inverse[64];#endif} ScanTable;typedef struct ParseContext{    UINT8 *buffer;    int index;    int last_index;    int buffer_size;    int state;    int frame_start_found;} ParseContext;typedef struct MpegEncContext {    struct AVCodecContext *avctx;    /* the following parameters must be initialized before encoding */    int width, height; /* picture size. must be a multiple of 16 */    int gop_size;    int frame_rate; /* number of frames per second */    int intra_only; /* if true, only intra pictures are generated */    int bit_rate;        /* wanted bit rate */    int bit_rate_tolerance; /* amount of +- bits (>0)*/    enum OutputFormat out_format; /* output format */    int h263_pred;    /* use mpeg4/h263 ac/dc predictions *//* the following codec id fields are deprecated in favor of codec_id */    int h263_plus; /* h263 plus headers */    int h263_rv10; /* use RV10 variation for H263 */    int h263_msmpeg4; /* generate MSMPEG4 compatible stream (deprecated, use msmpeg4_version instead)*/    int h263_intel; /* use I263 intel h263 header */        int codec_id;     /* see CODEC_ID_xxx */    int fixed_qscale; /* fixed qscale if non zero */    float qcompress;  /* amount of qscale change between easy & hard scenes (0.0-1.0) */    float qblur;      /* amount of qscale smoothing over time (0.0-1.0) */    int qmin;         /* min qscale */    int qmax;         /* max qscale */    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;    int chroma_elim_threshold;    int strict_std_compliance; /* strictly follow the std (MPEG4, ...) */    int workaround_bugs;       /* workaround bugs in encoders which cannot be detected automatically */    /* the following fields are managed internally by the encoder */    /* bit output */    PutBitContext pb;    /* 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 */    int h_edge_pos, v_edge_pos;/* horizontal / vertical position of the right/bottom edge (pixel replicateion)*/    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 */    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 */    int y_dc_scale, c_dc_scale;    UINT8 *y_dc_scale_table;     /* qscale -> y_dc_scale table */    UINT8 *c_dc_scale_table;     /* qscale -> c_dc_scale table */    UINT8 *coded_block;          /* used for coded block pattern prediction (msmpeg4v3, wmv1)*/    INT16 (*ac_val[3])[16];      /* used for for mpeg4 AC prediction, all 3 arrays must be continuous */    int ac_pred;    int mb_skiped;              /* MUST BE SET only during DECODING */    UINT8 *mbskip_table;        /* used to avoid copy if macroblock skipped (for black regions for example)                                    and used for b-frame encoding & decoding (contains skip table of next P Frame) */    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 */    int adaptive_quant;         /* use adaptive quantization */    int dquant;                 /* qscale difference to prev qscale */     int pict_type;              /* I_TYPE, P_TYPE, B_TYPE, ... */    int last_pict_type;    int last_non_b_pict_type;   /* used for mpeg4 gmc b-frames & ratecontrol */    int frame_rate_index;    /* motion compensation */    int unrestricted_mv;    int h263_long_vectors; /* use horrible h263v1 long vector mode */    DSPContext dsp;             /* pointers for accelerated dsp fucntions */    int f_code; /* forward MV resolution */    int b_code; /* backward MV resolution for B Frames (mpeg4) */    INT16 (*motion_val)[2];            /* used for MV prediction (4MV per MB) */    INT16 (*p_mv_table)[2];            /* MV table (1MV per MB) p-frame encoding */    INT16 (*b_forw_mv_table)[2];       /* MV table (1MV per MB) forward mode b-frame encoding */    INT16 (*b_back_mv_table)[2];       /* MV table (1MV per MB) backward mode b-frame encoding */    INT16 (*b_bidir_forw_mv_table)[2]; /* MV table (1MV per MB) bidir mode b-frame encoding */    INT16 (*b_bidir_back_mv_table)[2]; /* MV table (1MV per MB) bidir mode b-frame encoding */    INT16 (*b_direct_forw_mv_table)[2];/* MV table (1MV per MB) direct mode b-frame encoding */    INT16 (*b_direct_back_mv_table)[2];/* MV table (1MV per MB) direct mode b-frame encoding */    INT16 (*b_direct_mv_table)[2];     /* MV table (1MV per MB) direct mode b-frame encoding */    int me_method;                     /* ME algorithm */    uint8_t *me_scratchpad;            /* data area for the me algo, so that the ME doesnt need to malloc/free */    uint32_t *me_map;                  /* map to avoid duplicate evaluations */    uint16_t *me_score_map;            /* map to store the SADs */    int me_map_generation;    int skip_me;                       /* set if ME is skiped for the current MB */    int scene_change_score;    int mv_dir;#define MV_DIR_BACKWARD  1#define MV_DIR_FORWARD   2#define MV_DIRECT        4 // bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4)    int mv_type;#define MV_TYPE_16X16       0   /* 1 vector for the whole mb */#define MV_TYPE_8X8         1   /* 4 vectors (h263, mpeg4 4MV) */#define MV_TYPE_16X8        2   /* 2 vectors, one per 16x8 block */ #define MV_TYPE_FIELD       3   /* 2 vectors, one per field */ #define MV_TYPE_DMV         4   /* 2 vectors, special mpeg2 Dual Prime Vectors */    /* motion vectors for a macroblock        first coordinate : 0 = forward 1 = backward       second "         : depend on type       third  "         : 0 = x, 1 = y    */    int mv[2][4][2];    int field_select[2][2];    int last_mv[2][2][2];             /* last MV, used for MV prediction in MPEG1 & B-frame MPEG4 */    UINT16 (*mv_penalty)[MAX_MV*2+1]; /* amount of bits needed to encode a MV, used for ME */    UINT8 *fcode_tab; /* smallest fcode needed for each MV */    int has_b_frames;    int no_rounding; /* apply no rounding to motion compensation (MPEG4, msmpeg4, ...)                         for b-frames rounding mode is allways 0 */    int hurry_up;     /* when set to 1 during decoding, b frames will be skiped                         when set to 2 idct/dequant will be skipped too */                            /* macroblock layer */    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#define MB_TYPE_INTER4V  0x04#define MB_TYPE_SKIPED   0x08#define MB_TYPE_GMC      0x10#define MB_TYPE_DIRECT   0x10#define MB_TYPE_FORWARD  0x20#define MB_TYPE_BACKWARD 0x40#define MB_TYPE_BIDIR    0x80    int block_index[6]; /* index to current MB in block based arrays with edges*/    int block_wrap[6];    /* matrix transmitted in the bitstream */    UINT16 intra_matrix[64];    UINT16 chroma_intra_matrix[64];    UINT16 inter_matrix[64];    UINT16 chroma_inter_matrix[64];#define QUANT_BIAS_SHIFT 4    int intra_quant_bias;    /* bias for the quantizer */    int inter_quant_bias;    /* bias for the quantizer */    int min_qcoeff;          /* minimum encodable coefficient */    int max_qcoeff;          /* maximum encodable coefficient */    /* precomputed matrix (combine qscale and DCT renorm) */    int __align8 q_intra_matrix[32][64];    int __align8 q_inter_matrix[32][64];    /* identical to the above but for MMX & these are not permutated */    UINT16 __align8 q_intra_matrix16[32][64];    UINT16 __align8 q_inter_matrix16[32][64];    UINT16 __align8 q_intra_matrix16_bias[32][64];    UINT16 __align8 q_inter_matrix16_bias[32][64];    int block_last_index[6];  /* last non zero coefficient in block */    /* scantables */    ScanTable __align8 intra_scantable;    ScanTable intra_h_scantable;    ScanTable intra_v_scantable;    ScanTable inter_scantable; // if inter == intra then intra should be used to reduce tha cache usage    UINT8 idct_permutation[64];    int idct_permutation_type;#define FF_NO_IDCT_PERM 1#define FF_LIBMPEG2_IDCT_PERM 2#define FF_SIMPLE_IDCT_PERM 3#define FF_TRANSPOSE_IDCT_PERM 4    void *opaque; /* private data for the user */    /* 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 */    RateControlContext rc_context; // contains stuff only accessed in ratecontrol.c    /* statistics, used for 2-pass encoding */    int mv_bits;    int header_bits;    int i_tex_bits;    int p_tex_bits;    int i_count;    int f_count;    int b_count;    int skip_count;    int misc_bits; // cbp, mb_type    int last_bits; //temp var used for calculating the above vars        /* error concealment / resync */    UINT8 *error_status_table;       /* table of the error status of each MB */ #define VP_START            1        /* current MB is the first after a resync marker */#define AC_ERROR            2#define DC_ERROR            4#define MV_ERROR            8#define AC_END              16#define DC_END              32#define MV_END              64//FIXME some prefix?        int resync_mb_x;                 /* x position of last resync marker */    int resync_mb_y;                 /* y position of last resync marker */    GetBitContext last_resync_gb;    /* used to serach for the next resync marker */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -