From af8b158646da37b333a2ec3d4b904b796d31e28e Mon Sep 17 00:00:00 2001 From: Hyunil Date: Wed, 17 Jun 2020 10:07:38 +0900 Subject: [PATCH] Add internal API for getting webrtcbin from webrtc node - 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 --- include/media_streamer_node.h | 2 ++ packaging/capi-media-streamer.spec | 2 +- src/media_streamer_gst_webrtc.c | 31 +++++-------------------------- src/media_streamer_node.c | 26 +++++++++++++++++++++----- 4 files changed, 29 insertions(+), 32 deletions(-) diff --git a/include/media_streamer_node.h b/include/media_streamer_node.h index b93bfd1..411792a 100644 --- a/include/media_streamer_node.h +++ b/include/media_streamer_node.h @@ -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 diff --git a/packaging/capi-media-streamer.spec b/packaging/capi-media-streamer.spec index 67eecad..8d87457 100644 --- a/packaging/capi-media-streamer.spec +++ b/packaging/capi-media-streamer.spec @@ -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 diff --git a/src/media_streamer_gst_webrtc.c b/src/media_streamer_gst_webrtc.c index 4c5da00..4e071d7 100644 --- a/src/media_streamer_gst_webrtc.c +++ b/src/media_streamer_gst_webrtc.c @@ -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) { diff --git a/src/media_streamer_node.c b/src/media_streamer_node.c index ad8fa4e..2e04ba8 100644 --- a/src/media_streamer_node.c +++ b/src/media_streamer_node.c @@ -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)) { -- 2.7.4