summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2013-06-25 08:24:14 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2013-07-22 21:53:17 +0200
commit40f6e2e041b7c0d690b1a22d4bb706feef991022 (patch)
tree31740f1c7d737f4e54b9c17474d15e12df63c7ac /audio
parente3ce0f0f8e7865d5396347cd440e1aad8bcad680 (diff)
downloadmpv-40f6e2e041b7c0d690b1a22d4bb706feef991022.tar.bz2
mpv-40f6e2e041b7c0d690b1a22d4bb706feef991022.tar.xz
ao_coreaudio: extract methods to lock/unlock device for digital output
Diffstat (limited to 'audio')
-rw-r--r--audio/out/ao_coreaudio.c35
-rw-r--r--audio/out/ao_coreaudio_common.c19
2 files changed, 26 insertions, 28 deletions
diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c
index ff4fb62602..a633849aca 100644
--- a/audio/out/ao_coreaudio.c
+++ b/audio/out/ao_coreaudio.c
@@ -431,16 +431,8 @@ static int init_digital(struct ao *ao, AudioStreamBasicDescription asbd)
p->b_digital = 1;
- d->i_hog_pid = getpid();
-
- err = SetAudioProperty(p->i_selected_dev,
- kAudioDevicePropertyHogMode,
- sizeof(d->i_hog_pid), &d->i_hog_pid);
-
- if (! CHECK_CA_WARN("faild to set hogmode")) {
- d->i_hog_pid = -1;
- goto coreaudio_error;
- }
+ err = ca_lock_device(p->i_selected_dev, &d->i_hog_pid);
+ CHECK_CA_ERROR("faild to set hogmode");
p_addr = (AudioObjectPropertyAddress) {
.mSelector = kAudioDevicePropertySupportsMixing,
@@ -586,15 +578,8 @@ static int init_digital(struct ao *ao, AudioStreamBasicDescription asbd)
return CONTROL_TRUE;
coreaudio_error:
- if (d->i_hog_pid == getpid()) {
- d->i_hog_pid = -1;
- err = SetAudioProperty(p->i_selected_dev,
- kAudioDevicePropertyHogMode,
- sizeof(d->i_hog_pid), &d->i_hog_pid);
- if (err != noErr)
- ca_msg(MSGL_WARN, "Could not release hogmode: [%4.4s]\n",
- (char *)&err);
- }
+ err = ca_unlock_device(p->i_selected_dev, &d->i_hog_pid);
+ CHECK_CA_WARN("can't release hog mode");
return CONTROL_FALSE;
}
@@ -793,15 +778,9 @@ static void uninit(struct ao *ao, bool immed)
ca_msg(MSGL_WARN, "failed to set mixmode: [%4.4s]\n",
(char *)&err);
}
- if (d->i_hog_pid == getpid()) {
- d->i_hog_pid = -1;
- err = SetAudioProperty(p->i_selected_dev,
- kAudioDevicePropertyHogMode,
- sizeof(d->i_hog_pid), &d->i_hog_pid);
- if (err != noErr)
- ca_msg(MSGL_WARN,
- "Could not release hogmode: [%4.4s]\n", (char *)&err);
- }
+
+ err = ca_unlock_device(p->i_selected_dev, &d->i_hog_pid);
+ CHECK_CA_WARN("can't release hog mode");
}
}
diff --git a/audio/out/ao_coreaudio_common.c b/audio/out/ao_coreaudio_common.c
index 1755004f3f..289fa93b64 100644
--- a/audio/out/ao_coreaudio_common.c
+++ b/audio/out/ao_coreaudio_common.c
@@ -310,3 +310,22 @@ static OSStatus ca_device_listener(AudioObjectID object, uint32_t n_addresses,
return ca_property_listener(kAudioDevicePropertyDeviceHasChanged,
object, n_addresses, addresses, data);
}
+
+static OSStatus ca_lock_device(AudioDeviceID device, pid_t *pid) {
+ *pid = getpid();
+ OSStatus err = SetAudioProperty(device, kAudioDevicePropertyHogMode,
+ sizeof(*pid), pid);
+ if (err != noErr)
+ *pid = -1;
+
+ return err;
+}
+
+static OSStatus ca_unlock_device(AudioDeviceID device, pid_t *pid) {
+ if (*pid == getpid()) {
+ *pid = -1;
+ return SetAudioProperty(device, kAudioDevicePropertyHogMode,
+ sizeof(*pid), &pid);
+ }
+ return noErr;
+}