mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
gst/rtpmanager/: Remove the fixed clock-rate from the jitterbuffer and extend it so that a clock-rate can be provided...
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.
This commit is contained in:
parent
eb0993af12
commit
41ada27f2e
3 changed files with 11 additions and 32 deletions
|
@ -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. */
|
||||
|
|
|
@ -99,22 +99,6 @@ rtp_jitter_buffer_new (void)
|
|||
return jbuf;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue