From: Hyunil Date: Thu, 5 Nov 2020 01:57:10 +0000 (+0900) Subject: webrtc_sink: Set wait-for-keyframe to rtpv8depay X-Git-Tag: submit/tizen/20210729.023123~195 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8d286e2924325d6d1c0524425aff230de2cb2e28;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_sink: Set wait-for-keyframe to rtpv8depay - If property is set, rtpvp8depay drops the buffer being depayed and wait intra frame when packet loss occurs - Add element-added callback [Version] 0.1.47 [Issue Type] Improvement Change-Id: Ia1289fc3e954e42dde53e8910c4a8e94c529563c Signed-off-by: Hyunil --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 20910378..17dab197 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.1.46 +Version: 0.1.47 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_sink.c b/src/webrtc_sink.c index 0c631dca..a07e1518 100644 --- a/src/webrtc_sink.c +++ b/src/webrtc_sink.c @@ -163,6 +163,23 @@ static void __invoke_track_added_cb(webrtc_s *webrtc, const gchar *name, gboolea } } +static void __decodebin_element_added_cb(GstElement *decodebin, GstElement *element, gpointer user_data) +{ + gchar *factory_name = NULL; + + RET_IF(decodebin == NULL, "decodebin is NULL"); + RET_IF(element == NULL, "element is NULL"); + + factory_name = GST_OBJECT_NAME(gst_element_get_factory(element)); + + LOG_INFO("element[name: %s] was added to decodebin", GST_ELEMENT_NAME(element)); + + if (g_strrstr(factory_name, "rtpvp8depay")) { + LOG_INFO("set wait-for-keyframe to rtpvp8depay"); + g_object_set(G_OBJECT(element), "wait-for-keyframe", TRUE, NULL); + } +} + static void __decodebin_pad_added_cb(GstElement *decodebin, GstPad *new_pad, gpointer user_data) { int ret = WEBRTC_ERROR_NONE; @@ -263,6 +280,7 @@ int _add_rendering_sink_bin(webrtc_s *webrtc, GstPad *src_pad) g_signal_connect(decodebin, "pad-added", G_CALLBACK(__decodebin_pad_added_cb), webrtc); g_signal_connect(decodebin, "autoplug-select", G_CALLBACK(__decodebin_autoplug_select_cb), webrtc); + g_signal_connect(decodebin, "element-added", G_CALLBACK(__decodebin_element_added_cb), NULL); ret = _add_no_target_ghostpad_to_slot(sink, FALSE, &sink_pad); if (ret != WEBRTC_ERROR_NONE)