[FFmpeg-devel] [Ffmpeg-devel] [RFC] ratecontrol buffer size magic

Michael Niedermayer michaelni
Wed Sep 26 17:00:35 CEST 2007


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


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I know you won't believe me, but the highest form of Human Excellence is
to question oneself and others. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20070926/8f5ddfb7/attachment.pgp>



More information about the ffmpeg-devel mailing list