summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2014-07-02 08:02:00 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2014-07-02 21:43:07 +0200
commit80ec0ba6d05df65df42c3a7f74c5e2987cb682d7 (patch)
tree035713baeba2f0a03d373fdda1277cbc410da9a8
parentfa85bfde6943e5d2955830cd5e51f24210022719 (diff)
downloadmpv-80ec0ba6d05df65df42c3a7f74c5e2987cb682d7.tar.bz2
mpv-80ec0ba6d05df65df42c3a7f74c5e2987cb682d7.tar.xz
ao_coreaudio: fill asbd with an helper function
-rw-r--r--audio/out/ao_coreaudio.c21
-rw-r--r--audio/out/ao_coreaudio_device.c20
-rw-r--r--audio/out/ao_coreaudio_utils.c26
-rw-r--r--audio/out/ao_coreaudio_utils.h1
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);