[vlc-devel] [RFC PATCH 1/4] decoder: don't wait for flush to complete
Rémi Denis-Courmont
remi at remlab.net
Tue Nov 17 17:03:03 CET 2015
Le 2015-11-17 18:55, Thomas Guillem a écrit :
> ---
> src/input/decoder.c | 23 +----------------------
> 1 file changed, 1 insertion(+), 22 deletions(-)
>
> diff --git a/src/input/decoder.c b/src/input/decoder.c
> index cacf7f2..3e371ca 100644
> --- a/src/input/decoder.c
> +++ b/src/input/decoder.c
> @@ -110,7 +110,6 @@ struct decoder_owner_sys_t
>
> /* Flushing */
> bool flushing;
> - bool flushed;
> bool b_draining;
> atomic_bool drained;
> bool b_idle;
> @@ -1341,9 +1340,6 @@ static void *DecoderThread( void *p_data )
> if( unlikely(dummy == NULL) )
> msg_Err( p_dec, "cannot flush" );
>
> - /* Owner is buggy if it queues data while flushing */
> - assert( vlc_fifo_IsEmpty( p_owner->p_fifo ) );
> - p_owner->flushing = false;
Why do you move this line? ^^
> vlc_fifo_Unlock( p_owner->p_fifo );
>
> /* Flush the decoder (and the output) */
> @@ -1351,12 +1347,8 @@ static void *DecoderThread( void *p_data )
>
> vlc_fifo_Lock( p_owner->p_fifo );
> vlc_restorecancel( canc );
> + p_owner->flushing = false;
So what if another flush request occurred after the vlc_fifo_Unlock()
above.
>
> - /* Owner is supposed to wait for flush to complete.
> - * TODO: It might be possible to remove this
> restriction. */
> - assert( vlc_fifo_IsEmpty( p_owner->p_fifo ) );
> - p_owner->flushed = true;
> - vlc_cond_signal( &p_owner->wait_fifo );
> continue;
> }
>
> @@ -1486,7 +1478,6 @@ static decoder_t * CreateDecoder( vlc_object_t
> *p_parent,
> p_owner->b_has_data = false;
>
> p_owner->flushing = false;
> - p_owner->flushed = true;
> p_owner->b_draining = false;
> atomic_init( &p_owner->drained, false );
> p_owner->b_idle = false;
> @@ -1818,7 +1809,6 @@ void input_DecoderDecode( decoder_t *p_dec,
> block_t *p_block, bool b_do_pace )
> vlc_fifo_WaitCond( p_owner->p_fifo, &p_owner->wait_fifo
> );
> }
>
> - p_owner->flushed = false;
> vlc_fifo_QueueUnlocked( p_owner->p_fifo, p_block );
> vlc_fifo_Unlock( p_owner->p_fifo );
> }
> @@ -1874,13 +1864,6 @@ void input_DecoderFlush( decoder_t *p_dec )
>
> vlc_fifo_Lock( p_owner->p_fifo );
>
> - /* Don't flush if already flushed */
> - if( p_owner->flushed )
> - {
> - vlc_fifo_Unlock( p_owner->p_fifo );
> - return;
> - }
> -
> /* Empty the fifo */
> block_ChainRelease( vlc_fifo_DequeueAllUnlocked( p_owner->p_fifo
> ) );
> p_owner->flushing = true;
> @@ -1893,10 +1876,6 @@ void input_DecoderFlush( decoder_t *p_dec )
>
> vlc_fifo_Signal( p_owner->p_fifo );
>
> - /* Monitor for flush end */
> - while( !p_owner->flushed )
> - vlc_fifo_WaitCond( p_owner->p_fifo, &p_owner->wait_fifo );
> -
> vlc_fifo_Unlock( p_owner->p_fifo );
> }
--
Rémi Denis-Courmont
http://www.remlab.net/
More information about the vlc-devel
mailing list