对编码器参数的设置,x264_param_default_preset
这个函数的定义并不在ffmpeg中,因为这是X264提供给外界对编码器做设置API函数,
于是我们在X264项目中查找该函数,它定义在Common.c中,代码如下:
intx264_param_default_preset( x264_param_t *param,constchar*preset,constchar*tune )
{
x264_param_default( param );
if( preset && x264_param_apply_preset( param, preset )
return-1;
if( tune && x264_param_apply_tune( param, tune )
return-1;
return0;
}
它首先调用下x264_param_default设置默认参数,这在用户没有指定额外设置时,设置就是使用该函数默认参数,
但如果用户指定了preset和(或者)tune参数时,它就会进行额外参数的设置。
首先看一下应用模式的设置:
staticintx264_param_apply_preset( x264_param_t *param,constchar*preset )
{
char*end;
inti = strtol( preset, &end, 10 );
if( *end == 0 && i >= 0 && i
preset = x264_preset_names[i];
if( !strcasecmp( preset,"ultrafast") )
{
param->i_frame_reference = 1;
param->i_scenecut_threshold = 0;
param->b_deblocking_filter = 0;
param->b_cabac = 0;
param->i_bframe = 0;
param->analyse.intra = 0;
param->analyse.inter = 0;
param->analyse.b_transform_8x8 = 0;
param->analyse.i_me_method = X264_ME_DIA;
param->analyse.i_subpel_refine = 0;
param->rc.i_aq_mode = 0;
param->analyse.b_mixed_references = 0;
param->analyse.i_trellis = 0;
param->i_bframe_adaptive = X264_B_ADAPT_NONE;
param->rc.b_mb_tree = 0;
param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
param->analyse.b_weighted_bipred = 0;
param->rc.i_lookahead = 0;
}
elseif( !strcasecmp( preset,"superfast") )
{
param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
param->analyse.i_me_method = X264_ME_DIA;
param->analyse.i_subpel_refine = 1;
param->i_frame_reference = 1;
param-&g