gst/rtpmanager/: Remove the fixed clock-rate from the jitterbuffer and extend it...
authorOlivier Crete <tester@tester.ca>
Fri, 25 Jan 2008 16:00:52 +0000 (16:00 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 11 Aug 2009 01:30:33 +0000 (02:30 +0100)
Original commit message from CVS:
Patch by: Olivier Crete <tester@tester.ca>
* gst/rtpmanager/gstrtpjitterbuffer.c:
(gst_jitter_buffer_sink_parse_caps), (gst_rtp_jitter_buffer_chain):
* gst/rtpmanager/rtpjitterbuffer.c: (calculate_skew),
(rtp_jitter_buffer_insert):
* gst/rtpmanager/rtpjitterbuffer.h:
Remove the fixed clock-rate from the jitterbuffer and extend it so that
a clock-rate can be provided with each buffer instead. Fixes #511686.

gst/rtpmanager/gstrtpjitterbuffer.c
gst/rtpmanager/rtpjitterbuffer.c
gst/rtpmanager/rtpjitterbuffer.h

index c85f439..142cc95 100644 (file)
@@ -451,8 +451,6 @@ gst_jitter_buffer_sink_parse_caps (GstRtpJitterBuffer * jitterbuffer,
   if (priv->clock_rate <= 0)
     goto wrong_rate;
 
-  rtp_jitter_buffer_set_clock_rate (priv->jbuf, priv->clock_rate);
-
   GST_DEBUG_OBJECT (jitterbuffer, "got clock-rate %d", priv->clock_rate);
 
   /* gah, clock-base is uint. If we don't have a base, we will use the first
@@ -822,8 +820,6 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstBuffer * buffer)
     gst_rtp_jitter_buffer_get_clock_rate (jitterbuffer, pt);
     if (priv->clock_rate == -1)
       goto not_negotiated;
-
-    rtp_jitter_buffer_set_clock_rate (priv->jbuf, priv->clock_rate);
   }
 
   /* take the timestamp of the buffer. This is the time when the packet was
@@ -875,7 +871,8 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstBuffer * buffer)
   /* now insert the packet into the queue in sorted order. This function returns
    * FALSE if a packet with the same seqnum was already in the queue, meaning we
    * have a duplicate. */
-  if (!rtp_jitter_buffer_insert (priv->jbuf, buffer, timestamp, &tail))
+  if (!rtp_jitter_buffer_insert (priv->jbuf, buffer, timestamp,
+          priv->clock_rate, &tail))
     goto duplicate;
 
   /* signal addition of new buffer when the _loop is waiting. */
index 7ebe18e..a2c08fb 100644 (file)
@@ -100,22 +100,6 @@ rtp_jitter_buffer_new (void)
 }
 
 void
-rtp_jitter_buffer_set_clock_rate (RTPJitterBuffer * jbuf, gint clock_rate)
-{
-  g_return_if_fail (jbuf != NULL);
-
-  jbuf->clock_rate = clock_rate;
-}
-
-gint
-rtp_jitter_buffer_get_clock_rate (RTPJitterBuffer * jbuf)
-{
-  g_return_val_if_fail (jbuf != NULL, 0);
-
-  return jbuf->clock_rate;
-}
-
-void
 rtp_jitter_buffer_reset_skew (RTPJitterBuffer * jbuf)
 {
   jbuf->base_time = -1;
@@ -187,7 +171,8 @@ rtp_jitter_buffer_reset_skew (RTPJitterBuffer * jbuf)
  * Returns: @time adjusted with the clock skew.
  */
 static GstClockTime
-calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time)
+calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time,
+    guint32 clock_rate)
 {
   guint64 ext_rtptime;
   guint64 send_diff, recv_diff;
@@ -198,8 +183,7 @@ calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time)
 
   ext_rtptime = gst_rtp_buffer_ext_timestamp (&jbuf->ext_rtptime, rtptime);
 
-  gstrtptime =
-      gst_util_uint64_scale_int (ext_rtptime, GST_SECOND, jbuf->clock_rate);
+  gstrtptime = gst_util_uint64_scale_int (ext_rtptime, GST_SECOND, clock_rate);
 
 again:
   /* first time, lock on to time and gstrtptime */
@@ -364,6 +348,7 @@ compare_seqnum (GstBuffer * a, GstBuffer * b, RTPJitterBuffer * jbuf)
  * @jbuf: an #RTPJitterBuffer
  * @buf: a buffer
  * @time: a running_time when this buffer was received in nanoseconds
+ * @clock_rate: the clock-rate of the payload of @buf
  * @tail: TRUE when the tail element changed.
  *
  * Inserts @buf into the packet queue of @jbuf. The sequence number of the
@@ -374,7 +359,7 @@ compare_seqnum (GstBuffer * a, GstBuffer * b, RTPJitterBuffer * jbuf)
  */
 gboolean
 rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, GstBuffer * buf,
-    GstClockTime time, gboolean * tail)
+    GstClockTime time, guint32 clock_rate, gboolean * tail)
 {
   GList *list;
   gint func_ret = 1;
@@ -398,7 +383,7 @@ rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, GstBuffer * buf,
    * receive time, this function will retimestamp @buf with the skew corrected
    * running time. */
   rtptime = gst_rtp_buffer_get_timestamp (buf);
-  time = calculate_skew (jbuf, rtptime, time);
+  time = calculate_skew (jbuf, rtptime, time, clock_rate);
   GST_BUFFER_TIMESTAMP (buf) = time;
 
   if (list)
index a6c16ba..ffd73ff 100644 (file)
@@ -54,8 +54,6 @@ struct _RTPJitterBuffer {
 
   GQueue        *packets;
 
-  gint           clock_rate;
-
   /* for calculating skew */
   GstClockTime   base_time;
   GstClockTime   base_rtptime;
@@ -78,13 +76,12 @@ GType rtp_jitter_buffer_get_type (void);
 /* managing lifetime */
 RTPJitterBuffer*      rtp_jitter_buffer_new              (void);
 
-void                  rtp_jitter_buffer_set_clock_rate   (RTPJitterBuffer *jbuf, gint clock_rate);
-gint                  rtp_jitter_buffer_get_clock_rate   (RTPJitterBuffer *jbuf);
-
 void                  rtp_jitter_buffer_reset_skew       (RTPJitterBuffer *jbuf);
 
 gboolean              rtp_jitter_buffer_insert           (RTPJitterBuffer *jbuf, GstBuffer *buf,
-                                                         GstClockTime time, gboolean *tail);
+                                                         GstClockTime time,
+                                                         guint32 clock_rate,
+                                                         gboolean *tail);
 GstBuffer *           rtp_jitter_buffer_peek             (RTPJitterBuffer *jbuf);
 GstBuffer *           rtp_jitter_buffer_pop              (RTPJitterBuffer *jbuf);