summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_coreaudio_common.c
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2013-06-26 19:24:14 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2013-07-22 21:53:17 +0200
commit065e446e040b679cb70ab20a31d9bd17385f75ce (patch)
tree5b3d5d0edb879c84f60469cb90d6d7eb2aff9fcd /audio/out/ao_coreaudio_common.c
parent838fa07376e3b6c34c2a75535d9f29b9eb1b0db5 (diff)
downloadmpv-065e446e040b679cb70ab20a31d9bd17385f75ce.tar.bz2
mpv-065e446e040b679cb70ab20a31d9bd17385f75ce.tar.xz
ao_coreaudio: extract mixmode set/unset in utility functions
Diffstat (limited to 'audio/out/ao_coreaudio_common.c')
-rw-r--r--audio/out/ao_coreaudio_common.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/audio/out/ao_coreaudio_common.c b/audio/out/ao_coreaudio_common.c
index c6c56c0323..15281fea01 100644
--- a/audio/out/ao_coreaudio_common.c
+++ b/audio/out/ao_coreaudio_common.c
@@ -331,6 +331,57 @@ static OSStatus ca_unlock_device(AudioDeviceID device, pid_t *pid) {
return noErr;
}
+static OSStatus ca_change_mixing(AudioDeviceID device, uint32_t val,
+ bool *changed) {
+ *changed = false;
+
+ AudioObjectPropertyAddress p_addr = (AudioObjectPropertyAddress) {
+ .mSelector = kAudioDevicePropertySupportsMixing,
+ .mScope = kAudioObjectPropertyScopeGlobal,
+ .mElement = kAudioObjectPropertyElementMaster,
+ };
+
+ if (AudioObjectHasProperty(device, &p_addr)) {
+ OSStatus err;
+ Boolean writeable = 0;
+ err = IsAudioPropertySettable(device, kAudioDevicePropertySupportsMixing,
+ &writeable);
+
+ if (!CHECK_CA_WARN("can't tell if mixing property is settable")) {
+ return err;
+ }
+
+ if (!writeable)
+ return noErr;
+
+ err = SetAudioProperty(device, kAudioDevicePropertySupportsMixing,
+ sizeof(uint32_t), &val);
+ if (err != noErr)
+ return err;
+
+ if (!CHECK_CA_WARN("can't set mix mode")) {
+ return err;
+ }
+
+ *changed = true;
+ }
+
+ return noErr;
+}
+
+static OSStatus ca_disable_mixing(AudioDeviceID device, bool *changed) {
+ return ca_change_mixing(device, 0, changed);
+}
+
+static OSStatus ca_enable_mixing(AudioDeviceID device, bool changed) {
+ if (changed) {
+ bool dont_care = false;
+ return ca_change_mixing(device, 1, &dont_care);
+ }
+
+ return noErr;
+}
+
static int AudioStreamChangeFormat(AudioStreamID i_stream_id,
AudioStreamBasicDescription change_format)
{