diff -r -u pulseaudio-3.99.1.orig/src/modules/macosx/module-coreaudio-device.c pulseaudio-3.99.1.patched/src/modules/macosx/module-coreaudio-device.c --- pulseaudio-3.99.1.orig/src/modules/macosx/module-coreaudio-device.c 2012-11-19 10:32:25.000000000 +0100 +++ pulseaudio-3.99.1.patched/src/modules/macosx/module-coreaudio-device.c 2013-05-23 11:09:50.000000000 +0200 @@ -183,7 +183,7 @@ struct userdata *u; pa_sample_spec *ss; bool is_source; - UInt32 v, total = 0; + UInt32 v = 0, total = 0; UInt32 err, size = sizeof(v); AudioObjectPropertyAddress property_address; AudioObjectID stream_id; @@ -205,26 +205,35 @@ pa_assert(u); - property_address.mScope = kAudioObjectPropertyScopeGlobal; + property_address.mScope = is_source ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; property_address.mElement = kAudioObjectPropertyElementMaster; /* get the device latency */ property_address.mSelector = kAudioDevicePropertyLatency; - size = sizeof(total); - AudioObjectGetPropertyData(u->object_id, &property_address, 0, NULL, &size, &total); - total += v; + size = sizeof(v); + err = AudioObjectGetPropertyData(u->object_id, &property_address, 0, NULL, &size, &v); + if (!err) + total += v; + else + pa_log_warn("Failed to get device latency: %i", err); /* the IOProc buffer size */ property_address.mSelector = kAudioDevicePropertyBufferFrameSize; size = sizeof(v); - AudioObjectGetPropertyData(u->object_id, &property_address, 0, NULL, &size, &v); - total += v; + err = AudioObjectGetPropertyData(u->object_id, &property_address, 0, NULL, &size, &v); + if (!err) + total += v; + else + pa_log_warn("Failed to get buffer frame size: %i", err); /* IOProc safety offset - this value is the same for both directions, hence we divide it by 2 */ property_address.mSelector = kAudioDevicePropertySafetyOffset; size = sizeof(v); - AudioObjectGetPropertyData(u->object_id, &property_address, 0, NULL, &size, &v); - total += v / 2; + err = AudioObjectGetPropertyData(u->object_id, &property_address, 0, NULL, &size, &v); + if (!err) + total += v / 2; + else + pa_log_warn("Failed to get safety offset: %i", err); /* get the stream latency. * FIXME: this assumes the stream latency is the same for all streams */ @@ -233,11 +242,15 @@ err = AudioObjectGetPropertyData(u->object_id, &property_address, 0, NULL, &size, &stream_id); if (!err) { property_address.mSelector = kAudioStreamPropertyLatency; + property_address.mScope = kAudioObjectPropertyScopeGlobal; size = sizeof(v); err = AudioObjectGetPropertyData(stream_id, &property_address, 0, NULL, &size, &v); if (!err) total += v; - } + else + pa_log_warn("Failed to get stream latency: %i", err); + } else + pa_log_warn("Failed to get streams: %i", err); return pa_bytes_to_usec(total * pa_frame_size(ss), ss); }