From 80ec0ba6d05df65df42c3a7f74c5e2987cb682d7 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Wed, 2 Jul 2014 08:02:00 +0200 Subject: ao_coreaudio: fill asbd with an helper function --- audio/out/ao_coreaudio.c | 21 +-------------------- audio/out/ao_coreaudio_device.c | 20 +------------------- audio/out/ao_coreaudio_utils.c | 26 ++++++++++++++++++++++++++ audio/out/ao_coreaudio_utils.h | 1 + 4 files changed, 29 insertions(+), 39 deletions(-) diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c index 615bb41fa0..7f3b70c15a 100644 --- a/audio/out/ao_coreaudio.c +++ b/audio/out/ao_coreaudio.c @@ -127,26 +127,7 @@ static int init(struct ao *ao) // Build ASBD for the input format AudioStreamBasicDescription asbd; - asbd.mSampleRate = ao->samplerate; - asbd.mFormatID = kAudioFormatLinearPCM; - asbd.mChannelsPerFrame = ao->channels.num; - asbd.mBitsPerChannel = af_fmt2bits(ao->format); - asbd.mFormatFlags = kAudioFormatFlagIsPacked; - - if ((ao->format & AF_FORMAT_POINT_MASK) == AF_FORMAT_F) - asbd.mFormatFlags |= kAudioFormatFlagIsFloat; - - if ((ao->format & AF_FORMAT_SIGN_MASK) == AF_FORMAT_SI) - asbd.mFormatFlags |= kAudioFormatFlagIsSignedInteger; - - if ((ao->format & AF_FORMAT_END_MASK) == AF_FORMAT_BE) - asbd.mFormatFlags |= kAudioFormatFlagIsBigEndian; - - asbd.mFramesPerPacket = 1; - asbd.mBytesPerPacket = asbd.mBytesPerFrame = - asbd.mFramesPerPacket * asbd.mChannelsPerFrame * - (asbd.mBitsPerChannel / 8); - + ca_fill_asbd(ao, &asbd); return init_lpcm(ao, asbd); coreaudio_error: diff --git a/audio/out/ao_coreaudio_device.c b/audio/out/ao_coreaudio_device.c index a0610a34d5..047e094f61 100644 --- a/audio/out/ao_coreaudio_device.c +++ b/audio/out/ao_coreaudio_device.c @@ -432,25 +432,7 @@ static int init(struct ao *ao) // Build ASBD for the input format AudioStreamBasicDescription asbd; - asbd.mSampleRate = ao->samplerate; - asbd.mFormatID = kAudioFormat60958AC3; - asbd.mChannelsPerFrame = ao->channels.num; - asbd.mBitsPerChannel = af_fmt2bits(ao->format); - asbd.mFormatFlags = kAudioFormatFlagIsPacked; - - if ((ao->format & AF_FORMAT_POINT_MASK) == AF_FORMAT_F) - asbd.mFormatFlags |= kAudioFormatFlagIsFloat; - - if ((ao->format & AF_FORMAT_SIGN_MASK) == AF_FORMAT_SI) - asbd.mFormatFlags |= kAudioFormatFlagIsSignedInteger; - - if ((ao->format & AF_FORMAT_END_MASK) == AF_FORMAT_BE) - asbd.mFormatFlags |= kAudioFormatFlagIsBigEndian; - - asbd.mFramesPerPacket = 1; - asbd.mBytesPerPacket = asbd.mBytesPerFrame = - asbd.mFramesPerPacket * asbd.mChannelsPerFrame * - (asbd.mBitsPerChannel / 8); + ca_fill_asbd(ao, &asbd); return init_digital(ao, asbd); diff --git a/audio/out/ao_coreaudio_utils.c b/audio/out/ao_coreaudio_utils.c index f5cc43db0b..235e7fba42 100644 --- a/audio/out/ao_coreaudio_utils.c +++ b/audio/out/ao_coreaudio_utils.c @@ -25,6 +25,7 @@ #include "audio/out/ao_coreaudio_utils.h" #include "audio/out/ao_coreaudio_properties.h" #include "osdep/timer.h" +#include "audio/format.h" void ca_print_device_list(struct ao *ao) { @@ -125,6 +126,31 @@ bool check_ca_st(struct ao *ao, int level, OSStatus code, const char *message) return false; } +void ca_fill_asbd(struct ao *ao, AudioStreamBasicDescription *asbd) +{ + asbd->mSampleRate = ao->samplerate; + asbd->mFormatID = AF_FORMAT_IS_AC3(ao->format) ? + kAudioFormat60958AC3 : + kAudioFormatLinearPCM; + asbd->mChannelsPerFrame = ao->channels.num; + asbd->mBitsPerChannel = af_fmt2bits(ao->format); + asbd->mFormatFlags = kAudioFormatFlagIsPacked; + + if ((ao->format & AF_FORMAT_POINT_MASK) == AF_FORMAT_F) + asbd->mFormatFlags |= kAudioFormatFlagIsFloat; + + if ((ao->format & AF_FORMAT_SIGN_MASK) == AF_FORMAT_SI) + asbd->mFormatFlags |= kAudioFormatFlagIsSignedInteger; + + if ((ao->format & AF_FORMAT_END_MASK) == AF_FORMAT_BE) + asbd->mFormatFlags |= kAudioFormatFlagIsBigEndian; + + asbd->mFramesPerPacket = 1; + asbd->mBytesPerPacket = asbd->mBytesPerFrame = + asbd->mFramesPerPacket * asbd->mChannelsPerFrame * + (asbd->mBitsPerChannel / 8); +} + void ca_print_asbd(struct ao *ao, const char *description, const AudioStreamBasicDescription *asbd) { diff --git a/audio/out/ao_coreaudio_utils.h b/audio/out/ao_coreaudio_utils.h index b9b65eb5be..6d0f65c455 100644 --- a/audio/out/ao_coreaudio_utils.h +++ b/audio/out/ao_coreaudio_utils.h @@ -49,6 +49,7 @@ bool check_ca_st(struct ao *ao, int level, OSStatus code, const char *message); void ca_print_device_list(struct ao *ao); OSStatus ca_select_device(struct ao *ao, int selection, AudioDeviceID *device); +void ca_fill_asbd(struct ao *ao, AudioStreamBasicDescription *asbd); void ca_print_asbd(struct ao *ao, const char *description, const AudioStreamBasicDescription *asbd); -- cgit v1.2.3