rtpjitterbuffer: Only unschedule timers for late packets if they're not RTX packets and only once

Timers for RTX packets are dealt with later in update_rtx_timers(), and
timers for non-RTX packets would potentially also be unscheduled a
second time from there so avoid that.

Also don't shadow the timer variable from the outer scope but instead
make use of it directly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2973>
This commit is contained in:
Sebastian Dröge 2022-09-02 12:17:39 +03:00 committed by GStreamer Marge Bot
parent 034faeae31
commit 2ca849499e

View file

@ -3364,13 +3364,13 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
do_next_seqnum = FALSE;
/* If an out of order packet arrives before its lost timer has expired
* remove it to avoid false positive statistics. */
RtpTimer *timer = rtp_timer_queue_find (priv->timers, seqnum);
if (timer && timer->queued && timer->type == RTP_TIMER_LOST) {
* remove it to avoid false positive statistics. If this is an RTX
* packet then the timer will be updated later as part of update_rtx_timers() */
if (!is_rtx && timer && timer->type == RTP_TIMER_LOST) {
rtp_timer_queue_unschedule (priv->timers, timer);
GST_DEBUG_OBJECT (jitterbuffer,
"removing lost timer for late seqnum #%u", seqnum);
rtp_timer_free (timer);
rtp_timer_free (g_steal_pointer (&timer));
}
}