webrtc_source: rearrange codes to reduce code complexity 16/265416/5
authorbackto.kim <backto.kim@samsung.com>
Tue, 19 Oct 2021 03:26:36 +0000 (12:26 +0900)
committerhj kim <backto.kim@samsung.com>
Tue, 19 Oct 2021 07:15:40 +0000 (07:15 +0000)
[Version] 0.2.128
[Issue Type] Refactoring

Change-Id: Ie67fa8314d79461b51d8424ab7b3bca695ccfa24

packaging/capi-media-webrtc.spec
src/webrtc_source.c

index e1e65aa69c3be2839c02be5f73c0acaa47bb72a5..cb0799fe7dc320fe80fe1c5fb83b082d2cc12172 100644 (file)
@@ -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
index e3733bf0f9c8584e2ece19ec93108681396a2fd5..ad6d459bddbc0e56b31c455682e5866776866cf1 100644 (file)
@@ -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;
 }