webrtc_source: Add __complete_rest_of_mediapacketsrc() to reduce duplicate codes 64/274164/2
authorSangchul Lee <sc11.lee@samsung.com>
Fri, 22 Apr 2022 09:08:16 +0000 (18:08 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Mon, 25 Apr 2022 03:07:24 +0000 (12:07 +0900)
Unnecessary element_list2 is also removed.

[Version] 0.3.94
[Issue Type] Refactoring

Change-Id: I7d9845c730f5236490e9ff66d1968954c9ee97db
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-webrtc.spec
src/webrtc_source.c

index 839c88e97cc1ee87e997f530ea833aaa7ebc503a..88c68b0d70ca160b033bd20e0459aeffacce6681 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.93
+Version:    0.3.94
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index d52210cca9adb898cd374627bfa92f4fa1bdb010..c4b005a0ca47ed214db05c675930bc34261ea9af 100644 (file)
@@ -2318,14 +2318,47 @@ static int __build_mediapacketsrc(webrtc_s *webrtc, webrtc_gst_slot_s *source)
        return WEBRTC_ERROR_NONE;
 }
 
+static int __complete_rest_of_mediapacketsrc(webrtc_gst_slot_s *source, GstPad **src_pad, GstElement *appsrc, GList *element_list)
+{
+       int ret;
+       GstElement *capsfilter;
+
+       RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
+       RET_VAL_IF(src_pad == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "src_pad is NULL");
+       RET_VAL_IF(appsrc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "appsrc is NULL");
+       RET_VAL_IF(element_list == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "element_list is NULL");
+       RET_VAL_IF(source->bin == NULL, WEBRTC_ERROR_INVALID_OPERATION, "bin is NULL");
+
+       if (!__add_elements_to_bin(source->bin, element_list))
+               return WEBRTC_ERROR_INVALID_OPERATION;
+
+       PREPEND_ELEMENT(element_list, appsrc);
+       if (!__link_elements(element_list)) {
+               ret = WEBRTC_ERROR_INVALID_OPERATION;
+               goto error;
+       }
+
+       if (!(capsfilter = gst_bin_get_by_name(source->bin, ELEMENT_NAME_RTP_CAPSFILTER))) {
+               ret = WEBRTC_ERROR_INVALID_OPERATION;
+               goto error;
+       }
+
+       if ((ret = _set_ghost_pad_target(*src_pad, capsfilter, true)) != WEBRTC_ERROR_NONE)
+               goto error;
+
+       return ret;
+
+error:
+       __remove_elements_from_bin(source->bin, element_list);
+       return ret;
+}
+
 static int __complete_mediapacketsrc_from_raw_format(webrtc_s *webrtc, webrtc_gst_slot_s *source)
 {
-       int ret = WEBRTC_ERROR_NONE;
+       int ret;
        GstPad **src_pad;
        GstElement *appsrc;
-       GstElement *capsfilter;
        GList *element_list = NULL;
-       GList *element_list2 = NULL;
        GstCaps *sink_caps;
 
        RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
@@ -2349,37 +2382,15 @@ static int __complete_mediapacketsrc_from_raw_format(webrtc_s *webrtc, webrtc_gs
                goto exit;
        }
        PRINT_CAPS(sink_caps, "appsrc");
-
        g_object_set(G_OBJECT(appsrc), "caps", sink_caps, NULL);
        gst_caps_unref(sink_caps);
 
-       if (!__add_elements_to_bin(source->bin, element_list)) {
-               SAFE_G_LIST_FREE(element_list);
-               return WEBRTC_ERROR_INVALID_OPERATION;
-       }
-
-       element_list2 = g_list_copy(element_list);
-       PREPEND_ELEMENT(element_list2, appsrc); /* element_list2 has appsrc */
-       if (!__link_elements(element_list2)) {
-               ret = WEBRTC_ERROR_INVALID_OPERATION;
-               goto exit_with_remove_from_bin;
-       }
-
-       if (!(capsfilter = gst_bin_get_by_name(source->bin, ELEMENT_NAME_RTP_CAPSFILTER))) {
-               ret = WEBRTC_ERROR_INVALID_OPERATION;
-               goto exit_with_remove_from_bin;
-       }
-
-       SAFE_G_LIST_FREE(element_list);
-       SAFE_G_LIST_FREE(element_list2);
-
-       return _set_ghost_pad_target(*src_pad, capsfilter, true);
+       if ((ret = __complete_rest_of_mediapacketsrc(source, src_pad, appsrc, element_list)) != WEBRTC_ERROR_NONE)
+               goto exit;
 
-exit_with_remove_from_bin:
-       __remove_elements_from_bin(source->bin, element_list);
        SAFE_G_LIST_FREE(element_list);
-       SAFE_G_LIST_FREE(element_list2);
        return ret;
+
 exit:
        SAFE_G_LIST_FREE_FULL(element_list, gst_object_unref);
        return ret;
@@ -2388,12 +2399,10 @@ exit:
 //LCOV_EXCL_START
 static int __complete_mediapacketsrc_from_encoded_format(webrtc_s *webrtc, webrtc_gst_slot_s *source)
 {
-       int ret = WEBRTC_ERROR_NONE;
+       int ret;
        GstPad **src_pad;
        GstElement *appsrc;
-       GstElement *capsfilter;
        GList *element_list = NULL;
-       GList *element_list2 = NULL;
        GstCaps *sink_caps;
 
        RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
@@ -2416,37 +2425,15 @@ static int __complete_mediapacketsrc_from_encoded_format(webrtc_s *webrtc, webrt
                goto exit;
        }
        PRINT_CAPS(sink_caps, "appsrc");
-
        g_object_set(G_OBJECT(appsrc), "caps", sink_caps, NULL);
        gst_caps_unref(sink_caps);
 
-       if (!__add_elements_to_bin(source->bin, element_list)) {
-               SAFE_G_LIST_FREE(element_list);
-               return WEBRTC_ERROR_INVALID_OPERATION;
-       }
-
-       element_list2 = g_list_copy(element_list);
-       PREPEND_ELEMENT(element_list2, appsrc); /* element_list2 has appsrc */
-       if (!__link_elements(element_list2)) {
-               ret = WEBRTC_ERROR_INVALID_OPERATION;
-               goto exit_with_remove_from_bin;
-       }
-
-       if (!(capsfilter = gst_bin_get_by_name(source->bin, ELEMENT_NAME_RTP_CAPSFILTER))) {
-               ret = WEBRTC_ERROR_INVALID_OPERATION;
-               goto exit_with_remove_from_bin;
-       }
-
-       SAFE_G_LIST_FREE(element_list);
-       SAFE_G_LIST_FREE(element_list2);
-
-       return _set_ghost_pad_target(*src_pad, capsfilter, true);
+       if ((ret = __complete_rest_of_mediapacketsrc(source, src_pad, appsrc, element_list)) != WEBRTC_ERROR_NONE)
+               goto exit;
 
-exit_with_remove_from_bin:
-       __remove_elements_from_bin(source->bin, element_list);
        SAFE_G_LIST_FREE(element_list);
-       SAFE_G_LIST_FREE(element_list2);
        return ret;
+
 exit:
        SAFE_G_LIST_FREE_FULL(element_list, gst_object_unref);
        return ret;