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.
This commit is contained in:
Wim Taymans 2007-09-28 14:51:58 +00:00 committed by Tim-Philipp Müller
parent 2b1f49a26e
commit 9c867a2160
2 changed files with 8 additions and 7 deletions

View 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);
}

View 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;