aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorPaul Adenot <[email protected]>2024-05-22 15:08:36 +0200
committerPaul Adenot <[email protected]>2024-05-24 15:53:45 +0200
commitb692d650691e1c128955ae6a967ef49b16848eca (patch)
tree9ca5d2dea4801fed657f91affb74c62c48cef81b /src
parent6c1a6e151c1f981a2800d40af7c041cfcccc710e (diff)
downloadcubeb-b692d650691e1c128955ae6a967ef49b16848eca.tar.gz
cubeb-b692d650691e1c128955ae6a967ef49b16848eca.zip
Clamp to positive value when computing latency for an output stream
Diagnosed by [email protected], the same code is also found in Chromium.
Diffstat (limited to 'src')
-rw-r--r--src/cubeb_aaudio.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/cubeb_aaudio.cpp b/src/cubeb_aaudio.cpp
index 8b5eb23..9c3b32c 100644
--- a/src/cubeb_aaudio.cpp
+++ b/src/cubeb_aaudio.cpp
@@ -644,8 +644,9 @@ aaudio_get_latency(cubeb_stream * stm, aaudio_direction_t direction,
// Extrapolate from the known timestamp for a particular frame presented.
int64_t app_frame_hw_time = hw_tstamp + frame_time_delta;
// For an output stream, the latency is positive, for an input stream, it's
- // negative.
- int64_t latency_ns = is_output ? app_frame_hw_time - signed_tstamp_ns
+ // negative. It can happen in some instances, e.g. around start of the stream
+ // that the latency for output is negative, return 0 in this case.
+ int64_t latency_ns = is_output ? std::max(0ll, app_frame_hw_time - signed_tstamp_ns)
: signed_tstamp_ns - app_frame_hw_time;
int64_t latency_frames = stm->sample_rate * latency_ns / NS_PER_S;