webrtc_source: Use list to carry elements to remove these from file source 02/266102/2 submit/tizen/20211109.062149
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 8 Nov 2021 01:29:05 +0000 (10:29 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Mon, 8 Nov 2021 06:47:51 +0000 (15:47 +0900)
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 <sc11.lee@samsung.com>
packaging/capi-media-webrtc.spec
src/webrtc_source.c

index ffbb82357944e85c4e7e7c08d38953fad9b386db..abd614de8274ad586dd707926a80e193d0bf662a 100644 (file)
@@ -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
index f95863697e4da1824cb967b7176b562ac153e8a8..ea2aa916ee46aa3fa35187d69fbf56afb0952d2c 100644 (file)
@@ -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)