diff options
author | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2013-07-03 18:49:02 +0200 |
---|---|---|
committer | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2013-07-22 21:53:18 +0200 |
commit | 4d15f1bb60083d53a67f1e718ce6643631e3a8ce (patch) | |
tree | 2ccd3ed297331bbcf10037c2810dff2079772843 /audio/out | |
parent | 24cad4236364ebe8d5919de339e5e44f9e27b5d5 (diff) |
ao_coreaudio: set channel layout bitmap
Diffstat (limited to 'audio/out')
-rw-r--r-- | audio/out/ao_coreaudio.c | 18 |
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); |