[vlc-devel] [V3 PATCH 3/3] dec: update pause/rate when the output is restarted
thomas at gllm.fr
Wed Jul 4 10:37:57 CEST 2018
On Tue, Jul 3, 2018, at 17:58, Rémi Denis-Courmont wrote:
> Le tiistaina 3. heinäkuuta 2018, 14.22.30 EEST Thomas Guillem a écrit :
> > On Tue, Jul 3, 2018, at 13:20, Rémi Denis-Courmont wrote:
> > > There should not be a need to move the current state out of the
> > > stack, AFAIU.>
> > >
> > > I like to keep thread variables on stack because it's then obvious
> > > what the access rule is (read/write for the thread) and if the
> > > variable becomes unused.
> > Then, how do you fix what this commit is trying to fix ? With a reset
> > bool that reset pause/rate from the DecoderThread stack ?
> Set the correct values when you get the xout ?
I implemented it (badly), pushed it, and force reverted it.
It's more difficult than expected. With the 2 different locks and thread, it's hard (impossible?) to never miss a rate/paused state.
I explain, cf. aout diff (the same for vout):
@@ -384,6 +384,17 @@ static int aout_update_format( decoder_t *p_dec )
+ vlc_fifo_Lock( p_owner->p_fifo );
+ float rate = p_owner->rate;
+ vlc_tick_t pause_date = p_owner->pause_date;
+ bool paused = p_owner->paused;
+ vlc_fifo_Unlock( p_owner->p_fifo );
+ if( paused )
+ aout_DecChangePause( p_aout, paused, pause_date );
+ if( rate != 1.f )
+ aout_DecChangeRate( p_aout, rate );
vlc_mutex_lock( &p_owner->lock );
p_owner->p_aout = p_aout;
Here I update the aout state before writing it to p_owner->p_aout so that the DecoderThread won't change these states on its own. But if a new pause/rate is sent from the input between vlc_fifo_Unlock( p_owner->p_fifo ) and vlc_mutex_lock( &p_owner->lock ), and if the DecoderThread already process it in the meantime (and ignore it since since there is no aout), the state will be missed.
Therefore, I prefer doing what this V3 patch set is doing.
> Реми Дёни-Курмон
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
More information about the vlc-devel