Thanks for your kind reply, Loren<br><br>&quot; Given that B-frames&#39; QP are locked to an offset from the adjacent <br>&nbsp;&nbsp; P-frames&#39;s QP (and that&#39;s optimal for compression), the way to modify the&quot;<br>why is that optimal?
<br><br>Maybe I think I know how the vbv works. What confuses me is how to make good use of vbv? In the x264, qscale is adjusted according to<br>vbv buffer state, is the way to adjust qscale the best way? Just as you said in 
ratecontrol.txt, this is empirical. Can you improve that? <br>If we want to improve it, what can we change? the way to adjust qscale? Ratecontrol equation?<br><br>Best Regards<br>Jogging <br><br><br><div><span class="gmail_quote">
On 4/29/07, <b class="gmail_sendername">Loren Merritt</b> &lt;<a href="mailto:lorenm@u.washington.edu">lorenm@u.washington.edu</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Sun, 29 Apr 2007, jogging song wrote:<br><br>&gt;&nbsp;&nbsp;Now I am reading the source code of rate control in x264. The function<br>&gt; clip_qscale adjusts qscale according to vbv buffer state.<br>&gt; I find some comments are not consistent with source codes.
<br>&gt; Here is the codes:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Check B-frame complexity, and use up any bits that would<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* overflow before the next P-frame. */<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( h-&gt;sh.i_type == SLICE_TYPE_P )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nb = rcc-&gt;bframes;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double pbbits = bits;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double bbits = predict_size( rcc-&gt;pred_b_from_p, q * h-&gt;<br>&gt; param.rc.f_pb_factor, rcc-&gt;last_satd );<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double space;
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( bbits &gt; rcc-&gt;buffer_rate )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nb = 0;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pbbits += nb * bbits;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; space = rcc-&gt;buffer_fill + (1+nb)*rcc-&gt;buffer_rate -<br>
&gt; rcc-&gt;buffer_size;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( pbbits &lt; space )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q *= X264_MAX( pbbits / space,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bits / (0.5 * rcc-&gt;buffer_size) );<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q = X264_MAX( q0-5, q );<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;<br>&gt; The comments tell us that the following codes adjust qscale for B slices.<br>&gt; But the codes are executed in the case the slice is P.<br><br>The comment is correct. It doesn&#39;t say it adjusts the QP of the B-frames,
<br>it says it adjusts the QP of the P-frames to compensate for B-frames.<br>Given that B-frames&#39; QP are locked to an offset from the adjacent<br>P-frames&#39;s QP (and that&#39;s optimal for compression), the way to modify the
<br>qscale for B-frames is to modify the adjacent P-frames.<br><br>&gt; I have one question. VBV buffer allows us to change the rate according the<br>&gt; content of current frame. But how do we make good use of vbv buffer?
<br>&gt; What is the objective pf vbv buffer in rate control? Try to make it<br>&gt; full always?<br><br>Before asking what x264 does with VBV, do you know what VBV means in<br>general, as descibed in the MPEG-2 and H.264
 standards and related docs?<br>I don&#39;t feel up to explaining that.<br><br>--Loren Merritt<br><br>--<br>This is the x264-devel mailing-list<br>To unsubscribe, go to: <a href="http://developers.videolan.org/lists.html">
http://developers.videolan.org/lists.html</a><br><br></blockquote></div><br>