rtptransceiver: Remove direction setter and vfunc and replace it by a property
authorSebastian Dröge <sebastian@centricular.com>
Mon, 5 Aug 2019 16:45:05 +0000 (19:45 +0300)
committerMathieu Duponchelle <mduponchelle1@gmail.com>
Tue, 6 Aug 2019 12:22:21 +0000 (12:22 +0000)
It was changed from a function to a property in the latest WebRTC spec.

ext/webrtc/webrtctransceiver.c
gst-libs/gst/webrtc/rtptransceiver.c
gst-libs/gst/webrtc/rtptransceiver.h
tests/check/elements/webrtcbin.c
tests/examples/webrtc/webrtcrenego.c

index b373931..f265367 100644 (file)
@@ -103,12 +103,6 @@ webrtc_transceiver_get_rtcp_dtls_transport (GstWebRTCRTPTransceiver * trans)
 }
 
 static void
-webrtc_transceiver_set_direction (GstWebRTCRTPTransceiver * trans,
-    GstWebRTCRTPTransceiverDirection direction)
-{
-}
-
-static void
 webrtc_transceiver_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
@@ -185,16 +179,12 @@ webrtc_transceiver_finalize (GObject * object)
 static void
 webrtc_transceiver_class_init (WebRTCTransceiverClass * klass)
 {
-  GstWebRTCRTPTransceiverClass *trans_class =
-      (GstWebRTCRTPTransceiverClass *) klass;
   GObjectClass *gobject_class = (GObjectClass *) klass;
 
   gobject_class->get_property = webrtc_transceiver_get_property;
   gobject_class->set_property = webrtc_transceiver_set_property;
   gobject_class->finalize = webrtc_transceiver_finalize;
 
-  trans_class->set_direction = webrtc_transceiver_set_direction;
-
   /* some acrobatics are required to set the parent before _constructed()
    * has been called */
   g_object_class_install_property (gobject_class,
index 9fa884e..8ea85f1 100644 (file)
@@ -54,29 +54,13 @@ enum
   PROP_MID,
   PROP_SENDER,
   PROP_RECEIVER,
-  PROP_STOPPED,                 // FIXME
-  PROP_DIRECTION,               // FIXME
+  PROP_DIRECTION,
   PROP_MLINE,
+  PROP_STOPPED,                 // FIXME
 };
 
 //static guint gst_webrtc_rtp_transceiver_signals[LAST_SIGNAL] = { 0 };
 
-void
-gst_webrtc_rtp_transceiver_set_direction (GstWebRTCRTPTransceiver * trans,
-    GstWebRTCRTPTransceiverDirection direction)
-{
-  GstWebRTCRTPTransceiverClass *trans_class;
-
-  GST_OBJECT_LOCK (trans);
-  trans->direction = direction;
-
-  trans_class = GST_WEBRTC_RTP_TRANSCEIVER_GET_CLASS (trans);
-
-  g_assert (trans_class->set_direction);
-  trans_class->set_direction (trans, direction);
-  GST_OBJECT_UNLOCK (trans);
-}
-
 static void
 gst_webrtc_rtp_transceiver_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
@@ -93,6 +77,9 @@ gst_webrtc_rtp_transceiver_set_property (GObject * object, guint prop_id,
     case PROP_MLINE:
       webrtc->mline = g_value_get_uint (value);
       break;
+    case PROP_DIRECTION:
+      webrtc->direction = g_value_get_enum (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -115,6 +102,9 @@ gst_webrtc_rtp_transceiver_get_property (GObject * object, guint prop_id,
     case PROP_MLINE:
       g_value_set_uint (value, webrtc->mline);
       break;
+    case PROP_DIRECTION:
+      g_value_set_enum (value, webrtc->direction);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -194,9 +184,25 @@ gst_webrtc_rtp_transceiver_class_init (GstWebRTCRTPTransceiverClass * klass)
           "Index in the SDP of the Media",
           0, G_MAXUINT, 0,
           G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstWebRTCRTPTransceiver:direction:
+   *
+   * Direction of the transceiver.
+   *
+   * Since: 1.18
+   **/
+  g_object_class_install_property (gobject_class,
+      PROP_DIRECTION,
+      g_param_spec_enum ("direction", "Direction",
+          "Transceiver direction",
+          GST_TYPE_WEBRTC_RTP_TRANSCEIVER_DIRECTION,
+          GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_NONE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
 static void
 gst_webrtc_rtp_transceiver_init (GstWebRTCRTPTransceiver * webrtc)
 {
+  webrtc->direction = GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_NONE;
 }
index e28b0a7..4b2e6e3 100644 (file)
@@ -61,19 +61,12 @@ struct _GstWebRTCRTPTransceiverClass
 {
   GstObjectClass        parent_class;
 
-  void                  (*set_direction)        (GstWebRTCRTPTransceiver * trans,
-                                                 GstWebRTCRTPTransceiverDirection direction);
-
   /* FIXME; reset */
-  gpointer              _padding[GST_PADDING-1];
+  gpointer              _padding[GST_PADDING];
 };
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstWebRTCRTPTransceiver, gst_object_unref)
 
-GST_WEBRTC_API
-void                        gst_webrtc_rtp_transceiver_set_direction (GstWebRTCRTPTransceiver * trans,
-                                                                      GstWebRTCRTPTransceiverDirection direction);
-
 G_END_DECLS
 
 #endif /* __GST_WEBRTC_RTP_TRANSCEIVER_H__ */
index 650a6ef..59a948f 100644 (file)
@@ -2716,8 +2716,8 @@ GST_START_TEST (test_renego_transceiver_set_direction)
   pad = gst_element_get_static_pad (t->webrtc1, "sink_0");
   g_object_get (pad, "transceiver", &transceiver, NULL);
   fail_unless (transceiver != NULL);
-  gst_webrtc_rtp_transceiver_set_direction (transceiver,
-      GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE);
+  g_object_set (transceiver, "direction",
+      GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE, NULL);
   expected_offer[0] = "inactive";
   expected_answer[0] = "inactive";
 
index 1305ff8..e80a3b3 100644 (file)
@@ -221,8 +221,8 @@ stream_change (gpointer data)
     gst_element_send_event (extra_src, gst_event_new_eos ());
 
     g_object_get (peer, "transceiver", &transceiver, NULL);
-    gst_webrtc_rtp_transceiver_set_direction (transceiver,
-        GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE);
+    g_object_set (transceiver, "direction",
+        GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE, NULL);
 
     gst_element_set_locked_state (extra_src, TRUE);
     gst_element_set_state (extra_src, GST_STATE_NULL);