[vlc-devel] [PATCH] Inproved buffering accuracy and no rebuffering on ignored

Sergio Ammirata sergio at ammirata.net
Thu Oct 3 15:17:54 CEST 2013


David,

Can you share your testing code/app?

I am interested in seeing under which edge conditions will it actually
affect the video and/or increase the buffer size.

Sergio

On 10/3/13 7:41 AM, "David R Robison" <drrobison at openroadsconsulting.com>
wrote:

>Any thoughts on this? David
>
>David R Robison
>Open Roads Consulting, Inc.
>103 Watson Road, Chesapeake, VA 23320
>phone: (757) 546-3401
>e-mail: drrobison at openroadsconsulting.com
>web: http://openroadsconsulting.com
>blog: http://therobe.blogspot.com
>book: 
>http://www.xulonpress.com/bookstore/bookdetail.php?PB_ISBN=9781597816526
>
>On 10/1/2013 10:40 AM, David Robison wrote:
>> To test this change, I used a MiniMaxwell which allows me to introduce
>>jitter, delay, and packet re-ordering in the video stream. I ran for
>>over 12 hours with no effect on the video and no increase in buffer
>>size. I'm reattaching the final patch here. I've made 2 basic changes to
>>the buffering strategy:
>>
>> 1) I now check to see if I and done buffering on both the
>>ES_OUT_SET_PCR and ES_OUT_SET_GROUP_PCR calls. This causes the buffered
>>amount to be checked more frequently and prevents over buffering which I
>>have seen in some instances
>> 2) When ignoring the jitter, I do not flush the buffer and rebuffer,
>>since I am not increasing the buffer size anyway. Instead I just reset
>>the PCR and continue on.
>>
>> Here is the final patch, Any comments?
>> David
>>
>> diff --git a/src/input/es_out.c b/src/input/es_out.c
>> index 68acf5e..c2431ba 100644
>> --- a/src/input/es_out.c
>> +++ b/src/input/es_out.c
>> @@ -2309,14 +2309,14 @@ static int EsOutControlLocked( es_out_t *out,
>>int i_query, va_list args )
>>                               EsOutIsExtraBufferingAllowed( out ),
>>                               i_pcr, mdate() );
>>   
>> -        if( p_pgrm == p_sys->p_pgrm )
>> +        if( p_sys->b_buffering )
>>           {
>> -            if( p_sys->b_buffering )
>> -            {
>> -                /* Check buffering state on master clock update */
>> -                EsOutDecodersStopBuffering( out, false );
>> -            }
>> -            else if( b_late && ( !p_sys->p_input->p->p_sout ||
>> +            /* Check buffering state on master clock update */
>> +            EsOutDecodersStopBuffering( out, false );
>> +        }
>> +        else if( p_pgrm == p_sys->p_pgrm )
>> +        {
>> +            if( b_late && ( !p_sys->p_input->p->p_sout ||
>>                 
>>!p_sys->p_input->p->b_out_pace_control ) )
>>               {
>>                   const mtime_t i_pts_delay_base = p_sys->i_pts_delay -
>>p_sys->i_pts_jitter;
>> @@ -2330,19 +2330,23 @@ static int EsOutControlLocked( es_out_t *out,
>>int i_query, va_list args )
>>                                "ES_OUT_SET_(GROUP_)PCR  is called too
>>late (jitter of %d ms ignored)",
>>                                (int)(i_pts_delay - i_pts_delay_base) /
>>1000 );
>>                       i_pts_delay = p_sys->i_pts_delay;
>> +
>> +                    /* reset clock */
>> +                    for( int i = 0; i < p_sys->i_pgrm; i++ )
>> +                      input_clock_Reset( p_sys->pgrm[i]->p_clock );
>>                   }
>>                   else
>>                   {
>>                       msg_Err( p_sys->p_input,
>>                                "ES_OUT_SET_(GROUP_)PCR  is called too
>>late (pts_delay increased to %d ms)",
>>                                (int)(i_pts_delay/1000) );
>> -                }
>>   
>> -                /* Force a rebufferization when we are too late */
>> +                    /* Force a rebufferization when we are too late */
>>   
>> -                /* It is not really good, as we throw away already
>>buffered data
>> -                 * TODO have a mean to correctly reenter bufferization
>>*/
>> -                es_out_Control( out, ES_OUT_RESET_PCR );
>> +                    /* It is not really good, as we throw away already
>>buffered data
>> +                     * TODO have a mean to correctly reenter
>>bufferization */
>> +                    es_out_Control( out, ES_OUT_RESET_PCR );
>> +                }
>>   
>>                   es_out_SetJitter( out, i_pts_delay_base, i_pts_delay
>>- i_pts_delay_base, p_sys->i_cr_average );
>>               }
>> -- 
>> 1.7.9.5
>>
>>    _____
>> From: Rémi Denis-Courmont [mailto:remi at remlab.net]
>> To: Mailing list for VLC media player developers
>>[mailto:vlc-devel at videolan.org]
>> Sent: Thu, 26 Sep 2013 10:03:03 -0400
>> Subject: Re: [vlc-devel] [PATCH] Do not rebuffer if not increasing
>>buffer	size
>>
>> Is there any easy way to test it?
>>
>
>
>
>This email communication (including any attachments) may contain
>confidential and/or privileged material intended solely for the
>individual or entity to which it is addressed.
>If you are not the intended recipient, please delete this email
>immediately.
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel





More information about the vlc-devel mailing list