webrtc_source: Use list to carry elements to remove these from file source 23/267023/1
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 8 Nov 2021 01:29:05 +0000 (10:29 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 24 Nov 2021 08:23:30 +0000 (17:23 +0900)
Variable and function are also renamed to use 'payloader' not 'payload'.

[Version] 0.2.148
[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 1ba56a99cdfd13f96a7b5135e77417023b455eee..23c3c28ea42836ea1eaab9f00fe0d5c336a3c6e6 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.2.147
+Version:    0.2.148
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 63f6312d5d27681abe4449089b8a0ab29581b325..532d7a4a47316e257bf42eae525c0cdef161b342 100644 (file)
 #define GST_KLASS_NAME_CONVERTER_AUDIO "Filter/Converter/Audio"
 #define GST_KLASS_NAME_CONVERTER_VIDEO "Filter/Converter/Video"
 
-#define DEFAULT_ELEMENT_CAMERASRC      "v4l2src"
-#define DEFAULT_ELEMENT_AUDIOSRC       "pulsesrc"
-#define DEFAULT_ELEMENT_VIDEOTESTSRC   "videotestsrc"
-#define DEFAULT_ELEMENT_AUDIOTESTSRC   "audiotestsrc"
-#define DEFAULT_ELEMENT_APPSRC         "appsrc"
-#define DEFAULT_ELEMENT_SCREENSRC      "waylandsrc"
-#define DEFAULT_ELEMENT_QUEUE          "queue"
-#define DEFAULT_ELEMENT_VOLUME         "volume"
-#define DEFAULT_ELEMENT_INPUT_SELECTOR "input-selector"
-#define DEFAULT_ELEMENT_VIDEOCROP      "videocrop"
-#define DEFAULT_ELEMENT_FILESRC        "filesrc"
-
-
-#define ELEMENT_NAME_FIRST_CAPSFILTER "firstCapsfilter"
-#define ELEMENT_NAME_RTP_CAPSFILTER   "rtpCapsfilter"
-#define ELEMENT_NAME_VIDEO_SRC        "videoSrc"
-#define ELEMENT_NAME_VIDEO_SWITCH     "videoSwitch"
-#define ELEMENT_NAME_VIDEO_MUTE_SRC   "videoMuteSrc"
-#define ELEMENT_NAME_VOLUME           "volume"
-#define ELEMENT_NAME_MIC_SRC          "micSrc"
-#define DEFAULT_NAME_FILE_SRC         "fileSrc"
-#define DEFAULT_NAME_AUDIO_QUEUE      "audioQueue"
-#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_VIDEOCROP        "videoCrop"
-#define DEFAULT_NAME_SCREENSRC        "waylandSrc"
-#define DEFAULT_NAME_AUDIO_FAKESINK   "audioFakeSink"
-#define DEFAULT_NAME_VIDEO_FAKESINK   "videoFakeSink"
-#define DEFAULT_NAME_AUDIO_APPSRC     "audioAppsrc"
-#define DEFAULT_NAME_VIDEO_APPSRC     "videoAppsrc"
+#define DEFAULT_ELEMENT_CAMERASRC         "v4l2src"
+#define DEFAULT_ELEMENT_AUDIOSRC          "pulsesrc"
+#define DEFAULT_ELEMENT_VIDEOTESTSRC      "videotestsrc"
+#define DEFAULT_ELEMENT_AUDIOTESTSRC      "audiotestsrc"
+#define DEFAULT_ELEMENT_APPSRC            "appsrc"
+#define DEFAULT_ELEMENT_SCREENSRC         "waylandsrc"
+#define DEFAULT_ELEMENT_QUEUE             "queue"
+#define DEFAULT_ELEMENT_VOLUME            "volume"
+#define DEFAULT_ELEMENT_INPUT_SELECTOR    "input-selector"
+#define DEFAULT_ELEMENT_VIDEOCROP         "videocrop"
+#define DEFAULT_ELEMENT_FILESRC           "filesrc"
+
+#define ELEMENT_NAME_FIRST_CAPSFILTER        "firstCapsfilter"
+#define ELEMENT_NAME_RTP_CAPSFILTER          "rtpCapsfilter"
+#define ELEMENT_NAME_VIDEO_SRC               "videoSrc"
+#define ELEMENT_NAME_VIDEO_SWITCH            "videoSwitch"
+#define ELEMENT_NAME_VIDEO_MUTE_SRC          "videoMuteSrc"
+#define ELEMENT_NAME_VOLUME                  "volume"
+#define ELEMENT_NAME_MIC_SRC                 "micSrc"
+#define DEFAULT_NAME_FILE_SRC                "fileSrc"
+#define DEFAULT_NAME_AUDIO_QUEUE             "audioQueue"
+#define DEFAULT_NAME_VIDEO_QUEUE             "videoQueue"
+#define DEFAULT_NAME_AUDIO_CAPSFILTER        "audioCapsfilter"
+#define DEFAULT_NAME_VIDEO_CAPSFILTER        "videoCapsfilter"
+#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"
+#define DEFAULT_NAME_VIDEO_FAKESINK          "videoFakeSink"
+#define DEFAULT_NAME_AUDIO_APPSRC            "audioAppsrc"
+#define DEFAULT_NAME_VIDEO_APPSRC            "videoAppsrc"
 
 #define APPEND_ELEMENT(x_list, x_element) \
 do { \
@@ -106,7 +105,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;
 } av_mapping_table_s;
@@ -115,14 +114,14 @@ 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_VIDEO_APPSRC,
                DEFAULT_NAME_VIDEO_QUEUE,
-               DEFAULT_NAME_VIDEO_PAYLOAD,
+               DEFAULT_NAME_VIDEO_PAYLOADER,
                DEFAULT_NAME_VIDEO_CAPSFILTER,
                DEFAULT_NAME_VIDEO_FAKESINK,
        }
@@ -1762,30 +1761,41 @@ exit:
 
 static void __remove_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *source, bool is_audio)
 {
-       GstBin *bin = NULL;
-       GstElement *queue = NULL;
-       GstElement *payload = NULL;
-       GstElement *capsfilter = NULL;
-       GstElement *fakesink = NULL;
+       GstBin *bin;
+       GstElement *queue;
+       GstElement *payloader;
+       GstElement *capsfilter;
+       GstElement *fakesink;
+       GList *element_list = NULL;
        int av_idx = GET_AV_IDX(is_audio);
 
        RET_IF(source == NULL, "pad is NULL");
 
        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");
+       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");
 
-       payload = gst_bin_get_by_name(bin, _av_tbl[av_idx].payload_name);
-       RET_IF(payload == NULL, "payload 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");
 
-       capsfilter = gst_bin_get_by_name(bin, _av_tbl[av_idx].capsfilter_name);
-       RET_IF(capsfilter == NULL, "capsfilter 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");
 
-       fakesink = gst_bin_get_by_name(bin, _av_tbl[av_idx].fakesink_name);
-       RET_IF(fakesink == NULL, "fakesink is 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");
+
+       __remove_elements_from_bin(bin, element_list);
 
-       gst_bin_remove_many(bin, queue, payload, capsfilter, fakesink, NULL);
+       SAFE_G_LIST_FREE(element_list);
 }
 
 static void __filesrc_pipeline_audio_stream_handoff_cb(GstElement *object, GstBuffer *buffer, GstPad *pad, gpointer data)
@@ -1833,23 +1843,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)
@@ -1908,11 +1918,11 @@ static GstElement * __prepare_fakesink_for_filesrc_pipeline(webrtc_gst_slot_s *s
 
 static int __create_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *source, GstPad *pad, bool is_audio)
 {
-       GstBin *bin = NULL;
-       GstElement *queue = NULL;
-       GstElement *payload = NULL;
-       GstElement *capsfilter = NULL;
-       GstElement *fakesink = NULL;
+       GstBin *bin;
+       GstElement *queue;
+       GstElement *payloader;
+       GstElement *capsfilter;
+       GstElement *fakesink;
        GList *element_list = NULL;
 
        RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
@@ -1924,9 +1934,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 (!(capsfilter = __prepare_capsfilter_for_filesrc_pipeline(source, is_audio)))
                goto exit;
@@ -3097,6 +3107,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;
 
@@ -3113,19 +3125,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)