From: Sangchul Lee Date: Wed, 15 Sep 2021 09:07:53 +0000 (+0900) Subject: webrtc_sink: Use fakesink to drop receiving audio data if stream_info is not set X-Git-Tag: submit/tizen/20210916.061019^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3624d1766927ad083acd2da0039a26a53d2fd9e7;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_sink: Use fakesink to drop receiving audio data if stream_info is not set [Version] 0.2.100 [Issue Type] Improvement Change-Id: I056d6b1b4fce1dfcb0a20a969631326ec7d7be7d Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 4ecab4e8..f0737f9a 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.2.99 +Version: 0.2.100 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_sink.c b/src/webrtc_sink.c index 3afae365..585d9c2a 100644 --- a/src/webrtc_sink.c +++ b/src/webrtc_sink.c @@ -221,6 +221,7 @@ static int __build_audiosink(webrtc_s *webrtc, GstElement *decodebin, GstPad *sr GstElement *audioconvert; GstElement *audioresample; GstElement *audiosink; + bool stream_info_is_set; int ret = WEBRTC_ERROR_NONE; RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL"); @@ -233,47 +234,62 @@ static int __build_audiosink(webrtc_s *webrtc, GstElement *decodebin, GstPad *sr sink->media_types = MEDIA_TYPE_AUDIO; - if (!(audioconvert = _create_element(DEFAULT_ELEMENT_AUDIOCONVERT, NULL))) { - LOG_ERROR("failed to create audioconvert"); - return WEBRTC_ERROR_INVALID_OPERATION; - } + stream_info_is_set = !!sink->sound_stream_info.type; - if (!(audioresample = _create_element(DEFAULT_ELEMENT_AUDIORESAMPLE, NULL))) { - LOG_ERROR("failed to create audioresample"); - return WEBRTC_ERROR_INVALID_OPERATION; - } + if (stream_info_is_set) { + if (!(audioconvert = _create_element(DEFAULT_ELEMENT_AUDIOCONVERT, NULL))) + return WEBRTC_ERROR_INVALID_OPERATION; - if (!(audiosink = _create_element(webrtc->ini.rendering_sink.a_sink_element, NULL))) { - LOG_ERROR("failed to create audiosink"); - return WEBRTC_ERROR_INVALID_OPERATION; - } + if (!(audioresample = _create_element(DEFAULT_ELEMENT_AUDIORESAMPLE, NULL))) + return WEBRTC_ERROR_INVALID_OPERATION; + + if (!(audiosink = _create_element(webrtc->ini.rendering_sink.a_sink_element, NULL))) + return WEBRTC_ERROR_INVALID_OPERATION; - if (g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(audiosink)), "stream-properties")) { - if (sink->sound_stream_info.type) { - ret = _apply_stream_info(audiosink, sink->sound_stream_info.type, sink->sound_stream_info.index); - if (ret != WEBRTC_ERROR_NONE) /* FIXME: unref all the created elements */ - return WEBRTC_ERROR_INVALID_OPERATION; + if (g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(audiosink)), "stream-properties")) { + if (sink->sound_stream_info.type) { + ret = _apply_stream_info(audiosink, sink->sound_stream_info.type, sink->sound_stream_info.index); + if (ret != WEBRTC_ERROR_NONE) /* FIXME: unref all the created elements */ + return WEBRTC_ERROR_INVALID_OPERATION; + } } - } - gst_bin_add_many(sink->bin, audioconvert, audioresample, audiosink, NULL); + gst_bin_add_many(sink->bin, audioconvert, audioresample, audiosink, NULL); - if (!gst_element_sync_state_with_parent(audioconvert)) { - LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(audioconvert)); - return WEBRTC_ERROR_INVALID_OPERATION; - } - if (!gst_element_sync_state_with_parent(audioresample)) { - LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(audioresample)); - return WEBRTC_ERROR_INVALID_OPERATION; - } - if (!gst_element_sync_state_with_parent(audiosink)) { - LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(audiosink)); - return WEBRTC_ERROR_INVALID_OPERATION; - } + if (!gst_element_sync_state_with_parent(audioconvert)) { + LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(audioconvert)); + return WEBRTC_ERROR_INVALID_OPERATION; + } + if (!gst_element_sync_state_with_parent(audioresample)) { + LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(audioresample)); + return WEBRTC_ERROR_INVALID_OPERATION; + } + if (!gst_element_sync_state_with_parent(audiosink)) { + LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(audiosink)); + return WEBRTC_ERROR_INVALID_OPERATION; + } - if (!gst_element_link_many(decodebin, audioconvert, audioresample, audiosink, NULL)) { - LOG_ERROR("failed to gst_element_link_many()"); - return WEBRTC_ERROR_INVALID_OPERATION; + if (!gst_element_link_many(decodebin, audioconvert, audioresample, audiosink, NULL)) { + LOG_ERROR("failed to gst_element_link_many()"); + return WEBRTC_ERROR_INVALID_OPERATION; + } + + } else { + LOG_WARNING("stream_info is not set, use [%s] to drop audio data", DEFAULT_ELEMENT_FAKESINK); + if (!(audiosink = _create_element(DEFAULT_ELEMENT_FAKESINK, NULL))) + return WEBRTC_ERROR_INVALID_OPERATION; + + gst_bin_add(sink->bin, audiosink); + + if (!gst_element_sync_state_with_parent(audiosink)) { + LOG_ERROR("failed to gst_element_sync_state_with_parent() for [%s]", GST_ELEMENT_NAME(audiosink)); + return WEBRTC_ERROR_INVALID_OPERATION; + } + + if (!gst_element_link_many(decodebin, audiosink, NULL)) { + LOG_ERROR("failed to gst_element_link_many()"); + return WEBRTC_ERROR_INVALID_OPERATION; + } } return WEBRTC_ERROR_NONE;