From: Sangchul Lee Date: Fri, 12 Jul 2024 06:15:49 +0000 (+0900) Subject: webrtc_source_mediapacket: Set picture-id-mode in case of VP8 payloader X-Git-Tag: accepted/tizen/unified/20240715.155426~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F73%2F314473%2F1;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source_mediapacket: Set picture-id-mode in case of VP8 payloader It is applied similarly with the commit below. : 17e92a5dcf40ad3a82cde8fa3c1cb41652f2ccb3 _update_payloader_vp8_picture_id_mode() is extracted from the previous codes. [Version] 1.1.13 [Issue Type] Improvement Change-Id: I6e390f72f0664ee709d14f9db2843d41b33b6542 Signed-off-by: Sangchul Lee --- diff --git a/include/webrtc_source_private.h b/include/webrtc_source_private.h index f8c66151..7ee3e8fb 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_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); int _set_encoder_element_bitrate(GstElement *encoder, int target_bitrate); diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index c1c3b065..367c6630 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.12 +Version: 1.1.13 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_source_mediapacket.c b/src/webrtc_source_mediapacket.c index fec84a58..ba7d4eea 100644 --- a/src/webrtc_source_mediapacket.c +++ b/src/webrtc_source_mediapacket.c @@ -323,6 +323,8 @@ static int __create_rest_of_elements_for_encoded_format(webrtc_s *webrtc, webrtc goto error; APPEND_ELEMENT(*element_list, payloader); + _update_payloader_vp8_picture_id_mode(payloader); + if (!(queue = _create_element(DEFAULT_ELEMENT_QUEUE, NULL))) goto error; APPEND_ELEMENT(*element_list, queue); diff --git a/src/webrtc_source_private.c b/src/webrtc_source_private.c index fc61ee6b..e5499874 100644 --- a/src/webrtc_source_private.c +++ b/src/webrtc_source_private.c @@ -887,6 +887,25 @@ GstElement *_prepare_videorate(webrtc_gst_slot_s *source, int ssrc, GList **elem return videorateCapsfilter; } +void _update_payloader_vp8_picture_id_mode(GstElement *payloader) +{ + const gchar *factory_name; + + ASSERT(payloader); + + factory_name = GST_OBJECT_NAME(gst_element_get_factory(payloader)); + if (g_strcmp0(factory_name, "rtpvp8pay")) + return; + + /* NOTE: picture-id-mode has been set for compatibility with mediasoup.*/ + #define VP8_PAYLOADER_7BIT_PICTURE_ID 1 /* 7-bit Picture ID */ + g_object_set(G_OBJECT(payloader), + "picture-id-mode", VP8_PAYLOADER_7BIT_PICTURE_ID, + NULL); + + LOG_DEBUG("[%s] set picture-id-mode [%d]", factory_name, VP8_PAYLOADER_7BIT_PICTURE_ID); +} + int _create_rest_of_elements(webrtc_s *webrtc, webrtc_gst_slot_s *source, int ssrc, bool need_capsfilter, GList **element_list, bool is_audio) { GstElement *encoder = NULL; @@ -979,17 +998,8 @@ skip_encoder: goto error; APPEND_ELEMENT(*element_list, payloader); if (!source->av[idx].payloader_factory_name) { - GstElementFactory *factory = gst_element_get_factory(payloader); - source->av[idx].payloader_factory_name = g_strdup(GST_OBJECT_NAME(factory)); - if (!g_strcmp0(source->av[idx].payloader_factory_name, "rtpvp8pay")) { - /* NOTE: picture-id-mode has been set for compatibility with mediasoup.*/ - #define VP8_PAYLOADER_7BIT_PICTURE_ID 1 /* 7-bit Picture ID */ - g_object_set(G_OBJECT(payloader), - "picture-id-mode", VP8_PAYLOADER_7BIT_PICTURE_ID, - NULL); - LOG_DEBUG("[%s] set picture-id-mode [%d]", - source->av[idx].payloader_factory_name, VP8_PAYLOADER_7BIT_PICTURE_ID); - } + source->av[idx].payloader_factory_name = g_strdup(GST_OBJECT_NAME(gst_element_get_factory(payloader))); + _update_payloader_vp8_picture_id_mode(payloader); } if (!is_simulcast) {