summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_coreaudio.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/out/ao_coreaudio.c')
-rw-r--r--audio/out/ao_coreaudio.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c
index c64261d64a..7f8949d7d9 100644
--- a/audio/out/ao_coreaudio.c
+++ b/audio/out/ao_coreaudio.c
@@ -395,7 +395,23 @@ static int init_lpcm(struct ao *ao, AudioStreamBasicDescription asbd)
kAudioOutputUnitProperty_CurrentDevice,
kAudioUnitScope_Global, 0, &p->device,
sizeof(p->device));
-
+ CHECK_CA_ERROR_L(coreaudio_error_audiounit,
+ "can't link audio unit to selected device");
+
+ if (ao->channels.num > 2) {
+ // No need to set a channel layout for mono and stereo inputs
+ AudioChannelLayout acl = (AudioChannelLayout) {
+ .mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelBitmap,
+ .mChannelBitmap = mp_chmap_to_waveext(&ao->channels)
+ };
+
+ err = AudioUnitSetProperty(p->audio_unit,
+ kAudioUnitProperty_AudioChannelLayout,
+ kAudioUnitScope_Input, 0, &acl,
+ sizeof(AudioChannelLayout));
+ CHECK_CA_ERROR_L(coreaudio_error_audiounit,
+ "can't set channel layout bitmap into audio unit");
+ }
p->buffer = mp_ring_new(p, get_ring_size(ao));
print_buffer(p->buffer);