参数解析:
OPT("bluray-compat")
p->b_bluray_compat = atobool(value);//bool 类型
bluray-compat蓝光兼容校准的一些参数
if( h->param.b_bluray_compat )
{
h->param.i_bframe_pyramid = X264_MIN( X264_B_PYRAMID_STRICT, h->param.i_bframe_pyramid );//b帧是否允许被参考
h->param.i_bframe = X264_MIN( h->param.i_bframe, 3 );//B帧数量
h->param.b_aud = 1;//编码延迟
h->param.i_nal_hrd = X264_MAX( h->param.i_nal_hrd, X264_NAL_HRD_VBR );
h->param.i_slice_max_size = 0;
h->param.i_slice_max_mbs = 0;
h->param.b_intra_refresh = 0;
h->param.i_frame_reference = X264_MIN( h->param.i_frame_reference, 6 );//参考帧个数
h->param.i_dpb_size = X264_MIN( h->param.i_dpb_size, 6 );//
/* Don't use I-frames, because Blu-ray treats them the same as IDR. */
h->param.i_keyint_min = 1;
/* Due to the proliferation of broken players that don't handle dupes properly. */
h->param.analyse.i_weighted_pred = X264_MIN( h->param.analyse.i_weighted_pred, X264_WEIGHTP_SIMPLE );
if( h->param.b_fake_interlaced )
h->param.b_pic_struct = 1;
}
/* For Blu-ray compliance, don't reference frames outside of the minigop. */
if( IS_X264_TYPE_B( h->fenc->i_type ) && h->param.b_bluray_compat )
h->i_ref[0] = X264_MIN( h->i_ref[0], IS_X264_TYPE_B( h->fref[0][0]->i_type ) + 1 );
//B帧不能参考本gop以外的帧
if( h->fenc->i_type == X264_TYPE_BREF && h->param.b_bluray_compat && h->sh.i_mmco_command_count )
{
h->b_sh_backup = 1;
h->sh_backup = h->sh;
}
slice head相关设置