summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--audio/out/ao_coreaudio_exclusive.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/audio/out/ao_coreaudio_exclusive.c b/audio/out/ao_coreaudio_exclusive.c
index 6f5f247459..3e397486a2 100644
--- a/audio/out/ao_coreaudio_exclusive.c
+++ b/audio/out/ao_coreaudio_exclusive.c
@@ -357,12 +357,17 @@ static OSStatus render_cb_digital(
// Check whether we need to reset the digital output stream.
if (p->stream_asbd_changed) {
- p->stream_asbd_changed = 0;
- if (!p->reload_requested && ca_stream_supports_digital(ao, p->stream)) {
- p->reload_requested = true;
- ao_request_reload(ao);
- MP_INFO(ao, "Stream format changed! Reloading.\n");
- }
+ AudioStreamBasicDescription f;
+ OSErr err = CA_GET(p->stream, kAudioStreamPropertyPhysicalFormat, &f);
+ CHECK_CA_WARN("could not get stream format");
+ if (err == noErr && ca_asbd_equals(&p->stream_asbd, &f))
+ p->stream_asbd_changed = 0;
+ }
+
+ if (p->stream_asbd_changed && !p->reload_requested) {
+ p->reload_requested = true;
+ ao_request_reload(ao);
+ MP_INFO(ao, "Stream format changed! Reloading.\n");
}
return noErr;