vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue May 31 18:15:39 2011 +0300| [a822a430136503c41d65834df8394a7fcbab4079] | committer: Rémi Denis-Courmont
Pass mixer multiplier as argument > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a822a430136503c41d65834df8394a7fcbab4079 --- include/vlc_aout_mixer.h | 7 +------ modules/audio_mixer/float32.c | 8 +++++--- modules/audio_mixer/spdif.c | 7 ++++--- modules/audio_mixer/trivial.c | 6 ++++-- src/audio_output/aout_internal.h | 3 +-- src/audio_output/dec.c | 4 +--- src/audio_output/intf.c | 2 +- src/audio_output/mixer.c | 22 ++++------------------ 8 files changed, 21 insertions(+), 38 deletions(-) diff --git a/include/vlc_aout_mixer.h b/include/vlc_aout_mixer.h index 002a712..9e3f421 100644 --- a/include/vlc_aout_mixer.h +++ b/include/vlc_aout_mixer.h @@ -72,16 +72,11 @@ struct aout_mixer_t { */ audio_sample_format_t fmt; - /* Multiplier used to raise or lower the volume of the sound in - * software. - */ - float multiplier; - /* Array of mixer inputs */ aout_mixer_input_t *input; /* Mix requested number of samples (mandatory) */ - aout_buffer_t *(*mix)(aout_mixer_t *, unsigned); + aout_buffer_t *(*mix)(aout_mixer_t *, unsigned, float); /* Private place holder for the aout_mixer_t module (optional) * diff --git a/modules/audio_mixer/float32.c b/modules/audio_mixer/float32.c index d2f3174..7ede585 100644 --- a/modules/audio_mixer/float32.c +++ b/modules/audio_mixer/float32.c @@ -39,7 +39,7 @@ * Local prototypes *****************************************************************************/ static int Create ( vlc_object_t * ); -static aout_buffer_t *DoWork( aout_mixer_t *, unsigned ); +static aout_buffer_t *DoWork( aout_mixer_t *, unsigned, float ); /***************************************************************************** * Module descriptor @@ -88,10 +88,10 @@ static void ScaleWords( float * p_out, const float * p_in, size_t i_nb_words, * Terminology : in this function a word designates a single float32, eg. * a stereo sample is consituted of two words. *****************************************************************************/ -static aout_buffer_t *DoWork( aout_mixer_t * p_mixer, unsigned samples ) +static aout_buffer_t *DoWork( aout_mixer_t * p_mixer, unsigned samples, + float f_multiplier ) { aout_mixer_input_t * p_input = p_mixer->input; - float f_multiplier = p_mixer->multiplier * p_input->multiplier; const int i_nb_channels = aout_FormatNbChannels( &p_mixer->fmt ); int i_nb_words = samples * i_nb_channels; @@ -103,6 +103,8 @@ static aout_buffer_t *DoWork( aout_mixer_t * p_mixer, unsigned samples ) float * p_out = (float *)p_buffer->p_buffer; float * p_in = (float *)p_input->begin; + f_multiplier *= p_input->multiplier; + for( ; ; ) { ptrdiff_t i_available_words = ( diff --git a/modules/audio_mixer/spdif.c b/modules/audio_mixer/spdif.c index cd1906a..22f3782 100644 --- a/modules/audio_mixer/spdif.c +++ b/modules/audio_mixer/spdif.c @@ -41,7 +41,7 @@ *****************************************************************************/ static int Create ( vlc_object_t * ); -static aout_buffer_t *DoWork( aout_mixer_t *, unsigned ); +static aout_buffer_t *DoWork( aout_mixer_t *, unsigned, float ); /***************************************************************************** * Module descriptor @@ -71,11 +71,12 @@ static int Create( vlc_object_t *p_this ) /***************************************************************************** * DoWork: mix a new output buffer - this does nothing, indeed *****************************************************************************/ -static aout_buffer_t *DoWork( aout_mixer_t * p_mixer, unsigned samples ) +static aout_buffer_t *DoWork( aout_mixer_t * p_mixer, unsigned samples, + float multiplier ) { aout_mixer_input_t * p_input = p_mixer->input; aout_buffer_t * p_old_buffer = aout_FifoPop( NULL, &p_input->fifo ); - (void) samples; + (void) samples; (void) multiplier; return p_old_buffer; } diff --git a/modules/audio_mixer/trivial.c b/modules/audio_mixer/trivial.c index 01581ac..1a770fa 100644 --- a/modules/audio_mixer/trivial.c +++ b/modules/audio_mixer/trivial.c @@ -40,7 +40,7 @@ *****************************************************************************/ static int Create ( vlc_object_t * ); -static aout_buffer_t *DoWork( aout_mixer_t *, unsigned samples ); +static aout_buffer_t *DoWork( aout_mixer_t *, unsigned samples, float ); /***************************************************************************** * Module descriptor @@ -71,7 +71,8 @@ static int Create( vlc_object_t *p_this ) /***************************************************************************** * DoWork: mix a new output buffer *****************************************************************************/ -static aout_buffer_t *DoWork( aout_mixer_t *p_mixer, unsigned samples ) +static aout_buffer_t *DoWork( aout_mixer_t *p_mixer, unsigned samples, + float multiplier ) { aout_mixer_input_t *p_input = p_mixer->input; int i_nb_channels = aout_FormatNbChannels( &p_mixer->fmt ); @@ -118,5 +119,6 @@ static aout_buffer_t *DoWork( aout_mixer_t *p_mixer, unsigned samples ) break; } } + (void) multiplier; return p_buffer; } diff --git a/src/audio_output/aout_internal.h b/src/audio_output/aout_internal.h index 57d542d..74578ea 100644 --- a/src/audio_output/aout_internal.h +++ b/src/audio_output/aout_internal.h @@ -111,8 +111,7 @@ void aout_FiltersPlay( filter_t *const *, unsigned, aout_buffer_t ** ); /* From mixer.c : */ int aout_MixerNew( aout_instance_t * p_aout ); void aout_MixerDelete( aout_instance_t * p_aout ); -void aout_MixerRun( aout_instance_t * p_aout ); -void aout_MixerMultiplierSet( aout_instance_t * p_aout, float f_multiplier ); +void aout_MixerRun( aout_instance_t * p_aout, float ); /* From output.c : */ int aout_OutputNew( aout_instance_t * p_aout, diff --git a/src/audio_output/dec.c b/src/audio_output/dec.c index ecf81b8..cdd1844 100644 --- a/src/audio_output/dec.c +++ b/src/audio_output/dec.c @@ -293,9 +293,7 @@ int aout_DecPlay( aout_instance_t * p_aout, aout_input_t * p_input, /* Run the mixer if it is able to run. */ aout_lock_mixer( p_aout ); - - aout_MixerRun( p_aout ); - + aout_MixerRun( p_aout, p_aout->mixer_multiplier ); aout_unlock_mixer( p_aout ); return 0; diff --git a/src/audio_output/intf.c b/src/audio_output/intf.c index d21c1e1..29a6c49 100644 --- a/src/audio_output/intf.c +++ b/src/audio_output/intf.c @@ -245,7 +245,7 @@ static int aout_VolumeSoftSet (aout_instance_t *aout, audio_volume_t volume, bool mute) { float f = mute ? 0. : (volume / (float)AOUT_VOLUME_DEFAULT); - aout_MixerMultiplierSet (aout, f); + aout->mixer_multiplier = f; return 0; } diff --git a/src/audio_output/mixer.c b/src/audio_output/mixer.c index cda7b58..fd354cd 100644 --- a/src/audio_output/mixer.c +++ b/src/audio_output/mixer.c @@ -51,7 +51,6 @@ int aout_MixerNew( aout_instance_t * p_aout ) return VLC_EGENERIC; p_mixer->fmt = p_aout->mixer_format; - p_mixer->multiplier = p_aout->mixer_multiplier; p_mixer->input = &p_aout->pp_inputs[0]->mixer; p_mixer->mix = NULL; p_mixer->sys = NULL; @@ -92,7 +91,7 @@ void aout_MixerDelete( aout_instance_t * p_aout ) ***************************************************************************** * Please note that you must hold the mixer lock. *****************************************************************************/ -static int MixBuffer( aout_instance_t * p_aout ) +static int MixBuffer( aout_instance_t * p_aout, float volume ) { int i, i_first_input = 0; mtime_t start_date, end_date; @@ -322,7 +321,7 @@ static int MixBuffer( aout_instance_t * p_aout ) /* Run the mixer. */ aout_buffer_t * p_outbuf; p_outbuf = p_aout->p_mixer->mix( p_aout->p_mixer, - p_aout->output.i_nb_samples ); + p_aout->output.i_nb_samples, volume ); aout_unlock_input_fifos( p_aout ); if( unlikely(p_outbuf == NULL) ) @@ -339,20 +338,7 @@ static int MixBuffer( aout_instance_t * p_aout ) ***************************************************************************** * Please note that you must hold the mixer lock. *****************************************************************************/ -void aout_MixerRun( aout_instance_t * p_aout ) +void aout_MixerRun( aout_instance_t * p_aout, float volume ) { - while( MixBuffer( p_aout ) != -1 ); -} - -/***************************************************************************** - * aout_MixerMultiplierSet: set p_aout->mixer.f_multiplier - ***************************************************************************** - * Please note that we assume that you own the mixer lock when entering this - * function. This function returns -1 on error. - *****************************************************************************/ -void aout_MixerMultiplierSet( aout_instance_t * p_aout, float f_multiplier ) -{ - p_aout->mixer_multiplier = f_multiplier; - if( p_aout->p_mixer ) - p_aout->p_mixer->multiplier = f_multiplier; + while( MixBuffer( p_aout, volume ) != -1 ); } _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
