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

David R Robison drrobison at openroadsconsulting.com
Thu Oct 3 13:41:20 CEST 2013


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.




More information about the vlc-devel mailing list