]> git.sesse.net Git - vlc/commitdiff
Pass mixer multiplier as argument
authorRémi Denis-Courmont <remi@remlab.net>
Tue, 31 May 2011 15:15:39 +0000 (18:15 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 31 May 2011 15:19:54 +0000 (18:19 +0300)
include/vlc_aout_mixer.h
modules/audio_mixer/float32.c
modules/audio_mixer/spdif.c
modules/audio_mixer/trivial.c
src/audio_output/aout_internal.h
src/audio_output/dec.c
src/audio_output/intf.c
src/audio_output/mixer.c

index 002a712c02e1ab24b2c6397afe2e853dd63b3b91..9e3f4215a8b7606254e5a448539f8651861e42c5 100644 (file)
@@ -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)
      *
index d2f3174430b354d2ffc07773705d214c562c3191..7ede585cee2c14e51b9734d36bee9e358ac62a18 100644 (file)
@@ -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 = (
index cd1906a7335aecc64b71cfca7d1225c220abd3cd..22f3782961190193f0dd45b96738692087f63fbf 100644 (file)
@@ -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;
 }
index 01581ac7bec2ca920af7c3577b90692198c76284..1a770fadb0874fa123819b8d37a6b84933f15fba 100644 (file)
@@ -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;
 }
index 57d542de9d7b6ad0fc781c9b59493c36819de0de..74578ea1467beb27b5ddc9d0277ef98d010ed0dc 100644 (file)
@@ -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,
index ecf81b8dbbc3a7def3ecf5d1652d90320694b004..cdd1844de9e38fdbfcd4317cec48583a241c1557 100644 (file)
@@ -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;
index d21c1e18b1169e1cf6503813125a935e1d713b6a..29a6c4927d999bc015afadc2169e97d7a14ae64d 100644 (file)
@@ -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;
 }
 
index cda7b5814548d8aa3d5fdd3d036c1e560eab24ab..fd354cd29337270dc1ec2cb02a44d3187c2125f7 100644 (file)
@@ -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 );
 }