From: Sangchul Lee Date: Fri, 10 Dec 2021 10:34:32 +0000 (+0900) Subject: webrtc_private: Revise FEC setting condition in case of answerer without media source X-Git-Tag: submit/tizen/20211216.092652~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8eee1faa97b6680dd67970da7c1d10dfb227ace6;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_private: Revise FEC setting condition in case of answerer without media source In this case, it is fixed to depend on related values of remote offer description instead of the ini value. 'fec-percentage' is not required for a 'recvonly' transceiver. [Version] 0.3.20 [Issue Type] Improvement Change-Id: I5de375283865ae604e590c7a74c099a649b3354c Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 2d9e59bc..cb0be760 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.3.19 +Version: 0.3.20 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_private.c b/src/webrtc_private.c index b14ef2ef..1253dad7 100644 --- a/src/webrtc_private.c +++ b/src/webrtc_private.c @@ -1121,7 +1121,7 @@ int _set_ghost_pad_target(GstPad *ghost_pad, GstElement *target_element, bool is return WEBRTC_ERROR_NONE; } -static void __webrtcbin_transceiver_set_ulpfec_red(webrtc_s *webrtc, unsigned int fec_percentage, GstWebRTCRTPTransceiver *transceiver) +static void __webrtcbin_transceiver_set_ulpfec_red(webrtc_s *webrtc, GstWebRTCRTPTransceiver *transceiver) { GstElement *rtpbin; @@ -1133,20 +1133,26 @@ static void __webrtcbin_transceiver_set_ulpfec_red(webrtc_s *webrtc, unsigned in return; } - g_object_set(transceiver, - "fec-type", GST_WEBRTC_FEC_TYPE_ULP_RED, - "fec-percentage", fec_percentage, - NULL); - - LOG_INFO("set ULPFEC/RED[percentage:%u] to transceiver[%p]", fec_percentage, transceiver); + g_object_set(transceiver, "fec-type", GST_WEBRTC_FEC_TYPE_ULP_RED, NULL); + LOG_INFO("set ULPFEC/RED to transceiver[%p]", transceiver); g_object_set(G_OBJECT(rtpbin), "do-lost", TRUE, NULL); - LOG_DEBUG("set do-lost to rtpbin[%p], ULPFEC recovers a lost packet when do-lost event occurs", rtpbin); gst_object_unref(rtpbin); } +static void __webrtcbin_transceiver_set_fec_percentage(webrtc_s *webrtc, GstWebRTCRTPTransceiver *transceiver, unsigned int fec_percentage) +{ + RET_IF(webrtc == NULL, "webrtc is NULL"); + RET_IF(transceiver == NULL, "transceiver is NULL"); + + g_object_set(transceiver, "fec-percentage", fec_percentage, NULL); + + LOG_INFO("set fec-percentage[%u] to transceiver[%p]", fec_percentage, transceiver); +} + + //LCOV_EXCL_START gchar * _get_media_type_from_pad(GstPad *pad) { @@ -1255,14 +1261,14 @@ static void __webrtcbin_on_new_transceiver_cb(GstElement *webrtcbin, GstWebRTCRT PRINT_CAPS(transceiver->codec_preferences, "codec preferences"); if (g_hash_table_size(webrtc->gst.source_slots) == 0) { - /* In this case, it might be an answerer without setting any media source. - * Check the default FEC value of media source, apply it if needed. */ - if (!(ini_source = &(webrtc->ini.media_source))) + if (transceiver->mline >= MAX_MLINE_NUM) { + LOG_ERROR("mline[%u] exceeds the max value", transceiver->mline); return; - if (!ini_source->use_ulpfec_red) - return; - - __webrtcbin_transceiver_set_ulpfec_red(webrtc, ini_source->fec_percentage, transceiver); + } + /* In this case, it might be an answerer without setting any media source. */ + if (webrtc->data_recovery_types[transceiver->mline].red && + webrtc->data_recovery_types[transceiver->mline].ulpfec) + __webrtcbin_transceiver_set_ulpfec_red(webrtc, transceiver); return; } @@ -1283,7 +1289,8 @@ static void __webrtcbin_on_new_transceiver_cb(GstElement *webrtcbin, GstWebRTCRT if (!ini_source->use_ulpfec_red) return; - __webrtcbin_transceiver_set_ulpfec_red(webrtc, ini_source->fec_percentage, transceiver); + __webrtcbin_transceiver_set_ulpfec_red(webrtc, transceiver); + __webrtcbin_transceiver_set_fec_percentage(webrtc, transceiver, ini_source->fec_percentage); return; } }