gst/rtpmanager/gstrtpbin.c: Fix crasher in dispose.
authorWim Taymans <wim.taymans@gmail.com>
Fri, 28 Sep 2007 14:51:58 +0000 (14:51 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 11 Aug 2009 01:30:30 +0000 (02:30 +0100)
Original commit message from CVS:
* gst/rtpmanager/gstrtpbin.c: (free_client):
Fix crasher in dispose.
* gst/rtpmanager/rtpjitterbuffer.c: (calculate_skew):
Handle cases where input buffers have no timestamps so that no clock
skew can be calculated, in this case interpollate timestamps based on
rtp timestamp and assume a 0 clock skew.

gst/rtpmanager/gstrtpbin.c
gst/rtpmanager/rtpjitterbuffer.c

index 449d18f..59ad015 100644 (file)
@@ -637,9 +637,8 @@ get_client (GstRtpBin * bin, guint8 len, guint8 * data, gboolean * created)
 }
 
 static void
-free_client (GstRtpBinClient * client, GstRtpBin * bin)
+free_client (GstRtpBinClient * client)
 {
-  bin->clients = g_slist_remove (bin->clients, client);
   g_free (client->cname);
   g_free (client);
 }
index 0f52949..d030419 100644 (file)
@@ -199,11 +199,6 @@ calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time)
   gint pos, i;
   GstClockTime gstrtptime, out_time;
 
-  /* we don't have an arrival timestamp so we can't do skew detection. FIXME, we
-   * should still apply a timestamp based on RTP timestamp and base_time */
-  if (time == -1)
-    return -1;
-
   ext_rtptime = gst_rtp_buffer_ext_timestamp (&jbuf->ext_rtptime, rtptime);
 
   gstrtptime =
@@ -217,6 +212,12 @@ calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time)
 
   /* elapsed time at sender */
   send_diff = gstrtptime - jbuf->base_rtptime;
+
+  /* we don't have an arrival timestamp so we can't do skew detection. we
+   * should still apply a timestamp based on RTP timestamp and base_time */
+  if (time == -1)
+    goto no_skew;
+
   /* elapsed time at receiver, includes the jitter */
   recv_diff = time - jbuf->base_time;
 
@@ -297,6 +298,7 @@ calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time)
     pos = 0;
   jbuf->window_pos = pos;
 
+no_skew:
   /* the output time is defined as the base timestamp plus the RTP time
    * adjusted for the clock skew .*/
   out_time = jbuf->base_time + send_diff + jbuf->skew;