summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2007-09-26 20:08:28 +0000
committerWim Taymans <wim.taymans@gmail.com>2007-09-26 20:08:28 +0000
commitef4ea4876c436e4080950a7db9f6a2678535e600 (patch)
treedd272388d4caadfbccc4a86e6ee7901c6baca634
parentccfbe1569dbd19fecd4bcfae298cbee9c9345d29 (diff)
downloadgst-plugins-bad-ef4ea4876c436e4080950a7db9f6a2678535e600.tar.gz
gst-plugins-bad-ef4ea4876c436e4080950a7db9f6a2678535e600.tar.bz2
gst-plugins-bad-ef4ea4876c436e4080950a7db9f6a2678535e600.zip
gst/rtpmanager/gstrtpbin.c: Fix cleanup crasher.
Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_dispose), (gst_rtp_bin_finalize): Fix cleanup crasher. * gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_init), (calculate_skew): * gst/rtpmanager/rtpjitterbuffer.h: Dynamically adjust the skew calculation window so that we calculate it over a period of around 2 seconds.
-rw-r--r--ChangeLog12
-rw-r--r--gst/rtpmanager/gstrtpbin.c5
-rw-r--r--gst/rtpmanager/rtpjitterbuffer.c16
-rw-r--r--gst/rtpmanager/rtpjitterbuffer.h1
4 files changed, 27 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 2bc456d9..1d830ae3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2007-09-26 Wim Taymans <wim.taymans@gmail.com>
+
+ * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_dispose),
+ (gst_rtp_bin_finalize):
+ Fix cleanup crasher.
+
+ * gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_init),
+ (calculate_skew):
+ * gst/rtpmanager/rtpjitterbuffer.h:
+ Dynamically adjust the skew calculation window so that we calculate it
+ over a period of around 2 seconds.
+
2007-09-26 Thijs Vermeir <thijsvermeir@gmail.com>
* gst/librfb/gstrfbsrc.c:
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c
index a95a0eec..449d18f2 100644
--- a/gst/rtpmanager/gstrtpbin.c
+++ b/gst/rtpmanager/gstrtpbin.c
@@ -1175,9 +1175,11 @@ gst_rtp_bin_dispose (GObject * object)
rtpbin = GST_RTP_BIN (object);
g_slist_foreach (rtpbin->sessions, (GFunc) free_session, NULL);
- g_slist_foreach (rtpbin->clients, (GFunc) free_client, NULL);
g_slist_free (rtpbin->sessions);
rtpbin->sessions = NULL;
+ g_slist_foreach (rtpbin->clients, (GFunc) free_client, NULL);
+ g_slist_free (rtpbin->clients);
+ rtpbin->clients = NULL;
G_OBJECT_CLASS (parent_class)->dispose (object);
}
@@ -1191,7 +1193,6 @@ gst_rtp_bin_finalize (GObject * object)
g_mutex_free (rtpbin->priv->bin_lock);
gst_object_unref (rtpbin->provided_clock);
- g_slist_free (rtpbin->sessions);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c
index 7260e9ee..3285c879 100644
--- a/gst/rtpmanager/rtpjitterbuffer.c
+++ b/gst/rtpmanager/rtpjitterbuffer.c
@@ -72,6 +72,7 @@ rtp_jitter_buffer_init (RTPJitterBuffer * jbuf)
jbuf->window[i] = 0;
}
jbuf->window_pos = 0;
+ jbuf->window_size = 100;
jbuf->window_filling = TRUE;
jbuf->window_min = 0;
jbuf->skew = 0;
@@ -217,21 +218,26 @@ calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time)
if (jbuf->window_filling) {
/* we are filling the window */
- GST_DEBUG ("filling %d %" G_GINT64_FORMAT, pos, delta);
+ GST_DEBUG ("filling %d %" G_GINT64_FORMAT ", diff %" G_GUINT64_FORMAT, pos,
+ delta, send_diff);
jbuf->window[pos++] = delta;
/* calc the min delta we observed */
if (pos == 1 || delta < jbuf->window_min)
jbuf->window_min = delta;
- if (pos >= 100) {
+ if (send_diff >= 2 * GST_SECOND || pos >= 100) {
+ jbuf->window_size = pos;
+
/* window filled, fill window with min */
GST_DEBUG ("min %" G_GINT64_FORMAT, jbuf->window_min);
- for (i = 0; i < 100; i++)
+ for (i = 0; i < jbuf->window_size; i++)
jbuf->window[i] = jbuf->window_min;
/* the skew is initially the min */
jbuf->skew = jbuf->window_min;
jbuf->window_filling = FALSE;
+ } else {
+ jbuf->window_size = pos + 1;
}
} else {
/* pick old value and store new value. We keep the previous value in order
@@ -247,7 +253,7 @@ calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time)
gint64 min = G_MAXINT64;
/* if we removed the old min, we have to find a new min */
- for (i = 0; i < 100; i++) {
+ for (i = 0; i < jbuf->window_size; i++) {
/* we found another value equal to the old min, we can stop searching now */
if (jbuf->window[i] == old) {
min = old;
@@ -264,7 +270,7 @@ calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time)
jbuf->window_min, jbuf->skew);
}
/* wrap around in the window */
- if (pos >= 100)
+ if (pos >= jbuf->window_size)
pos = 0;
jbuf->window_pos = pos;
}
diff --git a/gst/rtpmanager/rtpjitterbuffer.h b/gst/rtpmanager/rtpjitterbuffer.h
index b67e265f..1db07059 100644
--- a/gst/rtpmanager/rtpjitterbuffer.h
+++ b/gst/rtpmanager/rtpjitterbuffer.h
@@ -61,6 +61,7 @@ struct _RTPJitterBuffer {
guint64 ext_rtptime;
gint64 window[100];
guint window_pos;
+ guint window_size;
gboolean window_filling;
gint64 window_min;
gint64 skew;