From 9e844cc0c8cc305c515a8c09d91b5d95639e71ba Mon Sep 17 00:00:00 2001 From: Luke Hubmayer-Werner Date: Wed, 13 Jan 2021 17:50:56 +1030 Subject: [PATCH] PulseAudio: Remove get_latency() caching --- doc/classes/AudioServer.xml | 2 +- doc/classes/Performance.xml | 2 +- .../pulseaudio/audio_driver_pulseaudio.cpp | 27 +++++++++---------- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml index 20a87aea7b4..cb4fb8d5ca9 100644 --- a/doc/classes/AudioServer.xml +++ b/doc/classes/AudioServer.xml @@ -132,7 +132,7 @@ - Returns the audio driver's output latency. + Returns the audio driver's output latency. This can be expensive, it is not recommended to call this every frame. diff --git a/doc/classes/Performance.xml b/doc/classes/Performance.xml index 377dbba9fc9..4d01fe17606 100644 --- a/doc/classes/Performance.xml +++ b/doc/classes/Performance.xml @@ -192,7 +192,7 @@ Number of islands in the 3D physics engine. [i]Lower is better.[/i] - Output latency of the [AudioServer]. [i]Lower is better.[/i] + Output latency of the [AudioServer]. Equivalent to calling [method AudioServer.get_output_latency], it is not recommended to call this every frame. Number of active navigation maps in the [NavigationServer3D]. This also includes the two empty default navigation maps created by World2D and World3D. diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.cpp b/drivers/pulseaudio/audio_driver_pulseaudio.cpp index ab94d8911ff..8ca396af201 100644 --- a/drivers/pulseaudio/audio_driver_pulseaudio.cpp +++ b/drivers/pulseaudio/audio_driver_pulseaudio.cpp @@ -370,27 +370,24 @@ Error AudioDriverPulseAudio::init() { } float AudioDriverPulseAudio::get_latency() { - if (latency == 0) { //only do this once since it's approximate anyway - lock(); + lock(); - pa_usec_t palat = 0; - if (pa_stream_get_state(pa_str) == PA_STREAM_READY) { - int negative = 0; + pa_usec_t pa_lat = 0; + if (pa_stream_get_state(pa_str) == PA_STREAM_READY) { + int negative = 0; - if (pa_stream_get_latency(pa_str, &palat, &negative) >= 0) { - if (negative) { - palat = 0; - } + if (pa_stream_get_latency(pa_str, &pa_lat, &negative) >= 0) { + if (negative) { + pa_lat = 0; } } - - if (palat > 0) { - latency = double(palat) / 1000000.0; - } - - unlock(); } + if (pa_lat > 0) { + latency = double(pa_lat) / 1000000.0; + } + + unlock(); return latency; }