[vlc-commits] DirectSound: simplify channels configuration a bit

Rémi Denis-Courmont git at videolan.org
Sat Oct 20 14:40:41 CEST 2012


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Oct 20 15:40:07 2012 +0300| [c2fedcc44d9b8419eb3ed1b60545569f51347606] | committer: Rémi Denis-Courmont

DirectSound: simplify channels configuration a bit

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c2fedcc44d9b8419eb3ed1b60545569f51347606
---

 modules/audio_output/directx.c |   97 +++++++++++-----------------------------
 1 file changed, 26 insertions(+), 71 deletions(-)

diff --git a/modules/audio_output/directx.c b/modules/audio_output/directx.c
index bd53682..7aaa5c1 100644
--- a/modules/audio_output/directx.c
+++ b/modules/audio_output/directx.c
@@ -108,7 +108,7 @@ static int  MuteSet    ( audio_output_t *, bool );
 static void Probe             ( audio_output_t * );
 static int  InitDirectSound   ( audio_output_t * );
 static int  CreateDSBuffer    ( audio_output_t *, int, int, int, int, int, bool );
-static int  CreateDSBufferPCM ( audio_output_t *, vlc_fourcc_t*, int, int, int, bool );
+static int  CreateDSBufferPCM ( audio_output_t *, vlc_fourcc_t*, int, int, bool );
 static void DestroyDSBuffer   ( audio_output_t * );
 static void* DirectSoundThread( void * );
 static int  FillBuffer        ( audio_output_t *, int, block_t * );
@@ -245,45 +245,20 @@ static int OpenAudio( vlc_object_t *p_this )
     else
     {
         if( val.i_int == AOUT_VAR_5_1 )
-        {
-            p_aout->format.i_physical_channels
-                = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
-                   | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT
-                   | AOUT_CHAN_LFE;
-        }
+            p_aout->format.i_physical_channels = AOUT_CHANS_5_0;
         else if( val.i_int == AOUT_VAR_7_1 )
-        {
-                    p_aout->format.i_physical_channels
-                        = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
-                           | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT
-                           | AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT
-                           | AOUT_CHAN_LFE;
-        }
+            p_aout->format.i_physical_channels = AOUT_CHANS_7_1;
         else if( val.i_int == AOUT_VAR_3F2R )
-        {
-            p_aout->format.i_physical_channels
-                = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
-                   | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
-        }
+            p_aout->format.i_physical_channels = AOUT_CHANS_5_0;
         else if( val.i_int == AOUT_VAR_2F2R )
-        {
-            p_aout->format.i_physical_channels
-                = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT
-                   | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
-        }
+            p_aout->format.i_physical_channels = AOUT_CHANS_4_0;
         else if( val.i_int == AOUT_VAR_MONO )
-        {
             p_aout->format.i_physical_channels = AOUT_CHAN_CENTER;
-        }
         else
-        {
-            p_aout->format.i_physical_channels
-                = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
-        }
+            p_aout->format.i_physical_channels = AOUT_CHANS_2_0;
 
         if( CreateDSBufferPCM( p_aout, &p_aout->format.i_format,
                                p_aout->format.i_physical_channels,
-                               aout_FormatNbChannels( &p_aout->format ),
                                p_aout->format.i_rate, false )
             != VLC_SUCCESS )
         {
@@ -351,7 +326,6 @@ static void Probe( audio_output_t * p_aout )
 {
     vlc_value_t val, text;
     vlc_fourcc_t i_format;
-    unsigned int i_physical_channels;
     DWORD ui_speaker_config;
     bool is_default_output_set = false;
 
@@ -360,14 +334,10 @@ static void Probe( audio_output_t * p_aout )
     var_Change( p_aout, "audio-device", VLC_VAR_SETTEXT, &text, NULL );
 
     /* Test for 5.1 support */
-    i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
-                          AOUT_CHAN_CENTER | AOUT_CHAN_REARLEFT |
-                          AOUT_CHAN_REARRIGHT | AOUT_CHAN_LFE;
-    if( p_aout->format.i_physical_channels == i_physical_channels )
+    if( p_aout->format.i_physical_channels == AOUT_CHANS_5_1 )
     {
-        if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 6,
-                               p_aout->format.i_rate, true )
-            == VLC_SUCCESS )
+        if( CreateDSBufferPCM( p_aout, &i_format, AOUT_CHANS_5_1,
+                               p_aout->format.i_rate, true ) == VLC_SUCCESS )
         {
             val.i_int = AOUT_VAR_5_1;
             text.psz_string = (char*) "5.1";
@@ -380,15 +350,10 @@ static void Probe( audio_output_t * p_aout )
     }
 
     /* Test for 7.1 support */
-    i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
-                             AOUT_CHAN_CENTER | AOUT_CHAN_REARLEFT |
-                             AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT |
-                             AOUT_CHAN_REARRIGHT | AOUT_CHAN_LFE;
-    if( p_aout->format.i_physical_channels == i_physical_channels )
+    if( p_aout->format.i_physical_channels == AOUT_CHANS_7_1 )
     {
-        if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 8,
-                                  p_aout->format.i_rate, true )
-            == VLC_SUCCESS )
+        if( CreateDSBufferPCM( p_aout, &i_format, AOUT_CHANS_7_1,
+                               p_aout->format.i_rate, true ) == VLC_SUCCESS )
         {
             val.i_int = AOUT_VAR_7_1;
             text.psz_string = (char*) "7.1";
@@ -401,14 +366,10 @@ static void Probe( audio_output_t * p_aout )
     }
 
     /* Test for 3 Front 2 Rear support */
-    i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
-                          AOUT_CHAN_CENTER | AOUT_CHAN_REARLEFT |
-                          AOUT_CHAN_REARRIGHT;
-    if( p_aout->format.i_physical_channels == i_physical_channels )
+    if( p_aout->format.i_physical_channels == AOUT_CHANS_5_0 )
     {
-        if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 5,
-                               p_aout->format.i_rate, true )
-            == VLC_SUCCESS )
+        if( CreateDSBufferPCM( p_aout, &i_format, AOUT_CHANS_5_0,
+                               p_aout->format.i_rate, true ) == VLC_SUCCESS )
         {
             val.i_int = AOUT_VAR_3F2R;
             text.psz_string = _("3 Front 2 Rear");
@@ -424,14 +385,11 @@ static void Probe( audio_output_t * p_aout )
     }
 
     /* Test for 2 Front 2 Rear support */
-    i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
-                          AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
-    if( ( p_aout->format.i_physical_channels & i_physical_channels )
-        == i_physical_channels )
+    if( ( p_aout->format.i_physical_channels & AOUT_CHANS_4_0 )
+                                                            == AOUT_CHANS_4_0 )
     {
-        if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 4,
-                               p_aout->format.i_rate, true )
-            == VLC_SUCCESS )
+        if( CreateDSBufferPCM( p_aout, &i_format, AOUT_CHANS_4_0,
+                               p_aout->format.i_rate, true ) == VLC_SUCCESS )
         {
             val.i_int = AOUT_VAR_2F2R;
             text.psz_string = _("2 Front 2 Rear");
@@ -447,10 +405,8 @@ static void Probe( audio_output_t * p_aout )
     }
 
     /* Test for stereo support */
-    i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
-    if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 2,
-                           p_aout->format.i_rate, true )
-        == VLC_SUCCESS )
+    if( CreateDSBufferPCM( p_aout, &i_format, AOUT_CHANS_2_0,
+                           p_aout->format.i_rate, true ) == VLC_SUCCESS )
     {
         val.i_int = AOUT_VAR_STEREO;
         text.psz_string = _("Stereo");
@@ -465,10 +421,8 @@ static void Probe( audio_output_t * p_aout )
     }
 
     /* Test for mono support */
-    i_physical_channels = AOUT_CHAN_CENTER;
-    if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 1,
-                           p_aout->format.i_rate, true )
-        == VLC_SUCCESS )
+    if( CreateDSBufferPCM( p_aout, &i_format, AOUT_CHAN_CENTER,
+                           p_aout->format.i_rate, true ) == VLC_SUCCESS )
     {
         val.i_int = AOUT_VAR_MONO;
         text.psz_string = _("Mono");
@@ -940,9 +894,10 @@ static int CreateDSBuffer( audio_output_t *p_aout, int i_format,
  * the hardware, otherwise we create a WAVE_FORMAT_PCM buffer.
  ****************************************************************************/
 static int CreateDSBufferPCM( audio_output_t *p_aout, vlc_fourcc_t *i_format,
-                              int i_channels, int i_nb_channels, int i_rate,
-                              bool b_probe )
+                              int i_channels, int i_rate, bool b_probe )
 {
+    unsigned i_nb_channels = popcount( i_channels );
+
     /* Float32 audio samples are not supported for 5.1 output on the emu101k */
     if( !var_GetBool( p_aout, "directx-audio-float32" ) ||
         i_nb_channels > 2 ||



More information about the vlc-commits mailing list