videorate: Convert input ts to output scale to close segment

Otherwise we compare values that are in two different time scales.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9013>
This commit is contained in:
Thibault Saunier 2025-05-10 20:39:42 -04:00 committed by GStreamer Marge Bot
parent e697fe98eb
commit 0b745f67db

View File

@ -996,9 +996,11 @@ gst_video_rate_check_duplicate_to_close_segment (GstVideoRate * videorate,
GstClockTime next_stream_time = videorate->next_output_ts;
GstClockTime max_closing_segment_duplication_duration =
videorate->max_closing_segment_duplication_duration;
GstClockTime last_input_ts_in_output_scale = last_input_ts / videorate->rate;
if (!GST_CLOCK_TIME_IS_VALID (videorate->next_output_ts))
if (!GST_CLOCK_TIME_IS_VALID (videorate->next_output_ts)) {
return FALSE;
}
if (videorate->segment.rate > 0.0) {
@ -1007,14 +1009,16 @@ gst_video_rate_check_duplicate_to_close_segment (GstVideoRate * videorate,
return is_first;
}
if (next_stream_time >= videorate->segment.stop)
if (next_stream_time >= videorate->segment.stop) {
return FALSE;
}
if (GST_CLOCK_TIME_IS_VALID (max_closing_segment_duplication_duration)) {
if (last_input_ts > videorate->next_output_ts)
if (last_input_ts_in_output_scale > videorate->next_output_ts) {
return TRUE;
}
return (videorate->next_output_ts - last_input_ts <
return (videorate->next_output_ts - last_input_ts_in_output_scale <
max_closing_segment_duplication_duration);
}
@ -1032,10 +1036,10 @@ gst_video_rate_check_duplicate_to_close_segment (GstVideoRate * videorate,
return FALSE;
if (GST_CLOCK_TIME_IS_VALID (max_closing_segment_duplication_duration)) {
if (last_input_ts < videorate->next_output_ts)
if (last_input_ts_in_output_scale < videorate->next_output_ts)
return TRUE;
return (last_input_ts - videorate->next_output_ts <
return (last_input_ts_in_output_scale - videorate->next_output_ts <
max_closing_segment_duplication_duration);
}