vlc | branch: master | Thomas Guillem <[email protected]> | Fri Nov 27 16:18:44 2020 +0100| [9602cf7e738c5d3cc4f0b0156017110c844cdfb3] | committer: Thomas Guillem
decoder: fix slow video flush Video flush was taking between 1 seconds to 10 seconds because the flush request was not processed by the DecoderThread that was stuck in pf_decode() callbacks waiting for new pictures. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9602cf7e738c5d3cc4f0b0156017110c844cdfb3 --- src/input/decoder.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/input/decoder.c b/src/input/decoder.c index 8d67f7ea63..94e328f040 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -1470,6 +1470,11 @@ static void DecoderThread_Flush( vlc_input_decoder_t *p_owner ) { if( p_owner->p_vout ) vout_FlushAll( p_owner->p_vout ); + + /* Reset the pool cancel state, previously set by + * vlc_input_decoder_Flush() */ + if( p_owner->out_pool != NULL ) + picture_pool_Cancel( p_owner->out_pool, false ); } else if( p_dec->fmt_out.i_cat == SPU_ES ) { @@ -2288,6 +2293,17 @@ void vlc_input_decoder_Flush( vlc_input_decoder_t *p_owner ) vlc_fifo_Unlock( p_owner->p_fifo ); + if ( p_owner->fmt.i_cat == VIDEO_ES ) + { + /* Set the pool cancel state. This will unblock the module if it is + * waiting for new pictures (likely). This state will be reset back + * from the DecoderThread once the flush request is processed. */ + vlc_mutex_lock( &p_owner->lock ); + if( p_owner->out_pool != NULL ) + picture_pool_Cancel( p_owner->out_pool, true ); + vlc_mutex_unlock( &p_owner->lock ); + } + if( p_owner->paused ) { /* The DecoderThread could be stuck in pf_decode(). This is likely the _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
