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