SDL: Corrected CoreAudio surround sound channel layouts (348bb)

From 348bb53cc1b6981a3b4f9beb02c3e2b77b56827b Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 24 Dec 2024 15:03:25 -0800
Subject: [PATCH] Corrected CoreAudio surround sound channel layouts

Fixes https://github.com/libsdl-org/SDL/issues/11709

(cherry picked from commit b2178857dcd6c4ba230266c92da36ef288ba1837)
---
 src/audio/coreaudio/SDL_coreaudio.m | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/audio/coreaudio/SDL_coreaudio.m b/src/audio/coreaudio/SDL_coreaudio.m
index aaabeaae54c3b..64c17d00004b5 100644
--- a/src/audio/coreaudio/SDL_coreaudio.m
+++ b/src/audio/coreaudio/SDL_coreaudio.m
@@ -857,30 +857,39 @@ static int prepare_audioqueue(_THIS)
     SDL_zero(layout);
     switch (this->spec.channels) {
     case 1:
+        // a standard mono stream
         layout.mChannelLayoutTag = kAudioChannelLayoutTag_Mono;
         break;
     case 2:
+        // a standard stereo stream (L R) - implied playback
         layout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;
         break;
     case 3:
+        // L R LFE
         layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_4;
         break;
     case 4:
+        // front left, front right, back left, back right
         layout.mChannelLayoutTag = kAudioChannelLayoutTag_Quadraphonic;
         break;
     case 5:
-        layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_0_A;
+        // L R LFE Ls Rs
+        layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_6;
         break;
     case 6:
-        layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_1_A;
+        //  L R C LFE Ls Rs
+        layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_12;
         break;
     case 7:
-        /* FIXME: Need to move channel[4] (BC) to channel[6] */
-        layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_6_1_A;
+        // L R C LFE Cs Ls Rs
+        layout.mChannelLayoutTag = kAudioChannelLayoutTag_WAVE_6_1;
         break;
     case 8:
-        layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_7_1_A;
+        // L R C LFE Rls Rrs Ls Rs
+        layout.mChannelLayoutTag = kAudioChannelLayoutTag_WAVE_7_1;
         break;
+    default:
+        return SDL_SetError("Unsupported audio channels");
     }
     if (layout.mChannelLayoutTag != 0) {
         result = AudioQueueSetProperty(this->hidden->audioQueue, kAudioQueueProperty_ChannelLayout, &layout, sizeof(layout));