]> git.sesse.net Git - vlc/blobdiff - modules/audio_output/auhal.c
* backport of [11356]
[vlc] / modules / audio_output / auhal.c
index bb446e47f36f5158407f3bd8cbdc94241cd726fb..6b5a242df14a12359b957827cb950c4e93cdeaaa 100644 (file)
@@ -2,7 +2,7 @@
  * auhal.c: AUHAL output plugin
  *****************************************************************************
  * Copyright (C) 2005 VideoLAN
- * $Id: coreaudio.c 10101 2005-03-02 16:47:31Z robux4 $
+ * $Id$
  *
  * Authors: Derk-Jan Hartman <hartman at videolan dot org>
  *
@@ -289,10 +289,10 @@ static int Open( vlc_object_t * p_this )
             case kAudioChannelLabel_RightSurround:
                 p_aout->output.output.i_physical_channels |= AOUT_CHAN_REARRIGHT;
                 continue;
-            case kAudioChannelLabel_LeftCenter:
+            case kAudioChannelLabel_RearSurroundLeft:
                 p_aout->output.output.i_physical_channels |= AOUT_CHAN_MIDDLELEFT;
                 continue;
-            case kAudioChannelLabel_RightCenter:
+            case kAudioChannelLabel_RearSurroundRight:
                 p_aout->output.output.i_physical_channels |= AOUT_CHAN_MIDDLERIGHT;
                 continue;
             case kAudioChannelLabel_CenterSurround:
@@ -300,36 +300,40 @@ static int Open( vlc_object_t * p_this )
                 continue;
             default:
                 msg_Warn( p_aout, "Unrecognized channel form provided by driver: %d", (int)layout->mChannelDescriptions[i].mChannelLabel );
-                switch( layout->mNumberChannelDescriptions )
+                if( i == 0 )
                 {
-                    /* We make assumptions based on number of channels here.
-                     * Unfortunatly Apple has provided no 100% method to retrieve the speaker configuration */
-                    case 1:
-                        p_aout->output.output.i_physical_channels = AOUT_CHAN_CENTER;
-                        break;
-                    case 4:
-                        p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
-                                                                    AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
-                        break;
-                    case 6:
-                        p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
-                                                                    AOUT_CHAN_CENTER | AOUT_CHAN_LFE |
-                                                                    AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
-                        break;
-                    case 7:
-                        p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
-                                                                    AOUT_CHAN_CENTER | AOUT_CHAN_LFE |
-                                                                    AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_REARCENTER;
-                        break;
-                    case 8:
-                        p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
-                                                                    AOUT_CHAN_CENTER | AOUT_CHAN_LFE |
-                                                                    AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT |
-                                                                    AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
-                        break;
-                    case 2:
-                    default:
-                        p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
+                    msg_Warn( p_aout, "Probably no channellayout is set. force based on channelcount" );
+                    switch( layout->mNumberChannelDescriptions )
+                    {
+                        /* We make assumptions based on number of channels here.
+                         * Unfortunatly Apple has provided no 100% method to retrieve the speaker configuration */
+                        case 1:
+                            p_aout->output.output.i_physical_channels = AOUT_CHAN_CENTER;
+                            break;
+                        case 4:
+                            p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
+                                                                        AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
+                            break;
+                        case 6:
+                            p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
+                                                                        AOUT_CHAN_CENTER | AOUT_CHAN_LFE |
+                                                                        AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
+                            break;
+                        case 7:
+                            p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
+                                                                        AOUT_CHAN_CENTER | AOUT_CHAN_LFE |
+                                                                        AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_REARCENTER;
+                            break;
+                        case 8:
+                            p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
+                                                                        AOUT_CHAN_CENTER | AOUT_CHAN_LFE |
+                                                                        AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT |
+                                                                        AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
+                            break;
+                        case 2:
+                        default:
+                            p_aout->output.output.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
+                    }
                 }
                 break;
         }