diff options
-rw-r--r-- | src/cubeb_aaudio.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/cubeb_aaudio.cpp b/src/cubeb_aaudio.cpp index 8b5eb23..915faee 100644 --- a/src/cubeb_aaudio.cpp +++ b/src/cubeb_aaudio.cpp @@ -644,9 +644,11 @@ 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 - : signed_tstamp_ns - app_frame_hw_time; + // 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; LOGV("Latency in frames (%s): %d (%dms)", is_output ? "output" : "input", |