webrtc_source: rearrange codes of __create_rest_of_elements_for_filesrc_pipeline... 66/264966/4
authorbackto.kim <backto.kim@samsung.com>
Wed, 6 Oct 2021 07:30:28 +0000 (16:30 +0900)
committerbackto.kim <backto.kim@samsung.com>
Wed, 6 Oct 2021 09:39:38 +0000 (18:39 +0900)
[Version] 0.2.115
[Issue Type] Refactoring

Change-Id: Ibed6a8d5b613e91af1a8a6c6f944e59dcdeae569

packaging/capi-media-webrtc.spec
src/webrtc_source.c

index cf1513552e74ae48c7e499e017adce2757a60c0a..6fbc5c7055656c35bfd27173ae5245907b1d6bb1 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.2.114
+Version:    0.2.115
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index ee5ebb2207714e4c861538dc530d0c298fdf89eb..915382debb9cf48dfb3adf03642c6c8d40d3f8d8 100644 (file)
@@ -1775,28 +1775,21 @@ static GstPadProbeReturn __fakesink_probe_cb(GstPad *pad,  GstPadProbeInfo *info
        return GST_PAD_PROBE_REMOVE;
 }
 
-static int __create_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *source, GstElement *payloader, bool is_audio)
+static GstElement * __prepare_capsfilter_for_filesrc_pipeline(webrtc_gst_slot_s *source, bool is_audio)
 {
-       GstBin *bin = NULL;
        GstElement *capsfilter = NULL;
-       GstElement *fakesink = NULL;
        GstCaps *sink_caps = NULL;
-       unsigned int payload_id;
-       GstPad *sink_pad = NULL;
+       unsigned int payload_id = 0;
 
-       RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
-       RET_VAL_IF(payloader == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "payloader is NULL");
-       RET_VAL_IF(source->filesrc_pipeline == NULL, WEBRTC_ERROR_INVALID_OPERATION, "filesrc_pipeline is NULL");
-
-       bin = GST_BIN(source->filesrc_pipeline);
+       RET_VAL_IF(source == NULL, NULL, "source is NULL");
 
        if (!(capsfilter = _create_element(DEFAULT_ELEMENT_CAPSFILTER, is_audio ? DEFAULT_NAME_AUDIO_CAPSFILTER : DEFAULT_NAME_VIDEO_CAPSFILTER)))
-               return WEBRTC_ERROR_INVALID_OPERATION;
+               return NULL;
 
        payload_id = __get_available_payload_id(source->webrtc);
        if (payload_id == 0) {
                SAFE_GST_OBJECT_UNREF(capsfilter);
-               return WEBRTC_ERROR_INVALID_OPERATION;
+               return NULL;
        }
 
        source->av[is_audio ? AV_IDX_AUDIO : AV_IDX_VIDEO].payload_id = payload_id;
@@ -1806,40 +1799,75 @@ static int __create_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *sou
                gst_caps_unref(sink_caps);
        }
 
-       if (!(fakesink = _create_element("fakesink", is_audio ? DEFAULT_NAME_AUDIO_FAKESINK : DEFAULT_NAME_VIDEO_FAKESINK))) {
-               SAFE_GST_OBJECT_UNREF(capsfilter);
-               return WEBRTC_ERROR_INVALID_OPERATION;
-       }
+       return capsfilter;
+}
+
+static GstElement * __prepare_fakesink_for_filesrc_pipeline(webrtc_gst_slot_s *source, bool is_audio)
+{
+       GstElement *fakesink = NULL;
+       GstPad *sink_pad = NULL;
+
+       RET_VAL_IF(source == NULL, NULL, "source is NULL");
+
+       if (!(fakesink = _create_element("fakesink", is_audio ? DEFAULT_NAME_AUDIO_FAKESINK : DEFAULT_NAME_VIDEO_FAKESINK)))
+               return NULL;
 
        sink_pad = gst_element_get_static_pad(fakesink, "sink");
        gst_pad_add_probe(sink_pad, GST_PAD_PROBE_TYPE_BUFFER, __fakesink_probe_cb, source, NULL);
        gst_object_unref(sink_pad);
 
-       g_object_set(G_OBJECT(fakesink), "sync", true, NULL);
-       g_object_set(fakesink, "signal-handoffs", TRUE, NULL);
+       g_object_set(G_OBJECT(fakesink),
+               "sync", TRUE,
+               "signal-handoffs", TRUE,
+               NULL);
+
        g_signal_connect(fakesink, "handoff", is_audio ? G_CALLBACK(__filesrc_pipeline_audio_stream_handoff_cb) : G_CALLBACK(__filesrc_pipeline_video_stream_handoff_cb), (gpointer)source);
 
-       gst_bin_add_many(GST_BIN(source->filesrc_pipeline), capsfilter, fakesink, NULL);
+       return fakesink;
+}
+
+static int __create_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *source, GstElement *payloader, bool is_audio)
+{
+       GstBin *bin = NULL;
+       GstElement *capsfilter = NULL;
+       GstElement *fakesink = NULL;
+
+       RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
+       RET_VAL_IF(payloader == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "payloader is NULL");
+       RET_VAL_IF(source->filesrc_pipeline == NULL, WEBRTC_ERROR_INVALID_OPERATION, "filesrc_pipeline is NULL");
+
+       bin = GST_BIN(source->filesrc_pipeline);
+
+       if (!(capsfilter = __prepare_capsfilter_for_filesrc_pipeline(source, is_audio)))
+               return WEBRTC_ERROR_INVALID_OPERATION;
+
+       if (!(fakesink = __prepare_fakesink_for_filesrc_pipeline(source, is_audio))) {
+               SAFE_GST_OBJECT_UNREF(capsfilter);
+               return WEBRTC_ERROR_INVALID_OPERATION;
+       }
+
+       gst_bin_add_many(bin, capsfilter, fakesink, NULL);
 
        if (!gst_element_link_many(payloader, capsfilter, fakesink, NULL)) {
                LOG_ERROR("failed to gst_element_link_many()");
-               gst_bin_remove_many(bin, capsfilter, fakesink, NULL);
-               return WEBRTC_ERROR_INVALID_OPERATION;
+               goto error;
        }
 
        if (!gst_element_sync_state_with_parent(capsfilter)) {
                LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(capsfilter));
-               gst_bin_remove_many(bin, capsfilter, fakesink, NULL);
-               return WEBRTC_ERROR_INVALID_OPERATION;
+               goto error;
        }
 
        if (!gst_element_sync_state_with_parent(fakesink)) {
                LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(fakesink));
-               gst_bin_remove_many(bin, capsfilter, fakesink, NULL);
-               return WEBRTC_ERROR_INVALID_OPERATION;
+               goto error;
        }
 
        return WEBRTC_ERROR_NONE;
+
+error:
+       gst_bin_remove_many(bin, capsfilter, fakesink, NULL);
+       return WEBRTC_ERROR_INVALID_OPERATION;
 }
 
 static GstElement * __link_decodebin_with_payload(GstPad *pad, webrtc_gst_slot_s *source, bool is_audio, bool create)