From 3668cfd91e87b70b41c3bad832d8486f55b9cd77 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 28 Sep 2007 14:51:58 +0000 Subject: gst/rtpmanager/gstrtpbin.c: Fix crasher in dispose. 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. --- ChangeLog | 10 ++++++++++ gst/rtpmanager/gstrtpbin.c | 3 +-- gst/rtpmanager/rtpjitterbuffer.c | 12 +++++++----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 322db3dc..75b0b2a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-09-28 Wim Taymans + + * 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. + 2007-09-28 Wim Taymans * gst/rtpmanager/gstrtpjitterbuffer.c: (apply_latency), diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c index 449d18f2..59ad0155 100644 --- a/gst/rtpmanager/gstrtpbin.c +++ b/gst/rtpmanager/gstrtpbin.c @@ -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); } diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c index 0f52949e..d0304198 100644 --- a/gst/rtpmanager/rtpjitterbuffer.c +++ b/gst/rtpmanager/rtpjitterbuffer.c @@ -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; -- cgit v1.2.1