From 94122ba11b94e1f3199feaf0fa1e2099d6bed567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 2 Sep 2022 12:19:26 +0300 Subject: [PATCH] rtpjitterbuffer: Change RTX timer availability checks to assertions It's impossible to end up in the corresponding code without a timer for RTX packets because otherwise it would be an unsolicited RTX packet and we would've already returned early. Part-of: --- .../gst/rtpmanager/gstrtpjitterbuffer.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpjitterbuffer.c b/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpjitterbuffer.c index 5f7ad1652d..c5237c76da 100644 --- a/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpjitterbuffer.c @@ -3182,8 +3182,12 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent, priv->next_in_seqnum = (seqnum + 1) & 0xffff; } - if (is_rtx) + if (is_rtx) { + /* For RTX there must be a corresponding timer or it would be an + * unsolicited RTX packet that would be dropped */ + g_assert (timer != NULL); timer->num_rtx_received++; + } /* At 2^15, we would detect a seqnum rollover too early, therefore * limit the queue size. But let's not limit it to a number that is @@ -3215,7 +3219,11 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent, /* priv->last_popped_seqnum >= seqnum, we're too late. */ if (G_UNLIKELY (gap <= 0)) { if (priv->do_retransmission) { - if (is_rtx && timer) { + if (is_rtx) { + /* For RTX there must be a corresponding timer or it would be an + * unsolicited RTX packet that would be dropped */ + g_assert (timer != NULL); + update_rtx_stats (jitterbuffer, timer, dts, FALSE); /* Only count the retranmitted packet too late if it has been * considered lost. If the original packet arrived before the @@ -3271,8 +3279,12 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent, * FALSE if a packet with the same seqnum was already in the queue, meaning we * have a duplicate. */ if (G_UNLIKELY (duplicate)) { - if (is_rtx && timer) + if (is_rtx) { + /* For RTX there must be a corresponding timer or it would be an + * unsolicited RTX packet that would be dropped */ + g_assert (timer != NULL); update_rtx_stats (jitterbuffer, timer, dts, FALSE); + } goto duplicate; }