x264_param_default_preset()源码分析

论坛 期权论坛     
选择匿名的用户   2021-5-28 02:11   20   0
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<div style="background-color:inherit">
  h264编码原理复杂,参数众多。为了方便使用无论x264还是其他编码的实现框架,都封装了几种现有的编码模型,只需要根据编码速度的要求和视频质量的要求选择模型,并修改部分视频参数即可编码。
</div>
<div style="background-color:inherit">
  模型的选择就是通过x264_param_default_preset()实现。
</div>
<div style="background-color:inherit">
  <br style="background-color:inherit">
</div>
<div style="background-color:inherit">
  <pre class="blockcode"><code class="language-cpp">int x264_param_default_preset( x264_param_t *param, const char *preset, const char *tune )
{
    x264_param_default( param );

    if( preset &amp;&amp; x264_param_apply_preset( param, preset ) &lt; 0 )
        return -1;
    if( tune &amp;&amp; x264_param_apply_tune( param, tune ) &lt; 0 )
        return -1;
    return 0;
}</code></pre>
  <br>
  <br>
</div>
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<br style="background-color:inherit">
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
分为三步处理
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<span style="background-color:inherit">第一步为调用x264_param_default()param设置默认值</span>。
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<br style="background-color:inherit">
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<span style="background-color:inherit">第二部步根据preset值通过x264_param_apply_preset(x264_param_t *param, const char *preset )函数设置设置编码参数。</span>
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<span style="background-color:inherit">preset 接受取值为:<span style="background-color:inherit; line-height:1.5">x264_preset_names[] &#61; { &#34;ultrafast&#34;, &#34;superfast&#34;, &#34;veryfast&#34;, &#34;faster&#34;, &#34;fast&#34;, &#34;medium&#34;, &#34;slow&#34;, &#34;slower&#34;, &#34;veryslow&#34;, &#34;placebo&#34;, 0 };</span></span>
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<span style="background-color:inherit; line-height:1.5"><span style="background-color:inherit">此步骤通过速度设定某些参数。</span></span>
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<div style="background-color:inherit">
  <pre class="blockcode"><code class="language-cpp">static int x264_param_apply_preset( x264_param_t *param, const char *preset )
{
    char *end;
    int i &#61; strtol( preset, &amp;end, 10 );
    if( *end &#61;&#61; 0 &amp;&amp; i &gt;&#61; 0 &amp;&amp; i &lt; sizeof(x264_preset_names)/sizeof(*x264_preset_names)-1 )
        preset &#61; x264_preset_names[i];

    if( !strcasecmp( preset, &#34;ultrafast&#34; ) )
    {
        param-&gt;i_frame_reference &#61; 1;//参考帧的最大帧数设为1
        param-&gt;i_scenecut_threshold &#61; 0;
        param-&gt;b_deblocking_filter &#61; 0;//不使用去块滤波  
        param-&gt;b_cabac &#61; 0;//关闭cabac
        param-&gt;i_bframe &#61; 0;//关闭b帧
        param-&gt;analyse.intra &#61; 0;
        param-&gt;analyse.inter &#61; 0;
        param-&gt;analyse.b_transform_8x8 &#61; 0;
        param-&gt;analyse.i_me_method &#61; X264_ME_DIA;;运动估算法的选择
        param-&gt;analyse.i_subpel_refine &#61; 0;
        param-&gt;rc.i_aq_mode &#61; 0;
        param-&gt;analyse.b_mixed_references &#61; 0;
        param-&gt;analyse.i_trellis &#61; 0;
        param-&gt;i_bframe_adaptive &#61; X264_B_ADAPT_NONE;//关闭b帧判定选项
        param-&gt;rc.b_mb_tree &#61; 0;
        param-&gt;analyse.i_weighted_pred &#61; X264_WEIGHTP_NONE;
        param-&gt;analyse.b_weighted_bipred &#61; 0;
        param-&gt;rc.i_lookahead &#61; 0;
    }
    else if( !strcasecmp( preset, &#34;superfast&#34; ) )
    {
        param-&gt;analyse.inter &#61; X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
        param-&gt;analyse.i_me_method &#61; X264_ME_DIA;;//钻石模板  
        param-&gt;analyse.i_subpel_refine &#61; 1;/亚像素运动估计质量为1  
        param-&gt;i_frame_reference &#61; 1;//参考帧的最大帧数设为1
        param-&gt;analyse.b_mixed_references &#61; 0;
        param-&gt;analyse.i_trellis &#61; 0;
        param-&gt;rc.b_mb_tree &#61; 0;
        param-&gt;analyse.i_weighted_pred &#61; X264_WEIGHTP_SIMPLE;
        param-&gt;rc.i_lookahead &#61; 0;
    }
    else if( !strcasecmp( preset, &#34;veryfast&#34; ) )
    {
        param-&gt;analyse.i_me_method &#61; X264_ME_HEX;
        param-&gt;analyse.i_subpel_refine &#61; 2;
        param-&gt;i_frame_reference &#61; 1;//参考帧的最大帧数设为1
        param-&gt;analyse.b_mixed_references &#61; 0;
        param-&gt;analyse.i_trellis &#61; 0;
        param-&gt;analyse.i_weighted_pred &#61; X264_WEIGHTP_SIMPLE;
        param-&gt;rc.i_lookahead &#61; 10;
    }
    else if( !strcasecmp( preset, &#34;faster&#34; ) )
    {
        param-&gt;analyse.b_mixed_references &#61; 0;
        param-&gt;i_frame_reference &#61; 2;//参考帧的最大帧数设为2
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP