webrtc_source_loopback: Add some functions to update loopback 66/280766/2
authorhj kim <backto.kim@samsung.com>
Mon, 5 Sep 2022 02:41:48 +0000 (11:41 +0900)
committerhj kim <backto.kim@samsung.com>
Tue, 6 Sep 2022 05:00:45 +0000 (14:00 +0900)
Below functions added.
 -_set_need_decoding_for_loopback()
 -_destroy_looopback_render_pipeline()

[Version] 0.3.233
[Issue Type] Refactoring

Change-Id: I94b7ac49fb9be0d830e701d6000bbbbe1eeafbb1

include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_source.c
src/webrtc_source_file.c
src/webrtc_source_loopback.c
src/webrtc_source_private.c

index fb5da787bd615d1e8e7cadf1d2646cf5b4ea45c8..34205f54896a1f5a3e2b25cfab46dce7ffdc1f3d 100644 (file)
@@ -755,6 +755,8 @@ void _remove_probe_from_pad_for_render(webrtc_gst_slot_s *source, unsigned int i
 void _set_caps_for_render(webrtc_gst_slot_s *source, GstCaps *caps, int av_idx);
 void _unset_caps_for_render(webrtc_gst_slot_s *source, int av_idx);
 int _update_caps_for_render_with_resolution(webrtc_gst_slot_s *source, int width, int height);
+void _set_need_decoding_for_loopback(webrtc_gst_slot_s *source, int av_idx, bool need_decoding);
+void _destroy_looopback_render_pipeline(webrtc_gst_slot_s *source, int av_idx);
 
 /* source */
 int _complete_sources(webrtc_s *webrtc);
index 629f46b732e5f6e9ca94dc832c6bcf548f16ffe4..f5e610184274ad7c0544c9d028e4243999473023 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.232
+Version:    0.3.233
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index ad4df969c0158abff710281a5ce24d5ef38ae2f0..f1fb369f50d96500885f80c75e010a577919e38b 100644 (file)
@@ -725,10 +725,7 @@ void _source_slot_destroy_cb(gpointer data)
                if (source->av[i].pt > 0)
                        _return_payload_type(source->webrtc, source->av[i].pt);
 
-               if (source->av[i].render.pipeline) {
-                       gst_element_set_state(source->av[i].render.pipeline, GST_STATE_NULL);
-                       SAFE_GST_OBJECT_UNREF(source->av[i].render.pipeline);
-               }
+               _destroy_looopback_render_pipeline(source, i);
 
                if (source->av[i].transceiver)
                        gst_object_unref(source->av[i].transceiver);
@@ -1250,10 +1247,7 @@ static void __release_filesrc_resources(webrtc_gst_slot_s *source)
                if (source->av[av_idx].pt > 0)
                        _return_payload_type(source->webrtc, source->av[av_idx].pt);
 
-               if (source->av[av_idx].render.pipeline) {
-                       gst_element_set_state(source->av[av_idx].render.pipeline, GST_STATE_NULL);
-                       SAFE_GST_OBJECT_UNREF(source->av[av_idx].render.pipeline);
-               }
+               _destroy_looopback_render_pipeline(source, av_idx);
 
                if ((appsrc = gst_bin_get_by_name(source->bin, _get_element_name(av_idx, ELEMENT_APPSRC))))
                        APPEND_ELEMENT(element_list, appsrc);
index d6623fa50ac1bef73c03d36c89242d5aa707cdb3..ac94706fa8b33dc5099df706ea3608d6add06e55 100644 (file)
@@ -718,7 +718,7 @@ static void __filesrc_pipeline_decodebin_pad_added_cb(GstElement *element, GstPa
                goto exit_with_remove_from_bin;
        }
 
-       source->av[av_idx].render.need_decoding = need_decoding;
+       _set_need_decoding_for_loopback(source, av_idx, need_decoding);
        GET_CAPS_INFO_FROM_PAD(pad, source->av[av_idx].render.appsrc_caps);
        _add_probe_to_pad_for_render(source, av_idx, gst_element_get_static_pad(queue, "src"), _source_data_probe_cb);
 
index b6bad05d69b8679789f855663150ae62b56c94be..3699737a6263c9cd3919a47a4bb39f901541c3c5 100644 (file)
@@ -399,8 +399,7 @@ int _unset_audio_loopback(webrtc_s *webrtc, unsigned int source_id)
                source->sound_stream_info.type = NULL;
        }
 
-       gst_element_set_state(source->av[AV_IDX_AUDIO].render.pipeline, GST_STATE_NULL);
-       SAFE_GST_OBJECT_UNREF(source->av[AV_IDX_AUDIO].render.pipeline);
+       _destroy_looopback_render_pipeline(source, AV_IDX_AUDIO);
 
        source->av[AV_IDX_AUDIO].render.appsrc = NULL;
 
@@ -470,8 +469,7 @@ int _unset_video_loopback(webrtc_s *webrtc, unsigned int source_id)
                source->display = NULL;
        }
 
-       gst_element_set_state(source->av[AV_IDX_VIDEO].render.pipeline, GST_STATE_NULL);
-       SAFE_GST_OBJECT_UNREF(source->av[AV_IDX_VIDEO].render.pipeline);
+       _destroy_looopback_render_pipeline(source, AV_IDX_VIDEO);
 
        source->av[AV_IDX_VIDEO].render.appsrc = NULL;
 
@@ -667,3 +665,21 @@ int _update_caps_for_render_with_resolution(webrtc_gst_slot_s *source, int width
 
        return WEBRTC_ERROR_NONE;
 }
+
+void _set_need_decoding_for_loopback(webrtc_gst_slot_s *source, int av_idx, bool need_decoding)
+{
+       RET_IF(source == NULL, "source is NULL");
+
+       source->av[av_idx].render.need_decoding = need_decoding;
+}
+
+void _destroy_looopback_render_pipeline(webrtc_gst_slot_s *source, int av_idx)
+{
+       RET_IF(source == NULL, "source is NULL");
+
+       if (!source->av[av_idx].render.pipeline)
+               return;
+
+       gst_element_set_state(source->av[av_idx].render.pipeline, GST_STATE_NULL);
+       SAFE_GST_OBJECT_UNREF(source->av[av_idx].render.pipeline);
+}
index 073db102beefa14d08fcb3eb075fb24a827ec434..8a13824db56b6429aa9f3f8614e2c4e10001c5a4 100644 (file)
@@ -719,7 +719,7 @@ int _create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source, bool n
                                caps_for_render = sink_caps;
                        }
 
-                       source->av[idx].render.need_decoding = true;
+                       _set_need_decoding_for_loopback(source, idx, true);
                        pad_for_render = gst_element_get_static_pad(capsfilter, "src");
 
                        goto skip_encoder;
@@ -784,8 +784,7 @@ int _create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source, bool n
 
        APPEND_ELEMENT(*element_list, encoder);
 
-       source->av[idx].render.need_decoding = false;
-
+       _set_need_decoding_for_loopback(source, idx, false);
 skip_encoder:
        CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_PAYLOADER_RTP,
                                                __make_default_encoded_caps(source, &webrtc->ini, &media_type),