typedef struct x264_param_t
{
unsigned int cpu; // CPU 标志位
int i_threads; // 并行编码多帧
int b_deterministic; //是否允许非确定性时线程优化
int i_sync_lookahead; //线程超前缓冲
//视频属性
int i_width; // 宽度
int i_height; //高度
int i_csp; // 编码比特流的CSP,仅支持i420,色彩空间设置
int i_level_idc; //level值的设置
int i_frame_total; // 编码帧的总数, 默认 0
//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过扫描线,默认"undef"(不设置),可选项:show(观看)/crop(去除)
//见以下的值h264附件E
Int i_vidformat; //视频格式,默认"undef",component/pal/ntsc/secam/mac/undef
int b_fullrange; //Specify full range samplessetting,默认"off",可选项:off/on
int i_colorprim; //原始色度格式,默认"undef",可选项:undef/bt709/bt470m/bt470bg,smpte170m/smpte240m/film
int i_transfer; //转换方式,默认"undef",可选项:undef/bt709/bt470m/bt470bg/linear,log100/log316/smpte170m/smpte240m
int i_colmatrix; //色度矩阵设置,默认"undef",undef/bt709/fcc/bt470bg,smpte170m/smpte240m/GBR/YCgCo
int i_chroma_loc; // both top & bottom色度样本指定,范围0~5,默认0
} vui;
int i_fps_num;
int i_fps_den;
/*这两个参数是由fps帧率确定的,赋值的过程见下:
{
float fps;
if( sscanf( value, "%d/%d",&p->i_fps_num,&p->i_fps_den ) == 2 )
;
else if( sscanf( value, "%f", &fps ) )
{
p->i_fps_num = (int)(fps * 1000 + .5);
p->i_fps_den = 1000;
}
else
b_error = 1;
}
Value的值就是fps。*/
//流参数
int i_frame_reference; //参考帧最大数目
int i_keyint_max; //在此间隔设置IDR关键帧
int i_keyint_min; //场景切换少于此值 编码I帧, 而不是 IDR.
int i_scenecut_threshold; //如何积极地插入额外的I帧,画面动态变化限,当超出此值时插入I帧,默认40
int i_bframe; //两个相关图像间P帧的数目
int i_bframe_adaptive; //自适应B帧判定
int i_bframe_bias; //控制插入B帧判定,范围-100~+100,越高越容易插入B帧,默认0
int b_bframe_pyramid; //允许部分B为参考帧
//去块滤波器需要的参数
int b_deblocking_filter; ////是否使用 去块效应 滤镜
int i_deblocking_filter_alphac0; // [-6, 6] ,去块范围,越大,去块越厉害,细节越少,视频也越模糊。一般来说默认值0就够了,不要超出+-2的范围;
int i_deblocking_filter_beta; // [-6, 6] ,去块阈值,越小,保留越多细节;越大,去块越猛,可以越好得去除明显的块效应;一般不要超出+-3的范围;
// 熵编码
int b_cabac;
int i_cabac_init_idc;
int b_interlaced; //隔行扫描
//量化
int i_cqm_preset; //自定义量化矩阵(CQM),初始化量化模式为flat
char *psz_cqm_file; //JM format读取JM格式的外部量化矩阵文件,自动忽略其他—cqm 选项
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];
// 日志
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; //重建帧的名字
//编码分析参数
struct
{
unsigned intintra; // 帧间分区
unsigned intinter; //帧内分区
int b_transform_8x8; //帧间分区
int b_weighted_bipred; //为b帧隐式加权
int i_direct_mv_pred; // 时间空间队运动预测
int i_chroma_qp_offset; //色度量化步长偏移量
int i_me_method; // 运动估计算法 (X264_ME_*)
int i_me_range; // 整像素运动估计搜索范围 (from predictedmv)
int i_mv_range; //运动矢量最大长度(in pixels). -1 =auto, based on level
int i_mv_range_thread; //线程之间的最小空间. -1 = auto,based on number of threads.
int i_subpel_refine; //亚像素运动估计质量
int b_chroma_me; //亚像素色度运动估计和P帧的模式选择
int b_mixed_references; //允许每个宏块的分区在P帧有它自己的参考号
int i_trellis; //Trellis量化,对每个8x8的块寻找合适的量化值,需要CABAC,默认0 0:关闭1:只在最后编码时使用2:一直使用
int b_fast_pskip; //快速P帧跳过检测
int b_dct_decimate; //在P-frames转换参数域
int i_noise_reduction; //自适应伪盲区
float f_psy_rd; // Psy RD strength
float f_psy_trellis; // Psy trellis strength
int b_psy; //Toggle all psy optimizations
// 亮度量化中使用的无效区大小
int i_luma_deadzone[2]; //{帧间, 帧内}
int b_psnr; // 计算和打印PSNR信息
int b_ssim; // 计算和打印SSIM信息
} analyse;
// 码率控制参数
struct
{
int i_rc_method; X264_RC_* // 码率控制方法
int i_qp_constant; //0-51
int i_qp_min; // 允许的最小量化值
int i_qp_max; //允许的最大量化值
int i_qp_step; // 帧间最大量化步长
int i_bitrate; //设置平均码率
float f_rf_constant; // 1pass VBR, nominal QP
float f_rate_tolerance;
int i_vbv_max_bitrate; //平均码率模式下,最大瞬时码率,默认0(与-B设置相同)
int i_vbv_buffer_size; //码率控制缓冲区的大小,单位kbit,默认0
float f_vbv_buffer_init; //<=1:fraction of buffer_size. >1:kbit码率控制缓冲区数据保留的最大数据量与缓冲区大小之比,范围0~1.0,默认0.9
float f_ip_factor;
float f_pb_factor;
int i_aq_mode; // psy adaptive QP. (X264_AQ_*)
float f_aq_strength;
int b_mb_tree; // Macroblock-tree ratecontrol.
int i_lookahead;
// 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; // 时间上模糊量化
float f_complexity_blur; // 时间上模糊复杂性
x264_zone_t*zones; // 码率控制覆盖
int i_zones; //number of zone_t's
char *psz_zones; //指定区的另一种方法
} rc;
Muxing parameters
intb_aud; // 生成访问单元分隔符
intb_repeat_headers; //在每个关键帧前放置SPS/PPS
inti_sps_id; // SPS 和 PPS id 号
//切片(像条)参数
inti_slice_max_size; // 每片字节的最大数,包括预计的NAL开销.
inti_slice_max_mbs; // 每片宏块的最大数,重写 i_slice_count
inti_slice_count; //每帧的像条数目: 设置矩形像条.
Optional callback for freeing this x264_param_t when it is donebeing used.
Only used when the x264_param_t sits in memory for an indefiniteperiod of time,
i.e. when an x264_param_t is passed to x264_t in an x264_picture_tor in zones.
Not used when x264_encoder_reconfig is called directly.
void (*param_free)( void* );
} x264_param_t;