From: Wim Taymans Date: Thu, 1 Aug 2013 10:21:53 +0000 (+0200) Subject: jitterbuffer: move code around X-Git-Tag: 1.19.3~509^2~5501 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9d3b824e2a4dc7d94478d49337c4efe9f77f9291;p=platform%2Fupstream%2Fgstreamer.git jitterbuffer: move code around --- diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index df06b67..77fdf92 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -1278,6 +1278,99 @@ post_buffering_percent (GstRtpJitterBuffer * jitterbuffer, gint percent) gst_element_post_message (GST_ELEMENT_CAST (jitterbuffer), message); } +static TimerData * +find_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, guint16 seqnum) +{ + GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; + TimerData *timer = NULL; + gint i, len; + + len = priv->timers->len; + for (i = 0; i < len; i++) { + TimerData *test = &g_array_index (priv->timers, TimerData, i); + if (test->seqnum == seqnum && test->type == type) { + timer = test; + break; + } + } + return timer; +} + +static TimerData * +add_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, + guint16 seqnum, GstClockTime timeout) +{ + GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; + TimerData *timer; + gint len; + + GST_DEBUG_OBJECT (jitterbuffer, + "add timer for seqnum %d to %" GST_TIME_FORMAT, + seqnum, GST_TIME_ARGS (timeout)); + + len = priv->timers->len; + g_array_set_size (priv->timers, len + 1); + timer = &g_array_index (priv->timers, TimerData, len); + timer->idx = len; + timer->type = type; + timer->seqnum = seqnum; + timer->timeout = timeout; + + return timer; +} + +static void +reschedule_timer (GstRtpJitterBuffer * jitterbuffer, TimerData * timer, + guint16 seqnum, GstClockTime timeout) +{ + if (timer->seqnum == seqnum && timer->timeout == timeout) + return; + + GST_DEBUG_OBJECT (jitterbuffer, + "replace timer for seqnum %d->%d to %" GST_TIME_FORMAT, + timer->seqnum, seqnum, GST_TIME_ARGS (timeout)); + + timer->timeout = timeout; + timer->seqnum = seqnum; +} + +static TimerData * +set_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, + guint16 seqnum, GstClockTime timeout) +{ + TimerData *timer; + + /* find the seqnum timer */ + timer = find_timer (jitterbuffer, type, seqnum); + if (timer == NULL) { + timer = add_timer (jitterbuffer, type, seqnum, timeout); + } else { + reschedule_timer (jitterbuffer, timer, seqnum, timeout); + } + return timer; +} + +static void +remove_timer (GstRtpJitterBuffer * jitterbuffer, TimerData * timer) +{ + GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; + guint idx; + + idx = timer->idx; + GST_DEBUG_OBJECT (jitterbuffer, "removed index %d", idx); + g_array_remove_index_fast (priv->timers, idx); + timer->idx = idx; +} + +static void +remove_all_timers (GstRtpJitterBuffer * jitterbuffer) +{ + GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; + GST_DEBUG_OBJECT (jitterbuffer, "removed all timers"); + g_array_set_size (priv->timers, 0); +} + + static GstFlowReturn gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) @@ -1552,100 +1645,6 @@ apply_offset (GstRtpJitterBuffer * jitterbuffer, GstClockTime timestamp) return timestamp; } -#define GST_FLOW_WAIT GST_FLOW_CUSTOM_SUCCESS - -static TimerData * -find_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, guint16 seqnum) -{ - GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; - TimerData *timer = NULL; - gint i, len; - - len = priv->timers->len; - for (i = 0; i < len; i++) { - TimerData *test = &g_array_index (priv->timers, TimerData, i); - if (test->seqnum == seqnum && test->type == type) { - timer = test; - break; - } - } - return timer; -} - -static TimerData * -add_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, - guint16 seqnum, GstClockTime timeout) -{ - GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; - TimerData *timer; - gint len; - - GST_DEBUG_OBJECT (jitterbuffer, - "add timer for seqnum %d to %" GST_TIME_FORMAT, - seqnum, GST_TIME_ARGS (timeout)); - - len = priv->timers->len; - g_array_set_size (priv->timers, len + 1); - timer = &g_array_index (priv->timers, TimerData, len); - timer->idx = len; - timer->type = type; - timer->seqnum = seqnum; - timer->timeout = timeout; - - return timer; -} - -static void -reschedule_timer (GstRtpJitterBuffer * jitterbuffer, TimerData * timer, - guint16 seqnum, GstClockTime timeout) -{ - if (timer->seqnum == seqnum && timer->timeout == timeout) - return; - - GST_DEBUG_OBJECT (jitterbuffer, - "replace timer for seqnum %d->%d to %" GST_TIME_FORMAT, - timer->seqnum, seqnum, GST_TIME_ARGS (timeout)); - - timer->timeout = timeout; - timer->seqnum = seqnum; -} - -static TimerData * -set_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, - guint16 seqnum, GstClockTime timeout) -{ - TimerData *timer; - - /* find the seqnum timer */ - timer = find_timer (jitterbuffer, type, seqnum); - if (timer == NULL) { - timer = add_timer (jitterbuffer, type, seqnum, timeout); - } else { - reschedule_timer (jitterbuffer, timer, seqnum, timeout); - } - return timer; -} - -static void -remove_timer (GstRtpJitterBuffer * jitterbuffer, TimerData * timer) -{ - GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; - guint idx; - - idx = timer->idx; - GST_DEBUG_OBJECT (jitterbuffer, "removed index %d", idx); - g_array_remove_index_fast (priv->timers, idx); - timer->idx = idx; -} - -static void -remove_all_timers (GstRtpJitterBuffer * jitterbuffer) -{ - GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; - GST_DEBUG_OBJECT (jitterbuffer, "removed all timers"); - g_array_set_size (priv->timers, 0); -} - static GstClockTime compute_elapsed (GstRtpJitterBuffer * jitterbuffer, GstBuffer * outbuf) { @@ -1821,6 +1820,8 @@ estimate_dts (GstRtpJitterBuffer * jitterbuffer, GstClockTime dts, gint gap) return dts; } +#define GST_FLOW_WAIT GST_FLOW_CUSTOM_SUCCESS + /* Peek a buffer and compare the seqnum to the expected seqnum. * If all is fine, the buffer is pushed. * If something is wrong, a timeout is set. We set 2 kinds of timeouts: