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;
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)
{
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;
}
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;
}
}