flvmux: Assume PTS is DTS when PTS is missing
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 8 Jun 2016 15:24:37 +0000 (11:24 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Mon, 24 Oct 2016 15:54:30 +0000 (11:54 -0400)
This fixes issue for encoders that only sets the DTS. We assume that
there was no re-ordering when that happens.

https://bugzilla.gnome.org/show_bug.cgi?id=762207

gst/flv/gstflvmux.c

index 2080a3c..fec8f93 100644 (file)
@@ -152,6 +152,20 @@ _gst_buffer_new_and_alloc (gsize size, GstBuffer ** buffer, guint8 ** data)
   *buffer = _gst_buffer_new_wrapped (*data, size, g_free);
 }
 
+static GstFlowReturn
+gst_flv_mux_clip_running_time (GstCollectPads * pads,
+    GstCollectData * cdata, GstBuffer * buf, GstBuffer ** outbuf,
+    gpointer user_data)
+{
+  buf = gst_buffer_make_writable (buf);
+
+  if (!GST_CLOCK_TIME_IS_VALID (GST_BUFFER_PTS (buf)))
+    GST_BUFFER_PTS (buf) = GST_BUFFER_DTS (buf);
+
+  return gst_collect_pads_clip_running_time (pads, cdata, buf, outbuf,
+      user_data);
+}
+
 static void
 gst_flv_mux_class_init (GstFlvMuxClass * klass)
 {
@@ -217,7 +231,7 @@ gst_flv_mux_init (GstFlvMux * mux)
   gst_collect_pads_set_event_function (mux->collect,
       GST_DEBUG_FUNCPTR (gst_flv_mux_handle_sink_event), mux);
   gst_collect_pads_set_clip_function (mux->collect,
-      GST_DEBUG_FUNCPTR (gst_collect_pads_clip_running_time), mux);
+      GST_DEBUG_FUNCPTR (gst_flv_mux_clip_running_time), mux);
 
   gst_flv_mux_reset (GST_ELEMENT (mux));
 }