From: Sangchul Lee Date: Mon, 8 Nov 2021 01:29:05 +0000 (+0900) Subject: webrtc_source: Use list to carry elements to remove these from file source X-Git-Tag: submit/tizen/20211109.062149^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=655fae55df968dec1a611c7d6a28684f198f4d1a;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source: Use list to carry elements to remove these from file source Variable and function are also renamed to use 'payloader' not 'payload'. [Version] 0.3.4 [Issue Type] Refactoring Change-Id: Iaf165625dc135d2e0248e3c103ffc0aa9775bcd4 Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index ffbb8235..abd614de 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.3 +Version: 0.3.4 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index f9586369..ea2aa916 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -53,8 +53,8 @@ #define DEFAULT_NAME_VIDEO_QUEUE "videoQueue" #define DEFAULT_NAME_AUDIO_CAPSFILTER "audioCapsfilter" #define DEFAULT_NAME_VIDEO_CAPSFILTER "videoCapsfilter" -#define DEFAULT_NAME_AUDIO_PAYLOAD "audioPayload" -#define DEFAULT_NAME_VIDEO_PAYLOAD "videoPayload" +#define DEFAULT_NAME_AUDIO_PAYLOADER "audioPayloader" +#define DEFAULT_NAME_VIDEO_PAYLOADER "videoPayloader" #define DEFAULT_NAME_VIDEOCROP "videoCrop" #define DEFAULT_NAME_SCREENSRC "waylandSrc" #define DEFAULT_NAME_AUDIO_FAKESINK "audioFakeSink" @@ -108,7 +108,7 @@ static direction_info_s __direction_info[] = { typedef struct { const char *appsrc_name; const char *queue_name; - const char *payload_name; + const char *payloader_name; const char *capsfilter_name; const char *fakesink_name; const char *network_simulator_name; @@ -118,7 +118,7 @@ static av_mapping_table_s _av_tbl[AV_IDX_MAX] = { { DEFAULT_NAME_AUDIO_APPSRC, DEFAULT_NAME_AUDIO_QUEUE, - DEFAULT_NAME_AUDIO_PAYLOAD, + DEFAULT_NAME_AUDIO_PAYLOADER, DEFAULT_NAME_AUDIO_CAPSFILTER, DEFAULT_NAME_AUDIO_FAKESINK, DEFAULT_NAME_AUDIO_NETWORK_SIMULATOR @@ -126,7 +126,7 @@ static av_mapping_table_s _av_tbl[AV_IDX_MAX] = { { DEFAULT_NAME_VIDEO_APPSRC, DEFAULT_NAME_VIDEO_QUEUE, - DEFAULT_NAME_VIDEO_PAYLOAD, + DEFAULT_NAME_VIDEO_PAYLOADER, DEFAULT_NAME_VIDEO_CAPSFILTER, DEFAULT_NAME_VIDEO_FAKESINK, DEFAULT_NAME_VIDEO_NETWORK_SIMULATOR @@ -1780,10 +1780,11 @@ static void __remove_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *so { GstBin *bin; GstElement *queue; - GstElement *payload; + GstElement *payloader; GstElement *capsfilter; GstElement *fakesink; GstElement *netsim; + GList *element_list = NULL; int av_idx = GET_AV_IDX(is_audio); RET_IF(source == NULL, "pad is NULL"); @@ -1792,25 +1793,36 @@ static void __remove_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *so bin = GST_BIN(source->filesrc_pipeline); - queue = gst_bin_get_by_name(bin, _av_tbl[av_idx].queue_name); - RET_IF(queue == NULL, "queue is NULL"); - - payload = gst_bin_get_by_name(bin, _av_tbl[av_idx].payload_name); - RET_IF(payload == NULL, "payload is NULL"); + if ((queue = gst_bin_get_by_name(bin, _av_tbl[av_idx].queue_name))) + APPEND_ELEMENT(element_list, queue); + else + LOG_ERROR("queue is NULL"); - capsfilter = gst_bin_get_by_name(bin, _av_tbl[av_idx].capsfilter_name); - RET_IF(capsfilter == NULL, "capsfilter is NULL"); + if ((payloader = gst_bin_get_by_name(bin, _av_tbl[av_idx].payloader_name))) + APPEND_ELEMENT(element_list, payloader); + else + LOG_ERROR("payloader is NULL"); - fakesink = gst_bin_get_by_name(bin, _av_tbl[av_idx].fakesink_name); - RET_IF(fakesink == NULL, "fakesink is NULL"); + if ((capsfilter = gst_bin_get_by_name(bin, _av_tbl[av_idx].capsfilter_name))) + APPEND_ELEMENT(element_list, capsfilter); + else + LOG_ERROR("capsfilter is NULL"); - gst_bin_remove_many(bin, queue, payload, capsfilter, fakesink, NULL); + if ((fakesink = gst_bin_get_by_name(bin, _av_tbl[av_idx].fakesink_name))) + APPEND_ELEMENT(element_list, fakesink); + else + LOG_ERROR("fakesink is NULL"); if (source->webrtc->ini.general.network_simulator) { - netsim = gst_bin_get_by_name(bin, _av_tbl[av_idx].network_simulator_name); - RET_IF(netsim == NULL, "netsim is NULL"); - gst_bin_remove(bin, netsim); + if ((netsim = gst_bin_get_by_name(bin, _av_tbl[av_idx].network_simulator_name))) + APPEND_ELEMENT(element_list, netsim); + else + LOG_ERROR("netsim is NULL"); } + + __remove_elements_from_bin(bin, element_list); + + SAFE_G_LIST_FREE(element_list); } static void __filesrc_pipeline_audio_stream_handoff_cb(GstElement *object, GstBuffer *buffer, GstPad *pad, gpointer data) @@ -1858,23 +1870,23 @@ static GstPadProbeReturn __fakesink_probe_cb(GstPad *pad, GstPadProbeInfo *info return GST_PAD_PROBE_REMOVE; } -static GstElement * __create_payload_for_filesrc_pipeline(GstPad *pad, bool is_audio) +static GstElement * __create_payloader_for_filesrc_pipeline(GstPad *pad, bool is_audio) { element_info_s elem_info; - GstElement *payload = NULL; + GstElement *payloader = NULL; RET_VAL_IF(pad == NULL, NULL, "pad is NULL"); CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_PAYLOADER_RTP, gst_pad_get_current_caps(pad), NULL, - payload); + payloader); - RET_VAL_IF(payload == NULL, NULL, "payload is NULL"); + RET_VAL_IF(payloader == NULL, NULL, "payloader is NULL"); - gst_element_set_name(payload, _av_tbl[GET_AV_IDX(is_audio)].payload_name); + gst_element_set_name(payloader, _av_tbl[GET_AV_IDX(is_audio)].payloader_name); - return payload; + return payloader; } static GstElement * __prepare_capsfilter_for_filesrc_pipeline(webrtc_gst_slot_s *source, bool is_audio) @@ -1935,7 +1947,7 @@ static int __create_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *sou { GstBin *bin; GstElement *queue; - GstElement *payload; + GstElement *payloader; GstElement *netsim; GstElement *capsfilter; GstElement *fakesink; @@ -1951,9 +1963,9 @@ static int __create_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *sou return WEBRTC_ERROR_INVALID_OPERATION; APPEND_ELEMENT(element_list, queue); - if (!(payload = __create_payload_for_filesrc_pipeline(pad, is_audio))) + if (!(payloader = __create_payloader_for_filesrc_pipeline(pad, is_audio))) goto exit; - APPEND_ELEMENT(element_list, payload); + APPEND_ELEMENT(element_list, payloader); if (source->webrtc->ini.general.network_simulator) { if (!(netsim = _create_element(DEFAULT_ELEMENT_NETWORK_SIMULATOR, _av_tbl[GET_AV_IDX(is_audio)].network_simulator_name))) @@ -3130,6 +3142,8 @@ static void __release_filesrc_resources(webrtc_gst_slot_s *source) gst_element_foreach_src_pad(GST_ELEMENT(source->bin), __foreach_src_pad_cb, source); for (av_idx = 0; av_idx < AV_IDX_MAX; av_idx++) { + GList *element_list = NULL; + if (source->av[av_idx].src_pad_probe_id == 0) continue; @@ -3146,19 +3160,24 @@ static void __release_filesrc_resources(webrtc_gst_slot_s *source) __remove_rest_of_elements_for_filesrc_pipeline(source, (av_idx == AV_IDX_AUDIO)); - appsrc = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].appsrc_name); - if (!appsrc) + if ((appsrc = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].appsrc_name))) + APPEND_ELEMENT(element_list, appsrc); + else LOG_ERROR("appsrc is NULL"); - queue = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].queue_name); - if (!queue) + if ((queue = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].queue_name))) + APPEND_ELEMENT(element_list, queue); + else LOG_ERROR("queue is NULL"); - capsfilter = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].capsfilter_name); - if (!capsfilter) + if ((capsfilter = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].capsfilter_name))) + APPEND_ELEMENT(element_list, capsfilter); + else LOG_ERROR("capsfilter is NULL"); - gst_bin_remove_many(source->bin, appsrc, queue, capsfilter, NULL); + __remove_elements_from_bin(source->bin, element_list); + + SAFE_G_LIST_FREE(element_list); } if (source->display)