1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-09 12:50:35 +00:00

PulseAudio: Remove get_latency() caching

This commit is contained in:
Luke Hubmayer-Werner
2021-01-13 17:50:56 +10:30
parent eb4301b941
commit 9e844cc0c8
3 changed files with 14 additions and 17 deletions

View File

@@ -132,7 +132,7 @@
<method name="get_output_latency" qualifiers="const"> <method name="get_output_latency" qualifiers="const">
<return type="float" /> <return type="float" />
<description> <description>
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.
</description> </description>
</method> </method>
<method name="get_speaker_mode" qualifiers="const"> <method name="get_speaker_mode" qualifiers="const">

View File

@@ -192,7 +192,7 @@
Number of islands in the 3D physics engine. [i]Lower is better.[/i] Number of islands in the 3D physics engine. [i]Lower is better.[/i]
</constant> </constant>
<constant name="AUDIO_OUTPUT_LATENCY" value="23" enum="Monitor"> <constant name="AUDIO_OUTPUT_LATENCY" value="23" enum="Monitor">
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.
</constant> </constant>
<constant name="NAVIGATION_ACTIVE_MAPS" value="24" enum="Monitor"> <constant name="NAVIGATION_ACTIVE_MAPS" value="24" enum="Monitor">
Number of active navigation maps in the [NavigationServer3D]. This also includes the two empty default navigation maps created by World2D and World3D. Number of active navigation maps in the [NavigationServer3D]. This also includes the two empty default navigation maps created by World2D and World3D.

View File

@@ -370,27 +370,24 @@ Error AudioDriverPulseAudio::init() {
} }
float AudioDriverPulseAudio::get_latency() { float AudioDriverPulseAudio::get_latency() {
if (latency == 0) { //only do this once since it's approximate anyway
lock(); lock();
pa_usec_t palat = 0; pa_usec_t pa_lat = 0;
if (pa_stream_get_state(pa_str) == PA_STREAM_READY) { if (pa_stream_get_state(pa_str) == PA_STREAM_READY) {
int negative = 0; int negative = 0;
if (pa_stream_get_latency(pa_str, &palat, &negative) >= 0) { if (pa_stream_get_latency(pa_str, &pa_lat, &negative) >= 0) {
if (negative) { if (negative) {
palat = 0; pa_lat = 0;
} }
} }
} }
if (palat > 0) { if (pa_lat > 0) {
latency = double(palat) / 1000000.0; latency = double(pa_lat) / 1000000.0;
} }
unlock(); unlock();
}
return latency; return latency;
} }