首先解释一下cli_opt_t的这个_t代表结构图可能是type的意思。同时还有很多i_ b_等作为前缀的变量,其中的I_表示int类型的变量b表示bool类型的。依次类推。
正式进入主题。
typedef struct{
int b_progress;
int i_seek;
hnd_t hin;
hnd_t hout;
FILE *qpfile;
}cli_opt_t;
此结构体是记录一些与编码关系较小的设置信息的opt=option。结构体内部的变量都可以通过读取main()的参数获得。也就是argv。
b_progress表示一个bool类型的变量,看参数帮助也就是x264--help你会知道,他是用来控制是否显示编码进度的一个东西。取值为0,1.
I_seek整数类型表示开始从哪一帧编码。因为不一定从这个文件的第一帧开始编码,这是可以控制的。
Hnd_t(hnd=handle)是一个空指针,void *在C语言里空指针是有几个特性的,他是一个一般化指针,可以指向任何一种类型,但却不能解引用,需要解引用的时候,需要进行强制转换。采用空指针的策略,应该是为了声明变量的简便和统一。
Hin指向输入yuv文件的指针。
Hout指向编码过后生成的文件的指针。
Qpfile是一个指向文件类型的指针,他是文本文件,其每一行的格式是framenum frametype QP
用于强制指定某些帧或者全部帧的帧类型和QP(quantparam量化参数)的值。
x264_param_default( ¶m);
这部分设置编码参数的缺省值
附结构体param中部分变量的意义:
param->i_csp=X264_CSP_I420;//设置输入的视频采样的格式
param->vui.i_sar_width=0;//VUI:videousability information
param->i_fps_num=10;//帧率
param->i_fps_den=1;//用两个整型的数的比值,来表示帧率
/*Encoder parameters */
param->i_frame_reference=1;//参考帧的最大帧数。
param->i_bframe=0;//两个参考帧之间的B帧数目。
param->b_deblocking_filter=1;//去块效应相关
param->b_cabac = 0;//cabac的开关
param->i_cabac_init_idc = -1;
param->rc.b_cbr=1;//constant bitrate恒定码率控制模式
param->rc.i_bitrate=0;//默认的码率
param->rc.i_rc_buffer_size=0;//buffer的大小
param->rc.i_rc_init_buffer=0;//
param->rc.i_rc_sens=100;///* rate control sensitivity
param->rc.i_rc_method = X264_RC_NONE;//码率控制,CQP(恒定质量)、//CRF(恒定码率)、ABR(平均码率)
param->rc.i_qp_constant=26;//qp的初始值,最大最小的qp值,
param->rc.i_qp_min=10;//最小的qp值
param->rc.i_qp_max=51;//最大的qp值
param->rc.i_qp_step=4;//qp[步长step。
param->rc.f_ip_factor=1.4;//ip--i帧p帧的qp的差值
param->rc.f_pb_factor=1.3;//pb--p帧b帧的qp的差值
/* Log *///整个param的一个log文件
/*analyse*/
param->analyse.intra=X264_ANALYSE_I4x4|X264_ANALYSE_I8x8;
//桢内分析
param->analyse.inter=X264_ANALYSE_I4x4|X264_ANALYSE_I8x8|X264_ANALYSE_PSUB16x16|X264_ANALYSE_BSUB16x16;
//桢间分析
param->analyse.i_direct_mv_pred=X264_DIRECT_PRED_SPATIAL;
//预测模式
param->analyse.i_me_method=X264_ME_HEX;//运动估计模式
param->analyse.i_me_range=16;//运动估计范围
param->analyse.i_subpel_refine=5;
param->analyse.b_chroma_me=1;
param->analyse.i_mv_range_thread=-1;
param->analyse.i_mv_range=-1;// set from level_idc
param->高端网站设计analyse.i_direct_8x8_inference=-1;// set from level_idc
param->analyse.i_chroma_qp_offset=0;
param->analyse.b_fast_pskip=1;
param->analyse.b_dct_decimate=1;
param->analyse.i_luma_deadzone[0]= 21;
param->analyse.i_luma_deadzone[1]= 11;
param->analyse.b_psnr=1;
param->analyse.b_ssim=1;
param->i_cqm_preset=X264_CQM_FLAT;//自定义量化矩阵(CQM),初始化量化模式为flat
typedefstruct
{
/* In: force picture type(if not auto)
*Ifx264 encoding parameters are violated in the forcing of picture types,
*x264will correct the input picture type and log a warning.
*Thequality of frametype decisions may suffer if a great deal offine-grained
*mixingof auto and fo沈阳网站设计rced frametypes is done.
* Out: type of thepicture encoded */
inti_type;
/* In: force quantizerfor > 0 */
inti_qpplus1;
/* In: user pts, Out: ptsof encoded picture (user)*/
int64_t i_pts;
/* In: raw data */
x264_image_t img;
}x264_picture_t;
具体的含义理解参考了read_frame_yuv()x264_picture_alloc();
I_type指明被编码图像的类型,有X264_TYPE_AUTO X264_TYPE_IDRX264_TYPE_IX264_TYPE_P X264_TYPE_BREF X264_TYPE_B可供选择,初始化为AUTO,说明由x264在编码过程中自行控制。
I_qpplus1:此参数减1代表当前画面的量化参数值。
I_pts:program time stamp程序时间戳,指示这幅画面编码的时间戳。
Img :存放真正一副图像的原始数据。
typedef struct
{
inti_csp;
inti_plane;
inti_stride[4];
uint8_t *plane[4];
}x264_image_t;
Csp: color space parameter色彩空间参数X264只支持I420
i_Plane代表色彩空间的个数。一般为3,YUV,初始化为