diff options
author | flyingOwl <ofenfisch@googlemail.com> | 2022-12-30 00:16:03 +0100 |
---|---|---|
committer | flyingOwl <ofenfisch@googlemail.com> | 2022-12-30 00:16:03 +0100 |
commit | c3eae5d00cb79bd897049483126e75bb48a69cd1 (patch) | |
tree | 474bb8673996f0096ff8382a2f89fcb8d8cf3f0d | |
parent | 96bd4e57b5b02dc04b61528033f283f5fea7e723 (diff) | |
download | pulseaudio-c3eae5d00cb79bd897049483126e75bb48a69cd1.tar.gz |
time-smoother-2: Fix time calculation by comparing timestamps
This fixes the rare case of resume_time being bigger than time_stamp. Which
happens sometimes when a gstreamer client is quickly seeking through a
media file. The resulting integer underflow then causes a huge value in
current_time which will break the playback.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/764>
-rw-r--r-- | src/pulsecore/time-smoother_2.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/pulsecore/time-smoother_2.c b/src/pulsecore/time-smoother_2.c index ea7ec1b36..46cc5e9cc 100644 --- a/src/pulsecore/time-smoother_2.c +++ b/src/pulsecore/time-smoother_2.c @@ -307,7 +307,8 @@ pa_usec_t pa_smoother_2_get(pa_smoother_2 *s, pa_usec_t time_stamp) { /* If we are initializing, add the time since resume to the card time at pause_time */ else if (s->init) { current_time += (s->pause_time - s->start_time - s->time_offset - s->fixup_time) * s->time_factor; - current_time += (time_stamp - s->resume_time) * s->time_factor; + if (time_stamp > s->resume_time) + current_time += (time_stamp - s->resume_time) * s->time_factor; /* Smoother is running, calculate current sound card time */ } else |