[vlc-devel] [PATCH v3 2/2] Reset p_context->skip_frame when done seeking

Thomas Guillem thomas at gllm.fr
Mon Sep 2 09:45:51 CEST 2019



On Mon, Sep 2, 2019, at 07:45, Steve Lhomme wrote:
> On 2019-09-01 0:11, Marc Aldorasi wrote:
> > Previously, if p_sys->b_hurry_up was false and we weren't seeking, the
> > value of p_context->skip_frame would not be modified.  This means that
> > if we started seeking we would set p_context->skip_frame to
> > AVDISCARD_NONREF, and then when we finished seeking we wouldn't change
> > p_context->skip_frame and it would still be skipping non-reference
> > frames, causing choppy playback.  This patch resets
> > p_context->skip_frame when we're not seeking so playback is smooth.
> > ---
> >   modules/codec/avcodec/video.c | 21 +++++++++------------
> >   1 file changed, 9 insertions(+), 12 deletions(-)
> > 
> > diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
> > index 7166d70b33..3ca7574ce6 100644
> > --- a/modules/codec/avcodec/video.c
> > +++ b/modules/codec/avcodec/video.c
> > @@ -1026,24 +1026,21 @@ static int DecodeBlock( decoder_t *p_dec, block_t **pp_block )
> >       /* Defaults that if we aren't in prerolling, we want output picture
> >          same for if we are flushing (p_block==NULL) */
> >       if( !p_block || !(p_block->i_flags & BLOCK_FLAG_PREROLL) )
> 
> The if may be grouped "!(block && block preroll)" to make it clearer 
> that the other part of the else (which could also become the first part 
> for even clearer code) is for preroll blocks.
> 
> The patchset is OK with me. That can be cleaned afterwards.

I trust you on that one. The commit log is good for me, but I don't really know this part of the code.

> 
> > +    {
> >           b_need_output_picture = true;
> > +        p_context->skip_frame = p_sys->i_skip_frame;
> > +    }
> >       else
> > -        b_need_output_picture = false;
> > -
> > -    /* Change skip_frame config only if hurry_up is enabled */
> > -    if( p_sys->b_hurry_up )
> >       {
> > -        p_context->skip_frame = p_sys->i_skip_frame;
> > -
> > -        /* Check also if we should/can drop the block and move to next block
> > -            as trying to catchup the speed*/
> > -        if( p_dec->b_frame_drop_allowed )
> > -            p_block = filter_earlydropped_blocks( p_dec, p_block );
> > +        b_need_output_picture = false;
> > +        p_context->skip_frame = __MAX( p_sys->i_skip_frame, AVDISCARD_NONREF );
> >       }
> >   
> > -    if( !b_need_output_picture )
> > +    /* Check also if we should/can drop the block and move to next block
> > +       to try to catch up */
> > +    if( p_sys->b_hurry_up && p_dec->b_frame_drop_allowed )
> >       {
> > -        p_context->skip_frame = __MAX( p_context->skip_frame, AVDISCARD_NONREF );
> > +        p_block = filter_earlydropped_blocks( p_dec, p_block );
> >       }
> >   
> >       /*
> > -- 
> > 2.22.0
> > 
> > _______________________________________________
> > vlc-devel mailing list
> > To unsubscribe or modify your subscription options:
> > https://mailman.videolan.org/listinfo/vlc-devel
> > 
> _______________________________________________
> 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