x264中几个重要结构体的说明

看代码,虽说不一定非得把每一个变量的含义都弄得一清二楚,但是对于比较重要的变量参数,你不了解的话那看起程序来会特别吃力,故这里先开个头,给出x264中几个重要结构体的说明,主要以注释的形式给出。

typedef struct x264_param_t
{
    /* CPU flags */
    unsigned int cpu;
    int         i_threads;       /* encode multiple frames in parallel */
    int         b_deterministic; /* whether to allow non-deterministic optimizations when threaded */

    /* Video Properties */
    int         i_width;	 //!< 图像的宽度
    int         i_height; //!< 图像的高度 
    int         i_csp;  /* CSP of encoded bitstream, only i420 supported */
    int         i_level_idc; //!< level值的设置
    int         i_frame_total; /* number of frames to encode if known, else 0 */
    //! Video Usability Information (VUI) 视频可用性信息
    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         b_pre_scenecut;     /* compute scenecut on lowres frames */
    int         i_bframe;   /* how many b-frame between 2 references pictures */
    int         i_bframe_adaptive; //!< B帧数目自适应
    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; //!< 设置CABAC
    int         i_cabac_init_idc;

    int         b_interlaced;

    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;
    char        *psz_dump_yuv;  /* filename for reconstructed frames */

    /* Encoder analyser parameters */
    struct
    {
        unsigned int intra;     /* intra partitions */
        unsigned int inter;     /* inter partitions */

        int          b_transform_8x8; //!< 设置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). -1 = auto, based on level */
        int          i_mv_range_thread; /* minimum space between threads. -1 = auto, based on number of threads. */
        int          i_subpel_refine; /* subpixel motion estimation quality */
        int          b_chroma_me; /* chroma ME for subpel and mode decision in P-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 */
        float        f_psy_rd; /* Psy RD strength */
        float        f_psy_trellis; /* Psy trellis strength */

        /* the deadzone size that will be used in luma quantization */
        int          i_luma_deadzone[2]; /* {inter, intra} */

        int          b_psnr;    /* compute and print PSNR stats */
        int          b_ssim;    /* compute and print SSIM stats */
    } 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;
        float       f_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; /* <=1: fraction of buffer_size. >1: kbit */
        float       f_ip_factor;
        float       f_pb_factor;

        int         i_aq_mode;      /* psy adaptive QP. (X264_AQ_*) */
        float       f_aq_strength;

        /* 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) */
        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;        /* number 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     i_csp; //!< Color Space Parameter,色彩空间参数,实际上仅支持I420格式

    int     i_plane; //!< 色彩空间的色彩分量数
    int     i_stride[4]; //!< 对应于各个色彩分量的跨度 
    uint8_t *plane[4]; //!< 对应于各个色彩分量的数据
} x264_image_t;

typedef struct
{
    /* In: force picture type (if not auto)
     *     If x264 encoding parameters are violated in the forcing of picture types,
     *     x264 will correct the input picture type and log a warning.
     *     The quality of frametype decisions may suffer if a great deal of fine-grained
     *     mixing of auto and forced frametypes is done.
     * Out: type of the picture encoded */
    int     i_type; //!<指明帧的类型,有X264_TYPE_AUTO,X264_TYPE_IDR,X264_TYPE_I,X264_TYPE_P,X264_TYPE_B,X264_TYPE_BREF几种类型
    /* In: force quantizer for > 0 */
    int     i_qpplus1; //!< 帧的量化参数值减1
    /* In: user pts, Out: pts of encoded picture (user)*/
    int64_t i_pts; //!< Presentation Time Stamp 

    /* In: raw data */
    x264_image_t img; //!< 用于维护原始图像数据的结构体
} x264_picture_t;


 

typedef struct
{
    int i_ref_idc;  /* nal_priority_e */ //!< nal 的优先级
    int i_type;     /* nal_unit_type_e */ //!< nal 的类型

    /* This data are raw payload */
    int     i_payload; //!< nal 载荷的长度
    uint8_t *p_payload; //!< nal 载荷的数据
} x264_nal_t;


 

你可能感兴趣的:(H.264)