[vlc-devel] [PATCH 2/2] decoder: remove vout polling from SPU decoders

Thomas Guillem thomas at gllm.fr
Tue Apr 2 18:19:26 CEST 2019



On Tue, Apr 2, 2019, at 18:00, Rémi Denis-Courmont wrote:
> Le tiistaina 2. huhtikuuta 2019, 18.19.08 EEST Thomas Guillem a écrit :
> > This fixes 2 issues:
> >  - A decoder/UI blockage of 6 seconds if there is no vouts when stopping a
> > SPU es.
> >  - A possible delay of 200ms before getting the vout.
> > ---
> >  src/input/decoder.c | 21 ++++++---------------
> >  1 file changed, 6 insertions(+), 15 deletions(-)
> > 
> > diff --git a/src/input/decoder.c b/src/input/decoder.c
> > index 36b5ac8f89..a5c635eaef 100644
> > --- a/src/input/decoder.c
> > +++ b/src/input/decoder.c
> > @@ -151,7 +151,6 @@ struct decoder_owner
> >  #define DECODER_BOGUS_VIDEO_DELAY               
> > ((vlc_tick_t)(DEFAULT_PTS_DELAY * 30))
> > 
> >  /* */
> > -#define DECODER_SPU_VOUT_WAIT_DURATION   VLC_TICK_FROM_MS(200)
> >  #define BLOCK_FLAG_CORE_PRIVATE_RELOADED (1 <<
> > BLOCK_FLAG_CORE_PRIVATE_SHIFT)
> > 
> >  static inline struct decoder_owner *dec_get_owner( decoder_t *p_dec )
> > @@ -587,21 +586,8 @@ static subpicture_t *spu_new_buffer( decoder_t *p_dec,
> >                                       const subpicture_updater_t *p_updater
> > ) {
> >      struct decoder_owner *p_owner = dec_get_owner( p_dec );
> > -    vout_thread_t *p_vout = NULL;
> >      subpicture_t *p_subpic;
> > -    int i_attempts = 30;
> > -
> > -    while( i_attempts-- )
> > -    {
> > -        if( p_owner->error )
> > -            break;
> > -
> > -        p_vout = input_resource_HoldVout( p_owner->p_resource );
> > -        if( p_vout )
> > -            break;
> > -
> > -        vlc_tick_sleep( DECODER_SPU_VOUT_WAIT_DURATION );
> > -    }
> > +    vout_thread_t *p_vout = input_resource_WaitVout( p_owner->p_resource,
> > p_dec );
> 
> I am concerned that this might deadlock the whole ES output as the SPU ES can 
> now wait forever for a video output to come.
> 
> AFAICT, to get rid of the polling and only that for the time being, 
> input_resource_WaitVout should never sleep longer than 6 seconds. And then, 
> the whole cancel dance would no longer be indispensible.

Yes, this function should take a deadline argument.
The cancel dance is still needed since it's not acceptable to block for 6seconds. 

> 
> In any case, somebody who understands SPU should check this, probably Denis 
> and/or François. I would think that the correct solution involves either 
> creating an inactive video output and queueing the SPU in it (instead of 
> waiting), or not selecting any SPU ES until after a video ES in the ES output

Maybe, we should check that later, for 5.0?

> 
> -- 
> レミ・デニ-クールモン
> 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