diff options
author | wm4 <wm4@nowhere> | 2015-05-05 21:58:51 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-05-05 22:09:39 +0200 |
commit | 86d65c80e14f9527abb587dbf931ad253a05f97e (patch) | |
tree | 411022cde66f2e67b720f4f04ae39e36de467026 /audio/out/ao_coreaudio.c | |
parent | 0025030cef757327769982333f9105aa510c393d (diff) | |
download | mpv-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.c | 16 |
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, |