From: Sangchul Lee Date: Tue, 16 Jul 2024 08:45:44 +0000 (+0900) Subject: webrtc_source_mediapacket: Revise the timing of invoking the nego. needed cb X-Git-Tag: accepted/tizen/unified/20240718.143629^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F27%2F314627%2F3;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source_mediapacket: Revise the timing of invoking the nego. needed cb Previously, in case of h264 format, pushing a h264 buffer is required to invoke webrtcbin's negotiation needed callback. With setting the particular property of rtph264pay, it'll be invoked before pushing the first buffer. [Version] 1.1.16 [Issue Type] Improvement Change-Id: I9fb47ded651886a9a3dfb23b68b57b787830ca2f Signed-off-by: Sangchul Lee --- diff --git a/include/webrtc_source_private.h b/include/webrtc_source_private.h index 7ee3e8fb..5f424ae9 100644 --- a/include/webrtc_source_private.h +++ b/include/webrtc_source_private.h @@ -95,6 +95,7 @@ bool _is_videoscale_needed(webrtc_s *webrtc, webrtc_gst_slot_s *source); bool _is_videorate_needed(webrtc_s *webrtc, webrtc_gst_slot_s *source); GstElement *_prepare_first_capsfilter(webrtc_s *webrtc, webrtc_gst_slot_s *source, int ssrc, int av_idx, GList **element_list, bool *encoded_support, GstCaps **caps_for_render); GstElement *_prepare_videorate(webrtc_gst_slot_s *source, int ssrc, GList **element_list); +void _update_payloader_h264_set_outcaps_before_handling_buffer(GstElement *payloader); void _update_payloader_vp8_picture_id_mode(GstElement *payloader); int _create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source, int ssrc, bool need_capsfilter, GList **element_list, bool is_audio); GstCaps *_make_default_encoded_caps(webrtc_gst_slot_s *source, int ssrc, webrtc_ini_s *ini, gchar **media_type); diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index fe8ebf62..728e7394 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: 1.1.15 +Version: 1.1.16 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_source_mediapacket.c b/src/webrtc_source_mediapacket.c index ba7d4eea..a9dd5776 100644 --- a/src/webrtc_source_mediapacket.c +++ b/src/webrtc_source_mediapacket.c @@ -323,6 +323,7 @@ static int __create_rest_of_elements_for_encoded_format(webrtc_s *webrtc, webrtc goto error; APPEND_ELEMENT(*element_list, payloader); + _update_payloader_h264_set_outcaps_before_handling_buffer(payloader); _update_payloader_vp8_picture_id_mode(payloader); if (!(queue = _create_element(DEFAULT_ELEMENT_QUEUE, NULL))) diff --git a/src/webrtc_source_private.c b/src/webrtc_source_private.c index e5499874..44f119f2 100644 --- a/src/webrtc_source_private.c +++ b/src/webrtc_source_private.c @@ -887,6 +887,29 @@ GstElement *_prepare_videorate(webrtc_gst_slot_s *source, int ssrc, GList **elem return videorateCapsfilter; } +void _update_payloader_h264_set_outcaps_before_handling_buffer(GstElement *payloader) +{ + const gchar *factory_name; + const char *prop_name = "set-outcaps-before-handle-buffer"; + + ASSERT(payloader); + + factory_name = GST_OBJECT_NAME(gst_element_get_factory(payloader)); + if (g_strcmp0(factory_name, "rtph264pay")) + return; + + if (!g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(payloader)), prop_name)) { + LOG_ERROR("could not find '%s', please check gstreamer rtph264pay", prop_name); + return; + } + + g_object_set(G_OBJECT(payloader), + prop_name, TRUE, + NULL); + + LOG_DEBUG("[%s] %s [TRUE]", factory_name, prop_name); +} + void _update_payloader_vp8_picture_id_mode(GstElement *payloader) { const gchar *factory_name;