videorate: Update the base time on segment updates
authorOlivier Crête <olivier.crete@collabora.com>
Fri, 24 Jul 2020 20:35:04 +0000 (16:35 -0400)
committerOlivier Crête <olivier.crete@ocrete.ca>
Wed, 15 Sep 2021 15:35:43 +0000 (15:35 +0000)
Dropping it to 0 makes videorate push buffers from timestamp 0 again.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/767>

gst/videorate/gstvideorate.c

index c3240c955527afd16dfb457f4982f9a9fe82cc3e..d00f102a8c48215913beeb6b7adfc72fee96e8c8 100644 (file)
@@ -836,9 +836,6 @@ gst_video_rate_sink_event (GstBaseTransform * trans, GstEvent * event)
         gst_video_rate_swap_prev (videorate, NULL, 0);
       }
 
-      videorate->base_ts = 0;
-      videorate->out_frame_count = 0;
-      videorate->next_ts = GST_CLOCK_TIME_NONE;
 
       /* We just want to update the accumulated stream_time  */
 
@@ -848,6 +845,15 @@ gst_video_rate_sink_event (GstBaseTransform * trans, GstEvent * event)
         segment.stop = (gint64) (segment.stop / videorate->rate);
       segment.time = (gint64) (segment.time / videorate->rate);
 
+      videorate->base_ts = gst_segment_position_from_running_time (&segment,
+          GST_FORMAT_TIME,
+          gst_segment_to_running_time (&videorate->segment, GST_FORMAT_TIME,
+              videorate->base_ts));
+      videorate->next_ts = gst_segment_position_from_running_time (&segment,
+          GST_FORMAT_TIME,
+          gst_segment_to_running_time (&videorate->segment, GST_FORMAT_TIME,
+              videorate->next_ts));
+
       gst_segment_copy_into (&segment, &videorate->segment);
       GST_DEBUG_OBJECT (videorate, "updated segment: %" GST_SEGMENT_FORMAT,
           &videorate->segment);