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));