Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/GStreamer/gst-plugins-good.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHavard Graff <havard.graff@gmail.com>2020-11-20 01:50:23 +0300
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2021-08-25 11:36:06 +0300
commitbe5fab15e00162a3cb0eb6f84e3bfdecb01c8869 (patch)
treeb665d02c027f82d3109325b4ddfc08f44c4bc41f /gst/rtpmanager/rtptwcc.c
parentddcde96efef752aafca9eef329714114c28b71ae (diff)
rtptwcc: add feedback-interval
To allow RTCP TWCC reports to be scheduled on a timer instead of per marker-bit. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/927>
Diffstat (limited to 'gst/rtpmanager/rtptwcc.c')
-rw-r--r--gst/rtpmanager/rtptwcc.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/gst/rtpmanager/rtptwcc.c b/gst/rtpmanager/rtptwcc.c
index 8a7e879f6..d5039d4fc 100644
--- a/gst/rtpmanager/rtptwcc.c
+++ b/gst/rtpmanager/rtptwcc.c
@@ -87,6 +87,9 @@ struct _RTPTWCCManager
gboolean first_fci_parse;
guint16 expected_parsed_seqnum;
guint8 expected_parsed_fb_pkt_count;
+
+ GstClockTime next_feedback_send_time;
+ GstClockTime feedback_interval;
};
G_DEFINE_TYPE (RTPTWCCManager, rtp_twcc_manager, G_TYPE_OBJECT);
@@ -105,6 +108,9 @@ rtp_twcc_manager_init (RTPTWCCManager * twcc)
twcc->recv_sender_ssrc = -1;
twcc->first_fci_parse = TRUE;
+
+ twcc->feedback_interval = GST_CLOCK_TIME_NONE;
+ twcc->next_feedback_send_time = GST_CLOCK_TIME_NONE;
}
static void
@@ -157,6 +163,19 @@ rtp_twcc_manager_set_mtu (RTPTWCCManager * twcc, guint mtu)
twcc->max_packets_per_rtcp = ((twcc->mtu - 32) * 7) / (2 + 14);
}
+void
+rtp_twcc_manager_set_feedback_interval (RTPTWCCManager * twcc,
+ GstClockTime feedback_interval)
+{
+ twcc->feedback_interval = feedback_interval;
+}
+
+GstClockTime
+rtp_twcc_manager_get_feedback_interval (RTPTWCCManager * twcc)
+{
+ return twcc->feedback_interval;
+}
+
static gint
_twcc_seqnum_sort (gconstpointer a, gconstpointer b)
{
@@ -609,7 +628,20 @@ rtp_twcc_manager_recv_packet (RTPTWCCManager * twcc,
GST_LOG ("Receive: twcc-seqnum: %u, marker: %d, ts: %" GST_TIME_FORMAT,
seqnum, pinfo->marker, GST_TIME_ARGS (pinfo->running_time));
- if (pinfo->marker || _many_packets_some_lost (twcc, seqnum)) {
+ /* are we sending on an interval, or based on marker bit */
+ if (GST_CLOCK_TIME_IS_VALID (twcc->feedback_interval)) {
+ if (!GST_CLOCK_TIME_IS_VALID (twcc->next_feedback_send_time))
+ twcc->next_feedback_send_time =
+ pinfo->running_time + twcc->feedback_interval;
+
+ if (pinfo->running_time >= twcc->next_feedback_send_time) {
+ rtp_twcc_manager_create_feedback (twcc);
+ send_feedback = TRUE;
+
+ while (pinfo->running_time >= twcc->next_feedback_send_time)
+ twcc->next_feedback_send_time += twcc->feedback_interval;
+ }
+ } else if (pinfo->marker || _many_packets_some_lost (twcc, seqnum)) {
rtp_twcc_manager_create_feedback (twcc);
send_feedback = TRUE;
}