[vlc-devel] [RFC PATCH 4/4] avocodec: flush buffers in case of mt
Thomas Guillem
thomas at gllm.fr
Tue Nov 17 16:47:39 CET 2015
On Tue, Nov 17, 2015, at 16:40, Rémi Denis-Courmont wrote:
> Le 2015-11-17 18:16, Thomas Guillem a écrit :
> > The NOTE in comment is not good with multi-threading activated.
> > Indeed, after a
> > flush, when mt was on, pf_decode could return old pictures from
> > before the
> > flush.
> > ---
> > modules/codec/avcodec/video.c | 12 ++++++------
> > 1 file changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/modules/codec/avcodec/video.c
> > b/modules/codec/avcodec/video.c
> > index 1b98c5c..0a7a4b6 100644
> > --- a/modules/codec/avcodec/video.c
> > +++ b/modules/codec/avcodec/video.c
> > @@ -533,17 +533,17 @@ static picture_t *DecodeVideo( decoder_t
> > *p_dec, block_t **pp_block )
> > p_sys->i_pts = VLC_TS_INVALID; /* To make sure we
> > recover properly */
> >
> > p_sys->i_late_frames = 0;
> > -#if 0
> > - /* NOTE: data is good only the timeline changed so do
> > not flush decoder */
> > - post_mt( p_sys );
> > - if( p_block->i_flags & BLOCK_FLAG_DISCONTINUITY )
> > + /* NOTE: when using one thread, data is good, only the
> > timeline
> > + * changed so do not flush decoder */
> > + if( p_block->i_flags & BLOCK_FLAG_DISCONTINUITY
> > + && p_context->thread_count > 1 )
>
> Confusing flush and discontinuity. This may cause terrible results on
> DVB or UDP.
Yes, that's why we would need a pf_flush in decoder too.
>
> > {
> > + post_mt( p_sys );
> > p_sys->b_flushing_buffers = true;
> > avcodec_flush_buffers( p_context );
> > p_sys->b_flushing_buffers = false;
> > + wait_mt( p_sys );
> > }
> > - wait_mt( p_sys );
> > -#endif
> > if( p_block->i_flags & BLOCK_FLAG_CORRUPTED )
> > {
> > block_Release( p_block );
>
> --
> Rémi Denis-Courmont
> http://www.remlab.net/
> _______________________________________________
> 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