x264中两个重要的结构体x264_param_t和cli_opt_t

来源:互联网 发布:python 支持中文 编辑:程序博客网 时间:2024/05/16 20:31

      网上对这两个结构体都有介绍,本人就不具体介绍了,下面的任务是让这两个重要的结构体登台亮相:

typedef struct{    /* CPU flags */    // cpu 标志位unsigned int cpu;    int         i_threads;  /* divide each frame into multiple slices, encode in parallel */    /* Video Properties */// 帧宽    int         i_width;// 帧高    int         i_height;    int         i_csp;  /* CSP of encoded bitstream, only i420 supported */    // levelint         i_level_idc; // 编码帧总数    int         i_frame_total; /* number of frames to encode if known, else 0 */// 这种形式不好,最好放在外面,用typedef形式// 当然,如果只有这个地方用到,也可以这样写    struct    {        /* they will be reduced to be 0 < x <= 65535 and prime */        int         i_sar_height;        int         i_sar_width;        int         i_overscan;    /* 0=undef, 1=no overscan, 2=overscan */                /* see h264 annex E for the values of the following */        int         i_vidformat;        int         b_fullrange;        int         i_colorprim;        int         i_transfer;        int         i_colmatrix;        int         i_chroma_loc;    /* both top & bottom */    } vui;    int         i_fps_num;    int         i_fps_den;    /* Bitstream parameters */// 编码端码流参数控制的参数,非常重要    int         i_frame_reference;  /* Maximum number of reference frames */    int         i_keyint_max;       /* Force an IDR keyframe at this interval */    int         i_keyint_min;       /* Scenecuts closer together than this are coded as I, not IDR. */    int         i_scenecut_threshold; /* how aggressively to insert extra I frames */    int         i_bframe;   /* how many b-frame between 2 references pictures */    int         b_bframe_adaptive;    int         i_bframe_bias;    int         b_bframe_pyramid;   /* Keep some B-frames as references */    int         b_deblocking_filter;    int         i_deblocking_filter_alphac0;    /* [-6, 6] -6 light filter, 6 strong */    int         i_deblocking_filter_beta;       /* [-6, 6]  idem */    int         b_cabac;    int         i_cabac_init_idc;    int         i_cqm_preset;    char        *psz_cqm_file;      /* JM format */    uint8_t     cqm_4iy[16];        /* used only if i_cqm_preset == X264_CQM_CUSTOM */    uint8_t     cqm_4ic[16];    uint8_t     cqm_4py[16];    uint8_t     cqm_4pc[16];    uint8_t     cqm_8iy[64];    uint8_t     cqm_8py[64];    /* Log */    void        (*pf_log)( void *, int i_level, const char *psz, va_list );    void        *p_log_private;    int         i_log_level;    int         b_visualize;    /* Encoder analyser parameters */    struct    {        unsigned int intra;     /* intra partitions */        unsigned int inter;     /* inter partitions */        int          b_transform_8x8;        int          b_weighted_bipred; /* implicit weighting for B-frames */        int          i_direct_mv_pred; /* spatial vs temporal mv prediction */        int          i_chroma_qp_offset;        int          i_me_method; /* motion estimation algorithm to use (X264_ME_*) */        int          i_me_range; /* integer pixel motion estimation search range (from predicted mv) */        int          i_mv_range; /* maximum length of a mv (in pixels) */        int          i_subpel_refine; /* subpixel motion estimation quality */        int          b_bidir_me; /* jointly optimize both MVs in B-frames */        int          b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */        int          b_bframe_rdo; /* RD based mode decision for B-frames */        int          b_mixed_references; /* allow each mb partition in P-frames to have it's own reference number */        int          i_trellis;  /* trellis RD quantization */        int          b_fast_pskip; /* early SKIP detection on P-frames */        int          b_dct_decimate; /* transform coefficient thresholding on P-frames */        int          i_noise_reduction; /* adaptive pseudo-deadzone */        int          b_psnr;    /* Do we compute PSNR stats (save a few % of cpu) */    } analyse;    /* Rate control parameters */    struct    {        int         i_rc_method;    /* X264_RC_* */        int         i_qp_constant;  /* 0-51 */        int         i_qp_min;       /* min allowed QP value */        int         i_qp_max;       /* max allowed QP value */        int         i_qp_step;      /* max QP step between frames */        int         i_bitrate;        int         i_rf_constant;  /* 1pass VBR, nominal QP */        float       f_rate_tolerance;        int         i_vbv_max_bitrate;        int         i_vbv_buffer_size;        float       f_vbv_buffer_init;        float       f_ip_factor;        float       f_pb_factor;        /* 2pass */        int         b_stat_write;   /* Enable stat writing in psz_stat_out */        char        *psz_stat_out;        int         b_stat_read;    /* Read stat from psz_stat_in and use it */        char        *psz_stat_in;        /* 2pass params (same as ffmpeg ones) */        char        *psz_rc_eq;     /* 2 pass rate control equation */        float       f_qcompress;    /* 0.0 => cbr, 1.0 => constant qp */        float       f_qblur;        /* temporally blur quants */        float       f_complexity_blur; /* temporally blur complexity */        x264_zone_t *zones;         /* ratecontrol overrides */        int         i_zones;        /* sumber of zone_t's */        char        *psz_zones;     /* alternate method of specifying zones */    } rc;    /* Muxing parameters */    int b_aud;                  /* generate access unit delimiters */    int b_repeat_headers;       /* put SPS/PPS before each keyframe */    int i_sps_id;               /* SPS and PPS id number */} x264_param_t;

typedef struct {    int b_progress;    int i_seek;    hnd_t hin;  // hnd_t是 void *类型的    hnd_t hout;    FILE *qpfile;} cli_opt_t;

原创粉丝点击