videorate: Handle the case where the base_ts is > qo.timestamp

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9013>
This commit is contained in:
Thibault Saunier 2025-02-26 18:41:39 -03:00 committed by GStreamer Marge Bot
parent d21c1f13d1
commit 242b4fa931

View File

@ -1304,15 +1304,18 @@ gst_video_rate_src_event (GstBaseTransform * trans, GstEvent * event)
videorate->base_ts) * videorate->rate)), diff,
(GstClockTimeDiff) (diff * videorate->rate));
if (videorate->segment.rate < 0.0)
if (videorate->segment.rate < 0.0) {
timestamp =
(videorate->segment.stop - videorate->base_ts) -
((videorate->segment.stop - videorate->base_ts -
timestamp) * videorate->rate);
else
} else if (videorate->base_ts > timestamp) {
timestamp = videorate->base_ts;
} else {
timestamp =
videorate->base_ts + ((timestamp -
videorate->base_ts) * videorate->rate);
}
diff *= videorate->rate;
GST_OBJECT_UNLOCK (trans);