From: Sangchul Lee Date: Fri, 22 Apr 2022 09:08:16 +0000 (+0900) Subject: webrtc_source: Add __complete_rest_of_mediapacketsrc() to reduce duplicate codes X-Git-Tag: submit/tizen/20220426.020921~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F64%2F274164%2F2;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source: Add __complete_rest_of_mediapacketsrc() to reduce duplicate codes Unnecessary element_list2 is also removed. [Version] 0.3.94 [Issue Type] Refactoring Change-Id: I7d9845c730f5236490e9ff66d1968954c9ee97db Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 839c88e9..88c68b0d 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.3.93 +Version: 0.3.94 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index d52210cc..c4b005a0 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -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;