summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_coreaudio.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-05-05 21:58:51 +0200
committerwm4 <wm4@nowhere>2015-05-05 22:09:39 +0200
commit86d65c80e14f9527abb587dbf931ad253a05f97e (patch)
tree411022cde66f2e67b720f4f04ae39e36de467026 /audio/out/ao_coreaudio.c
parent0025030cef757327769982333f9105aa510c393d (diff)
downloadmpv-86d65c80e14f9527abb587dbf931ad253a05f97e.tar.bz2
mpv-86d65c80e14f9527abb587dbf931ad253a05f97e.tar.xz
ao_coreaudio: restore old physical format if format was changed
Diffstat (limited to 'audio/out/ao_coreaudio.c')
-rw-r--r--audio/out/ao_coreaudio.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c
index 09ca4fa8cd..4849c4e160 100644
--- a/audio/out/ao_coreaudio.c
+++ b/audio/out/ao_coreaudio.c
@@ -35,6 +35,9 @@ struct priv {
uint64_t hw_latency_us;
+ AudioStreamBasicDescription original_asbd;
+ AudioStreamID original_asbd_stream;
+
int change_physical_format;
};
@@ -211,6 +214,12 @@ static void init_physical_format(struct ao *ao)
}
if (best_asbd.mFormatID) {
+ p->original_asbd_stream = streams[i];
+ err = CA_GET(p->original_asbd_stream,
+ kAudioStreamPropertyPhysicalFormat,
+ &p->original_asbd);
+ CHECK_CA_WARN("could not get current physical stream format");
+
ca_print_asbd(ao, "Trying to set physical format:", &best_asbd);
err = CA_SET(streams[i], kAudioStreamPropertyPhysicalFormat,
&best_asbd);
@@ -313,6 +322,13 @@ static void uninit(struct ao *ao)
AudioOutputUnitStop(p->audio_unit);
AudioUnitUninitialize(p->audio_unit);
AudioComponentInstanceDispose(p->audio_unit);
+
+ if (p->original_asbd.mFormatID) {
+ OSStatus err = CA_SET(p->original_asbd_stream,
+ kAudioStreamPropertyPhysicalFormat,
+ &p->original_asbd);
+ CHECK_CA_WARN("could not restore physical stream format");
+ }
}
static OSStatus hotplug_cb(AudioObjectID id, UInt32 naddr,