From: backto.kim Date: Tue, 19 Oct 2021 03:26:36 +0000 (+0900) Subject: webrtc_source: rearrange codes to reduce code complexity X-Git-Tag: submit/tizen/20211020.012736~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=95ace1f468b3b43d46dd828b9e8099cbcd858989;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source: rearrange codes to reduce code complexity [Version] 0.2.128 [Issue Type] Refactoring Change-Id: Ie67fa8314d79461b51d8424ab7b3bca695ccfa24 --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index e1e65aa6..cb0799fe 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -1,6 +1,6 @@ Name: capi-media-webrtc Summary: A WebRTC library in Tizen Native API -Version: 0.2.127 +Version: 0.2.128 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index e3733bf0..ad6d459b 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -1694,6 +1694,7 @@ static int __build_filesrc_bin(webrtc_gst_slot_s *source, media_type_e media_typ GstElement *appsrc = NULL; GstElement *queue = NULL; GstElement *capsfilter = NULL; + GList *element_list = NULL; int av_idx = GET_AV_IDX_BY_TYPE(media_type); RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL"); @@ -1706,55 +1707,48 @@ static int __build_filesrc_bin(webrtc_gst_slot_s *source, media_type_e media_typ if (!(appsrc = _create_element(DEFAULT_ELEMENT_APPSRC, _av_tbl[av_idx].appsrc_name))) return WEBRTC_ERROR_INVALID_OPERATION; + APPEND_ELEMENT(element_list, appsrc); g_object_set(G_OBJECT(appsrc), "is-live", TRUE, "format", GST_FORMAT_TIME, NULL); - if (!(queue = _create_element(DEFAULT_ELEMENT_QUEUE, _av_tbl[av_idx].queue_name))) { - SAFE_GST_OBJECT_UNREF(appsrc); - return WEBRTC_ERROR_INVALID_OPERATION; - } - - if (!(capsfilter = _create_element(DEFAULT_ELEMENT_CAPSFILTER, _av_tbl[av_idx].capsfilter_name))) { - SAFE_GST_OBJECT_UNREF(appsrc); - SAFE_GST_OBJECT_UNREF(queue); - return WEBRTC_ERROR_INVALID_OPERATION; - } - - gst_bin_add_many(source->bin, appsrc, queue, capsfilter, NULL); + if (!(queue = _create_element(DEFAULT_ELEMENT_QUEUE, _av_tbl[av_idx].queue_name))) + goto exit; + APPEND_ELEMENT(element_list, queue); - if (!gst_element_link_many(appsrc, queue, capsfilter, NULL)) { - LOG_ERROR("failed to gst_element_link_many()"); - goto error; - } + if (!(capsfilter = _create_element(DEFAULT_ELEMENT_CAPSFILTER, _av_tbl[av_idx].capsfilter_name))) + goto exit; + APPEND_ELEMENT(element_list, capsfilter); - if (!gst_element_sync_state_with_parent(appsrc)) { - LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(appsrc)); - goto error; - } + if (!__add_elements_to_bin(source->bin, element_list)) + goto exit; - if (!gst_element_sync_state_with_parent(queue)) { - LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(queue)); - goto error; - } + if (!__link_elements(element_list)) + goto exit_with_remove_from_bin; - if (!gst_element_sync_state_with_parent(capsfilter)) { - LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(capsfilter)); - goto error; - } + if (!__sync_elements_state_with_parent(element_list)) + goto exit_with_remove_from_bin; ret = _set_ghost_pad_target(src_pad, capsfilter, true); if (ret != WEBRTC_ERROR_NONE) - goto error; + goto exit_with_remove_from_bin; __add_probe_to_pad_for_pause(source, av_idx, src_pad, __payloaded_data_probe_cb); + SAFE_G_LIST_FREE(element_list); + return WEBRTC_ERROR_NONE; -error: - gst_bin_remove_many(source->bin, appsrc, queue, capsfilter, NULL); +exit_with_remove_from_bin: + /* elements will be dereferenced */ + __remove_elements_from_bin(source->bin, element_list); + SAFE_G_LIST_FREE(element_list); + return WEBRTC_ERROR_INVALID_OPERATION; +exit: + __unref_elements(element_list); + SAFE_G_LIST_FREE(element_list); return WEBRTC_ERROR_INVALID_OPERATION; }