Add internal API for getting webrtcbin from webrtc node 03/236403/6
authorHyunil <hyunil46.park@samsung.com>
Wed, 17 Jun 2020 01:07:38 +0000 (10:07 +0900)
committerHyunil <hyunil46.park@samsung.com>
Thu, 25 Jun 2020 04:03:14 +0000 (13:03 +0900)
- GstElement * ms_webrtc_node_get_webrtcbin(media_streamer_node_s *webrtc_node)

[Version] 0.1.73
[Issue Type] Refactoring

Change-Id: I7a19441f5eab9dc9bc9cd911b9468f701189d42b
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
include/media_streamer_node.h
packaging/capi-media-streamer.spec
src/media_streamer_gst_webrtc.c
src/media_streamer_node.c

index b93bfd1..411792a 100644 (file)
@@ -123,6 +123,8 @@ gboolean ms_src_node_prepare_iter(const GValue *item, GValue *g_ret, gpointer us
 gboolean ms_node_resources_acquire_iter(const GValue *item, GValue *ret, gpointer user_data);
 gboolean ms_node_resources_release_iter(const GValue *item, GValue *ret, gpointer user_data);
 gboolean ms_node_dpm_policy_check_iter(const GValue *item, GValue *ret, gpointer user_data);
+GstElement *ms_webrtc_node_get_webrtcbin(media_streamer_node_s *webrtc_node);
+
 #ifdef __cplusplus
 }
 #endif
index 67eecad..8d87457 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-streamer
 Summary:    A Media Streamer API
-Version:    0.1.72
+Version:    0.1.73
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 4c5da00..4e071d7 100644 (file)
@@ -175,7 +175,6 @@ static void __on_offer_created_cb(GstPromise *promise, gpointer user_data)
        GstWebRTCSessionDescription *offer = NULL;
        const GstStructure *reply;
        media_streamer_node_s *webrtc_node = (media_streamer_node_s *)user_data;
-       node_info_s *node_klass_type = NULL;
        GstElement *webrtcbin = NULL;
        gchar *sdp_msg;
 
@@ -185,11 +184,8 @@ static void __on_offer_created_cb(GstPromise *promise, gpointer user_data)
 
        ms_debug_fenter();
 
-       node_klass_type = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_WEBRTC);
-       if (!(webrtcbin = ms_find_element_in_bin_by_type(webrtc_node->gst_element, node_klass_type))) {
-               ms_error("Could not find webrtcbin by type[%s, %s]", node_klass_type->klass_name, node_klass_type->default_name);
+       if (!(webrtcbin = ms_webrtc_node_get_webrtcbin(webrtc_node)))
                return;
-       }
 
        reply = gst_promise_get_reply(promise);
        gst_structure_get(reply, "offer",
@@ -213,7 +209,6 @@ static void __on_answer_created_cb(GstPromise * promise, gpointer user_data)
        GstWebRTCSessionDescription *answer = NULL;
        const GstStructure *reply;
        media_streamer_node_s *node = (media_streamer_node_s *)user_data;
-       node_info_s *node_klass_type = NULL;
        gchar *sdp_msg;
        GstElement *webrtcbin;
 
@@ -224,11 +219,8 @@ static void __on_answer_created_cb(GstPromise * promise, gpointer user_data)
 
        ms_debug_fenter();
 
-       node_klass_type = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_WEBRTC);
-       if (!(webrtcbin = ms_find_element_in_bin_by_type(node->gst_element, node_klass_type))) {
-               ms_error("Could not find webrtcbin by type[%s, %s]", node_klass_type->klass_name, node_klass_type->default_name);
+       if (!(webrtcbin = ms_webrtc_node_get_webrtcbin(node)))
                return;
-       }
 
        reply = gst_promise_get_reply(promise);
        gst_structure_get(reply, "answer", GST_TYPE_WEBRTC_SESSION_DESCRIPTION, &answer, NULL);
@@ -252,7 +244,6 @@ int ms_webrtcbin_set_remote_session_description(media_streamer_node_s *webrtc_no
        gchar *sdp;
        gchar *type;
        GstWebRTCSessionDescription *answer, *offer;
-       node_info_s *node_klass_type;
        GstElement *webrtcbin;
        int ret = MEDIA_STREAMER_ERROR_NONE;
 
@@ -262,12 +253,8 @@ int ms_webrtcbin_set_remote_session_description(media_streamer_node_s *webrtc_no
 
        ms_debug_fenter();
 
-
-       node_klass_type = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_WEBRTC);
-       if (!(webrtcbin = ms_find_element_in_bin_by_type(webrtc_node->gst_element, node_klass_type))) {
-               ms_error("Could not find webrtcbin by type[%s, %s]", node_klass_type->klass_name, node_klass_type->default_name);
+       if (!(webrtcbin = ms_webrtc_node_get_webrtcbin(webrtc_node)))
                return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
-       }
 
        ret = ms_webrtc_get_sdp_from_message(sdp_msg, &sdp, &type);
        if (ret != MEDIA_STREAMER_ERROR_NONE)
@@ -316,7 +303,6 @@ int ms_webrtcbin_add_ice_candidate(media_streamer_node_s *webrtc_node, const cha
 {
        gchar *candidate;
        gint sdpmlineindex;
-       node_info_s *node_klass_type;
        GstElement *webrtcbin;
        int ret;
 
@@ -326,11 +312,8 @@ int ms_webrtcbin_add_ice_candidate(media_streamer_node_s *webrtc_node, const cha
 
        ms_debug_fenter();
 
-       node_klass_type = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_WEBRTC);
-       if (!(webrtcbin = ms_find_element_in_bin_by_type(webrtc_node->gst_element, node_klass_type))) {
-               ms_error("Could not find webrtcbin by type[%s, %s]", node_klass_type->klass_name, node_klass_type->default_name);
+       if (!(webrtcbin = ms_webrtc_node_get_webrtcbin(webrtc_node)))
                return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
-       }
 
        ret = ms_webrtc_get_ice_candidate_from_message(ice_msg, &candidate, &sdpmlineindex);
        if (ret != MEDIA_STREAMER_ERROR_NONE)
@@ -346,7 +329,6 @@ int ms_webrtcbin_add_ice_candidate(media_streamer_node_s *webrtc_node, const cha
 
 int ms_webrtcbin_set_stun_server(media_streamer_node_s *webrtc_node, const char *stun_server_url)
 {
-       node_info_s *node_klass_type;
        GstElement *webrtcbin;
        GValue *val;
        const gchar *stun_server = NULL;
@@ -355,11 +337,8 @@ int ms_webrtcbin_set_stun_server(media_streamer_node_s *webrtc_node, const char
        ms_retvm_if(webrtc_node->gst_element == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "webrtc_container is NULL");
        ms_retvm_if(stun_server_url == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "stun_server_url is NULL");
 
-       node_klass_type = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_WEBRTC);
-       if (!(webrtcbin = ms_find_element_in_bin_by_type(webrtc_node->gst_element, node_klass_type))) {
-               ms_error("Could not find webrtcbin by type[%s, %s]", node_klass_type->klass_name, node_klass_type->default_name);
+       if (!(webrtcbin = ms_webrtc_node_get_webrtcbin(webrtc_node)))
                return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
-       }
 
        val = (GValue *)g_object_get_data(G_OBJECT(webrtc_node->gst_element), MEDIA_STREAMER_PARAM_WEBRTC_STUN_SERVER);
        if (!val) {
index ad8fa4e..2e04ba8 100644 (file)
@@ -1587,11 +1587,30 @@ end:
        return ret;
 }
 
+GstElement * ms_webrtc_node_get_webrtcbin(media_streamer_node_s *webrtc_node)
+{
+       GstElement *webrtcbin = NULL;
+       node_info_s *node_klass_type = NULL;
+
+       ms_retvm_if(webrtc_node == NULL, NULL, "webrtc_node is NULL");
+       ms_retvm_if(webrtc_node->gst_element == NULL, NULL, "webrtc_container is NULL");
+
+       ms_debug_fenter();
+
+       node_klass_type = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_WEBRTC);
+       webrtcbin = ms_find_element_in_bin_by_type(webrtc_node->gst_element, node_klass_type);
+       if (!webrtcbin)
+               ms_error("Could not find webrtcbin by type[%s, %s]", node_klass_type->klass_name, node_klass_type->default_name);
+
+       ms_debug_fleave();
+
+       return webrtcbin;
+}
+
 int ms_webrtc_node_prepare(media_streamer_s *ms_streamer, media_streamer_node_s *node)
 {
        int ret = MEDIA_STREAMER_ERROR_NONE;
        GstElement *webrtcbin = NULL;
-       node_info_s *node_klass_type = NULL;
        GObject *send_channel = NULL;
        gboolean is_offerer = FALSE;
        media_streamer_webrtc_callbacks_s *_callbacks = NULL;
@@ -1602,11 +1621,8 @@ int ms_webrtc_node_prepare(media_streamer_s *ms_streamer, media_streamer_node_s
        ms_retvm_if(!node, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is NULL");
        ms_retvm_if(node->type != MEDIA_STREAMER_NODE_TYPE_WEBRTC, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "node is not WebRTC");
 
-       node_klass_type = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_WEBRTC);
-       if (!(webrtcbin = ms_find_element_in_bin_by_type(node->gst_element, node_klass_type))) {
-               ms_error("Could not find webrtcbin by type[%s, %s]", node_klass_type->klass_name, node_klass_type->default_name);
+       if (!(webrtcbin = ms_webrtc_node_get_webrtcbin(node)))
                return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
-       }
 
        _callbacks = (media_streamer_webrtc_callbacks_s *) node->callbacks_structure;
        if (!_callbacks || !(_callbacks->message_cb.callback)) {