[vlc-commits] aout: use atomic variable for replay gain
Rémi Denis-Courmont
git at videolan.org
Tue Aug 9 18:02:35 CEST 2011
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Aug 9 18:48:57 2011 +0300| [d3f19266f3391dd428968225277ead901711916b] | committer: Rémi Denis-Courmont
aout: use atomic variable for replay gain
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d3f19266f3391dd428968225277ead901711916b
---
src/audio_output/aout_internal.h | 3 ++-
src/audio_output/dec.c | 3 ++-
src/audio_output/input.c | 17 ++++++++++-------
3 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/src/audio_output/aout_internal.h b/src/audio_output/aout_internal.h
index 5e03097..310a6f1 100644
--- a/src/audio_output/aout_internal.h
+++ b/src/audio_output/aout_internal.h
@@ -51,7 +51,7 @@ block_t *aout_FilterBufferNew( filter_t *, int );
/** an input stream for the audio output */
struct aout_input_t
{
- float multiplier; /**< Replay gain multiplier */
+ vlc_atomic_t multiplier; /**< Replay gain multiplier */
unsigned samplerate; /**< Input sample rate */
/* pre-filters */
@@ -134,6 +134,7 @@ int aout_InputNew(audio_output_t *, const audio_sample_format_t *,
int aout_InputDelete( audio_output_t * p_aout, aout_input_t * p_input );
block_t *aout_InputPlay( audio_output_t *p_aout, aout_input_t *p_input,
block_t *p_buffer, int i_input_rate, date_t * );
+float aout_InputGetMultiplier(const aout_input_t *);
/* From filters.c : */
int aout_FiltersCreatePipeline( vlc_object_t *, filter_t **, int *,
diff --git a/src/audio_output/dec.c b/src/audio_output/dec.c
index bd7f1cd..c2077a0 100644
--- a/src/audio_output/dec.c
+++ b/src/audio_output/dec.c
@@ -273,7 +273,8 @@ int aout_DecPlay (audio_output_t *p_aout, block_t *p_buffer, int i_input_rate)
date_Increment (&owner->sync.date, p_buffer->i_nb_samples);
/* Mixer */
- float amp = owner->volume.multiplier * p_input->multiplier;
+ float amp = owner->volume.multiplier
+ * aout_InputGetMultiplier (p_input);
aout_MixerRun (owner->volume.mixer, p_buffer, amp);
/* Output */
diff --git a/src/audio_output/input.c b/src/audio_output/input.c
index 4cc4b55..918ca97 100644
--- a/src/audio_output/input.c
+++ b/src/audio_output/input.c
@@ -41,9 +41,9 @@
#include <vlc_input.h>
#include <vlc_vout.h> /* for vout_Request */
#include <vlc_modules.h>
-
#include <vlc_aout.h>
#include <vlc_filter.h>
+#include <vlc_atomic.h>
#include <libvlc.h>
#include "aout_internal.h"
@@ -210,8 +210,9 @@ int aout_InputNew( audio_output_t * p_aout,
}
char *gain = var_InheritString (p_aout, "audio-replay-gain-mode");
- p_input->multiplier = ReplayGainSelect (VLC_OBJECT(p_aout), gain,
- &p_input->replay_gain);
+ vlc_atomic_setf (&p_input->multiplier,
+ ReplayGainSelect (VLC_OBJECT(p_aout), gain,
+ &p_input->replay_gain));
free (gain);
if( var_Type( p_aout, "audio-replay-gain-preamp" ) == 0 )
@@ -824,17 +825,19 @@ static int EqualizerCallback (vlc_object_t *obj, char const *cmd,
return VLC_SUCCESS;
}
+float aout_InputGetMultiplier (const aout_input_t *input)
+{
+ return vlc_atomic_getf (&input->multiplier);
+}
+
static int ReplayGainCallback (vlc_object_t *obj, char const *var,
vlc_value_t oldval, vlc_value_t val, void *data)
{
- audio_output_t *aout = (audio_output_t *)obj;
aout_input_t *input = data;
float multiplier = ReplayGainSelect (obj, val.psz_string,
&input->replay_gain);
- aout_lock (aout);
- input->multiplier = multiplier;
- aout_unlock (aout);
+ vlc_atomic_setf (&input->multiplier, multiplier);
VLC_UNUSED(var); VLC_UNUSED(oldval);
return VLC_SUCCESS;
More information about the vlc-commits
mailing list