[vlc-devel] [PATCH 1/4] coreaudio: add ca_MuteSet()

Thomas Guillem thomas at gllm.fr
Thu Apr 22 08:18:54 UTC 2021


On Wed, Apr 21, 2021, at 18:53, Rémi Denis-Courmont wrote:
> Le keskiviikkona 21. huhtikuuta 2021, 18.00.38 EEST Thomas Guillem a écrit :
> > This will write 0s from the render callback without touching at the
> > playback buffer state.
> > ---
> >  modules/audio_output/coreaudio_common.c | 16 +++++++++++++++-
> >  modules/audio_output/coreaudio_common.h |  3 +++
> >  2 files changed, 18 insertions(+), 1 deletion(-)
> > 
> > diff --git a/modules/audio_output/coreaudio_common.c
> > b/modules/audio_output/coreaudio_common.c index fd8ee7279d6..4c96a1ffbd6
> > 100644
> > --- a/modules/audio_output/coreaudio_common.c
> > +++ b/modules/audio_output/coreaudio_common.c
> > @@ -189,7 +189,10 @@ ca_Render(audio_output_t *p_aout, uint32_t i_frames,
> > uint64_t i_host_time, while (p_block != NULL && i_requested != 0)
> >      {
> >          size_t i_tocopy = __MIN(i_requested, p_block->i_buffer);
> > -        memcpy(p_output, p_block->p_buffer, i_tocopy);
> > +        if (unlikely(p_sys->b_muted))
> > +            memset(p_output, 0, i_tocopy);
> > +        else
> > +            memcpy(p_output, p_block->p_buffer, i_tocopy);
> >          i_requested -= i_tocopy;
> >          i_copied += i_tocopy;
> >          p_output += i_tocopy;
> > @@ -299,6 +302,16 @@ ca_Pause(audio_output_t * p_aout, bool pause,
> > vlc_tick_t date) lock_unlock(p_sys);
> >  }
> > 
> > +void
> > +ca_MuteSet(audio_output_t * p_aout, bool muted)
> > +{
> > +    struct aout_sys_common *p_sys = (struct aout_sys_common *) p_aout->sys;
> > +
> > +    lock_lock(p_sys);
> > +    p_sys->b_muted = muted;
> > +    lock_unlock(p_sys);
> > +}
> 
> You'd achieve the same pseudo-racy behaviour with an atomic boolean.

Yes, but the lock is already locked from the read side.

> 
> > +
> >  void
> >  ca_Play(audio_output_t * p_aout, block_t * p_block, vlc_tick_t date)
> >  {
> > @@ -400,6 +413,7 @@ ca_Initialize(audio_output_t *p_aout, const
> > audio_sample_format_t *fmt,
> > 
> >      p_sys->i_underrun_size = 0;
> >      p_sys->b_paused = false;
> > +    p_sys->b_muted = false;
> >      p_sys->i_render_host_time = p_sys->i_first_render_host_time = 0;
> >      p_sys->i_render_frames = 0;
> > 
> > diff --git a/modules/audio_output/coreaudio_common.h
> > b/modules/audio_output/coreaudio_common.h index 4bd61394937..faa3286e1d1
> > 100644
> > --- a/modules/audio_output/coreaudio_common.h
> > +++ b/modules/audio_output/coreaudio_common.h
> > @@ -53,6 +53,7 @@ struct aout_sys_common
> > 
> >      size_t              i_underrun_size;
> >      bool                b_paused;
> > +    bool                b_muted;
> >      bool                b_do_flush;
> > 
> >      size_t              i_out_max_size;
> > @@ -95,6 +96,8 @@ void ca_Flush(audio_output_t *p_aout);
> > 
> >  void ca_Pause(audio_output_t * p_aout, bool pause, vlc_tick_t date);
> > 
> > +void ca_MuteSet(audio_output_t * p_aout, bool mute);
> > +
> >  void ca_Play(audio_output_t * p_aout, block_t * p_block, vlc_tick_t date);
> > 
> >  int  ca_Initialize(audio_output_t *p_aout, const audio_sample_format_t
> > *fmt,
> 
> 
> -- 
> 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