webrtc_source_mediapacket: Revise the timing of invoking the nego. needed cb 27/314627/3 accepted/tizen/unified/20240718.143629 accepted/tizen/unified/dev/20240722.073428 accepted/tizen/unified/x/20240719.012645
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 16 Jul 2024 08:45:44 +0000 (17:45 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 16 Jul 2024 23:54:08 +0000 (08:54 +0900)
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 <sc11.lee@samsung.com>
include/webrtc_source_private.h
packaging/capi-media-webrtc.spec
src/webrtc_source_mediapacket.c
src/webrtc_source_private.c

index 7ee3e8fba297193779ae296972f4703af3cc4376..5f424ae90c9750679af76e45b4ca0c4bc8bdda46 100644 (file)
@@ -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);
index fe8ebf62959630cdd09b05f885f75e1933f8d403..728e73942a1fb052619143cad3460ebf775c77a6 100644 (file)
@@ -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
index ba7d4eea69300d71b4e69d958e0d12d815975e3f..a9dd577697104d74bc49b1b4509af0690e6dc43a 100644 (file)
@@ -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)))
index e54998745fe6be91a2c3c06024a89df40b266cac..44f119f2874d62d2546e23dd69cca86b61bfa75f 100644 (file)
@@ -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;