[FFmpeg-devel] [Ffmpeg-devel] [RFC] ratecontrol buffer size magic
Baptiste Coudurier
baptiste.coudurier
Tue Oct 16 12:17:26 CEST 2007
Hi Michael,
Michael Niedermayer wrote:
> Hi
>
> On Tue, Sep 25, 2007 at 12:00:02PM +0200, Baptiste Coudurier wrote:
>> Hi
>>
>> Michael Niedermayer wrote:
>>> Hi
>>>
>>> On Wed, Apr 25, 2007 at 12:21:52PM +0200, Baptiste Coudurier wrote:
>>>> Michael Niedermayer wrote:
>>>>> Hi
>>>>>
>>>>> On Thu, Apr 12, 2007 at 11:07:10AM +0200, Baptiste Coudurier wrote:
>>>>>> Hi
>>>>>>
>>>>>> Michael Niedermayer wrote:
>>>>>>> Hi
>>>>>>>
>>>>>>> On Wed, Apr 11, 2007 at 01:47:55PM +0200, Baptiste Coudurier wrote:
>>>>>>>> Hi
>>>>>>>>
>>>>>>>> Michael Niedermayer wrote:
>>>>>>>>> Hi
>>>>>>>>>
>>>>>>>>> On Thu, Apr 05, 2007 at 06:51:00PM +0200, Baptiste Coudurier wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I stumbed accross a weird behaviour of the CBR ratecontrol lately,
>>>>>>>>>> basically doing:
>>>>>>>>>>
>>>>>>>>>> ffmpeg -i file.mpg -vcodec mpeg2video -minrate 30000k -maxrate 30000k
>>>>>>>>>> -b 30000k -intra -flags +ildct+low_delay -dc 10 -flags2
>>>>>>>>>> +ivlc+non_linear_q -ps 1 -qmin 1 -qmax 12 -top 1 -vglobal 4 -acodec
>>>>>>>>>> pcm_s16be -f mov -bufsize 1200000 -rc_init_occupancy 1200000 cbr.mov
>>>>>>>>>>
>>>>>>>>>> Constraints are so in order to achieve vbv delay as 3600.
>>>>>>>>>> Now ffmpeg will only give me qp as 24. While tweaking I changed some
>>>>>>>>>> magic in ratecontrol.c (see patch attached) and now qp have decent/good
>>>>>>>>>> values.
>>>>>>>>>>
>>>>>>>>>> I dig into svn history and found out that r2601 bumped */2 to */3 to
>>>>>>>>>> improve CBR ratecontrol. Can anyone explain in detail why that magic
>>>>>>>>>> does improve behaviour ?
>>>>>>>>> yes, your vbv buf size is VERY significantly too small it can barely
>>>>>>>>> hold a single frame, increase it by a factor of 100 ...
>>>>>>>>>
>>>>>>>>> i hope theres no spec which mandates such nonsense parameters ...
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Can that parameter be user setable ?
>>>>>>>>> if you make it user settable ...
>>>>>>>> Is something like that ok ?
>>>>>>> yes except that name of the variable and the comment
>>>>>> +
>>>>>> + /**
>>>>>> + * Ratecontrol available buffer space coefficient applied when
>>>>>> choosing qp.
>>>>> does anyone understand what this variable does based on this description?
>>>>> no?
>>>>> if no then patch rejected
>>>> Humm ok another try:
>>>>
>>>> /**
>>>> * Coefficient applied to buffer space, by ratecontrol,
>>>> * for limiting QP (bits2qp) when encoding with a buffer size.
>>>> * - encoding: Set by user.
>>>> * - decoding: unused
>>>> */
>>>> float rc_buffer_space_to_qp_coeff;
>>> hmm its better
>>> but still
>>> the description says therese that parameter which is a coefficient
>>> and that is applied to the buffer space, whats still unclear
>>> * buffer? -> vbv buffer
>>> * buffer space? is that the size of the whole buffer? of the free space
>>> left?
>>> * applied? if id say ill apply a coeffificint to a number 95% of the math
>>> people would lynch me, its scaled or multiplied or something like that
>>> or if its a more complex operation then that should also be said more
>>> clearly
>>> * also what is the now changed "buffer size" used for?
>>>
>> Another try:
>>
>> /**
>> * Ratecontrol factor applied to vbv buffer free space when limiting QP
>> (bits2qp).
>> * With a maximum rate: free space / factor;
>> * With a minimum rate: free space * factor;
>> * - encoding: Set by user.
>> * - decoding: unused
>> */
>> float rc_vbv_to_qp_factor;
>>
>> {"rc_vbv_to_qp_factor", "ratecontrol vbv buffer free space to qp
>> factor", OFFSET(rc_vbv_buf_free_space_to_qp_factor), FF_OPT_TYPE_FLOAT,
>> 3.0, FLT_MIN, FLT_MAX, V|E},
>>
>> Im trying to keep name somewhat short.
>
> please split this variable in 2
> 2 good names would be:
>
> rc_max_available_vbv_use (default 1.0/3)
> that is attempt use at maximum 1/3 of what we can use without a underflow
>
> rc_min_vbv_overflow_use (default 3)
> that attempt to use at least 3 times the amount we must use to prevent
> a vbv overflow
>
Patch attached.
--
Baptiste COUDURIER GnuPG Key Id: 0x5C1ABAAA
SMARTJOG S.A. http://www.smartjog.com
Key fingerprint 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
Phone: +33 1 49966312
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rc_vbv.patch
Type: text/x-diff
Size: 3313 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20071016/93262e47/attachment.patch>
More information about the ffmpeg-devel
mailing list