rtpsender: Add API to set the priority 24/262624/1
authorOlivier CrĂȘte <olivier.crete@collabora.com>
Thu, 9 Jul 2020 17:39:03 +0000 (13:39 -0400)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 17 Aug 2021 02:35:58 +0000 (11:35 +0900)
Change-Id: I2d2d907322a105e9e5d66667afca3373e03dc6d6
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1707>
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
gst-libs/gst/webrtc/rtpsender.c
gst-libs/gst/webrtc/rtpsender.h

index e7aa458..3c533bf 100644 (file)
@@ -51,10 +51,7 @@ enum
 enum
 {
   PROP_0,
-  PROP_MID,
-  PROP_SENDER,
-  PROP_STOPPED,
-  PROP_DIRECTION,
+  PROP_PRIORITY
 };
 
 //static guint gst_webrtc_rtp_sender_signals[LAST_SIGNAL] = { 0 };
@@ -74,11 +71,38 @@ gst_webrtc_rtp_sender_set_transport (GstWebRTCRTPSender * sender,
   GST_OBJECT_UNLOCK (sender);
 }
 
+/**
+ * gst_webrtc_rtp_sender_set_priority:
+ * @sender: a #GstWebRTCRTPSender
+ * @priority: The priority of this sender
+ *
+ * Sets the content of the IPv4 Type of Service (ToS), also known as DSCP
+ * (Differentiated Services Code Point).
+ * This also sets the Traffic Class field of IPv6.
+ *
+ * Since: 1.20
+ */
+
+void
+gst_webrtc_rtp_sender_set_priority (GstWebRTCRTPSender * sender,
+    GstWebRTCPriorityType priority)
+{
+  GST_OBJECT_LOCK (sender);
+  sender->priority = priority;
+  GST_OBJECT_UNLOCK (sender);
+  g_object_notify (G_OBJECT (sender), "priority");
+}
+
 static void
 gst_webrtc_rtp_sender_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
+  GstWebRTCRTPSender *sender = GST_WEBRTC_RTP_SENDER (object);
+
   switch (prop_id) {
+    case PROP_PRIORITY:
+      gst_webrtc_rtp_sender_set_priority (sender, g_value_get_uint (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -89,7 +113,14 @@ static void
 gst_webrtc_rtp_sender_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
+  GstWebRTCRTPSender *sender = GST_WEBRTC_RTP_SENDER (object);
+
   switch (prop_id) {
+    case PROP_PRIORITY:
+      GST_OBJECT_LOCK (sender);
+      g_value_set_uint (value, sender->priority);
+      GST_OBJECT_UNLOCK (sender);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -99,15 +130,15 @@ gst_webrtc_rtp_sender_get_property (GObject * object, guint prop_id,
 static void
 gst_webrtc_rtp_sender_finalize (GObject * object)
 {
-  GstWebRTCRTPSender *webrtc = GST_WEBRTC_RTP_SENDER (object);
+  GstWebRTCRTPSender *sender = GST_WEBRTC_RTP_SENDER (object);
 
-  if (webrtc->transport)
-    gst_object_unref (webrtc->transport);
-  webrtc->transport = NULL;
+  if (sender->transport)
+    gst_object_unref (sender->transport);
+  sender->transport = NULL;
 
-  if (webrtc->rtcp_transport)
-    gst_object_unref (webrtc->rtcp_transport);
-  webrtc->rtcp_transport = NULL;
+  if (sender->rtcp_transport)
+    gst_object_unref (sender->rtcp_transport);
+  sender->rtcp_transport = NULL;
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -120,6 +151,21 @@ gst_webrtc_rtp_sender_class_init (GstWebRTCRTPSenderClass * klass)
   gobject_class->get_property = gst_webrtc_rtp_sender_get_property;
   gobject_class->set_property = gst_webrtc_rtp_sender_set_property;
   gobject_class->finalize = gst_webrtc_rtp_sender_finalize;
+
+  /**
+   * GstWebRTCRTPSender:priority:
+   *
+   * The priority from which to set the DSCP field on packets
+   *
+   * Since: 1.20
+   */
+  g_object_class_install_property (gobject_class,
+      PROP_PRIORITY,
+      g_param_spec_enum ("priority",
+          "Priority",
+          "The priority from which to set the DSCP field on packets",
+          GST_TYPE_WEBRTC_PRIORITY_TYPE, GST_WEBRTC_PRIORITY_TYPE_LOW,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
 static void
index f8fa9f9..6c42f2d 100644 (file)
@@ -48,6 +48,13 @@ GType gst_webrtc_rtp_sender_get_type(void);
  *
  * Since: 1.16
  */
+/**
+ * GstWebRTCRTPSender.priority:
+ *
+ * The priority of the stream
+ *
+ * Since: 1.20
+ */
 struct _GstWebRTCRTPSender
 {
   GstObject                          parent;
@@ -57,6 +64,7 @@ struct _GstWebRTCRTPSender
   GstWebRTCDTLSTransport            *rtcp_transport;
 
   GArray                            *send_encodings;
+  GstWebRTCPriorityType              priority;
 
   gpointer                          _padding[GST_PADDING];
 };
@@ -75,6 +83,9 @@ GST_WEBRTC_API
 void                        gst_webrtc_rtp_sender_set_transport         (GstWebRTCRTPSender * sender,
                                                                          GstWebRTCDTLSTransport * transport);
 GST_WEBRTC_API
+void                        gst_webrtc_rtp_sender_set_rtcp_transport    (GstWebRTCRTPSender * sender,
+                                                                         GstWebRTCDTLSTransport * transport);
+GST_WEBRTC_API
 void                        gst_webrtc_rtp_sender_set_priority          (GstWebRTCRTPSender *sender,
                                                                          GstWebRTCPriorityType priority);