basertppay: use RTP base time when invalid timestamps
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 20 Dec 2010 17:29:15 +0000 (18:29 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Tue, 21 Dec 2010 12:39:26 +0000 (13:39 +0100)
When we have an invalid running-time (because we clipped, for example) use the
RTP base time for timestamping instead of generating wrong RTP timestamps.

gst-libs/gst/rtp/gstbasertppayload.c

index ed52e7f933bc862a1bdca2a3704ae4b28176356d..a389185589a53296e51d070f834d7ba53bd7423b 100644 (file)
@@ -787,12 +787,16 @@ gst_basertppayload_prepare_push (GstBaseRTPPayload * payload,
     rtime = gst_segment_to_running_time (&payload->segment, GST_FORMAT_TIME,
         data.timestamp);
 
-    GST_LOG_OBJECT (payload,
-        "Using running_time %" GST_TIME_FORMAT " for RTP timestamp",
-        GST_TIME_ARGS (rtime));
-
-    rtime = gst_util_uint64_scale_int (rtime, payload->clock_rate, GST_SECOND);
-
+    if (rtime == -1) {
+      GST_LOG_OBJECT (payload, "Clipped timestamp, using base RTP timestamp");
+      rtime = 0;
+    } else {
+      GST_LOG_OBJECT (payload,
+          "Using running_time %" GST_TIME_FORMAT " for RTP timestamp",
+          GST_TIME_ARGS (rtime));
+      rtime =
+          gst_util_uint64_scale_int (rtime, payload->clock_rate, GST_SECOND);
+    }
     /* add running_time in clock-rate units to the base timestamp */
     data.rtptime = payload->ts_base + rtime;
   } else {
@@ -820,8 +824,8 @@ gst_basertppayload_prepare_push (GstBaseRTPPayload * payload,
       GST_BUFFER_SIZE (GST_BUFFER (obj)), payload->seqnum, data.rtptime,
       GST_TIME_ARGS (data.timestamp));
 
-  if (g_atomic_int_compare_and_exchange (&payload->priv->
-          notified_first_timestamp, 1, 0)) {
+  if (g_atomic_int_compare_and_exchange (&payload->
+          priv->notified_first_timestamp, 1, 0)) {
     g_object_notify (G_OBJECT (payload), "timestamp");
     g_object_notify (G_OBJECT (payload), "seqnum");
   }