From 8ac70bf17c36eb42956341b461f536a4c1550871 Mon Sep 17 00:00:00 2001 From: hj kim Date: Mon, 5 Sep 2022 11:41:48 +0900 Subject: [PATCH] webrtc_source_loopback: Add some functions to update loopback 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 | 2 ++ packaging/capi-media-webrtc.spec | 2 +- src/webrtc_source.c | 10 ++-------- src/webrtc_source_file.c | 2 +- src/webrtc_source_loopback.c | 24 ++++++++++++++++++++---- src/webrtc_source_private.c | 5 ++--- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/include/webrtc_private.h b/include/webrtc_private.h index fb5da787..34205f54 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -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); diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 629f46b7..f5e61018 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.232 +Version: 0.3.233 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index ad4df969..f1fb369f 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -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); diff --git a/src/webrtc_source_file.c b/src/webrtc_source_file.c index d6623fa5..ac94706f 100644 --- a/src/webrtc_source_file.c +++ b/src/webrtc_source_file.c @@ -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); diff --git a/src/webrtc_source_loopback.c b/src/webrtc_source_loopback.c index b6bad05d..3699737a 100644 --- a/src/webrtc_source_loopback.c +++ b/src/webrtc_source_loopback.c @@ -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); +} diff --git a/src/webrtc_source_private.c b/src/webrtc_source_private.c index 073db102..8a13824d 100644 --- a/src/webrtc_source_private.c +++ b/src/webrtc_source_private.c @@ -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), -- 2.34.1