#define DEFAULT_GENERATE_DOT true
#define DEFAULT_DOT_PATH "/tmp"
#define DEFAULT_JITTERBUFFER_LATENCY 200 /* ms */
-#define DEFAULT_USE_ULPFEC_RED true
-#define DEFAULT_FEC_PERCENTAGE 100 /* FEC overhead percentage for the whole stream */
/* categories */
#define INI_CATEGORY_GENERAL "general"
#define INI_ITEM_GST_EXCLUDED_ELEMENTS "gstreamer excluded elements"
#define INI_ITEM_STUN_SERVER "stun server"
#define INI_ITEM_RTP_JITTERBUFFER_LATENCY "rtp jitterbuffer latency"
-#define INI_ITEM_USE_ULPFEC_RED "use ulpfec red"
-#define INI_ITEM_FEC_PERCENTAGE "fec percentage"
/* items for media source */
#define INI_ITEM_SOURCE_ELEMENT "source element"
#define INI_ITEM_AUDIO_CHANNELS "audio channels"
#define INI_ITEM_AUDIO_CODEC "audio codec"
#define INI_ITEM_AUDIO_HW_ENCODER_ELEMENT "audio hw encoder element"
+#define INI_ITEM_USE_ULPFEC_RED "use ulpfec red"
+#define INI_ITEM_FEC_PERCENTAGE "fec percentage"
#define DEFAULT_VIDEO_RAW_FORMAT "I420"
#define DEFAULT_VIDEO_WIDTH 320
#define DEFAULT_VIDEO_CODEC "vp8"
#define DEFAULT_AUDIO_CODEC "opus"
+#define DEFAULT_USE_ULPFEC_RED true
+#define DEFAULT_FEC_PERCENTAGE 100 /* FEC overhead percentage for the whole stream */
+
/* items for rendering sink */
#define INI_ITEM_AUDIO_SINK_ELEMENT "audio sink element"
#define INI_ITEM_VIDEO_SINK_ELEMENT "video sink element"
__dump_item(INI_ITEM_AUDIO_CHANNELS, INI_ITEM_TYPE_INT, &source->a_channels);
__dump_item(INI_ITEM_AUDIO_CODEC, INI_ITEM_TYPE_STRING, (void *)source->a_codec);
__dump_item(INI_ITEM_AUDIO_HW_ENCODER_ELEMENT, INI_ITEM_TYPE_STRING, (void *)source->a_hw_encoder_element);
+ __dump_item(INI_ITEM_USE_ULPFEC_RED, INI_ITEM_TYPE_BOOL, &source->use_ulpfec_red);
+ __dump_item(INI_ITEM_FEC_PERCENTAGE, INI_ITEM_TYPE_INT, &source->fec_percentage);
}
static bool __is_vpx(const char *v_codec)
__dump_item(INI_ITEM_GST_EXCLUDED_ELEMENTS, INI_ITEM_TYPE_STRINGS, ini->general.gst_excluded_elements);
__dump_item(INI_ITEM_STUN_SERVER, INI_ITEM_TYPE_STRING, (void *)ini->general.stun_server);
__dump_item(INI_ITEM_RTP_JITTERBUFFER_LATENCY, INI_ITEM_TYPE_INT, &ini->general.jitterbuffer_latency);
- __dump_item(INI_ITEM_USE_ULPFEC_RED, INI_ITEM_TYPE_BOOL, &ini->general.use_ulpfec_red);
- __dump_item(INI_ITEM_FEC_PERCENTAGE, INI_ITEM_TYPE_INT, &ini->general.fec_percentage);
LOG_INFO("[%s]", INI_CATEGORY_MEDIA_SOURCE);
__dump_items_of_source(&ini->media_source);
is_default ? DEFAULT_AUDIO_CODEC : ini->media_source.a_codec);
source->a_hw_encoder_element = __ini_get_string(ini->dict, category, INI_ITEM_AUDIO_HW_ENCODER_ELEMENT,
is_default ? NULL : ini->media_source.a_hw_encoder_element);
+ source->use_ulpfec_red = __ini_get_boolean(ini->dict, category, INI_ITEM_USE_ULPFEC_RED,
+ is_default ? DEFAULT_USE_ULPFEC_RED : ini->media_source.use_ulpfec_red);
+ source->fec_percentage = __ini_get_int(ini->dict, category, INI_ITEM_FEC_PERCENTAGE,
+ is_default ? DEFAULT_FEC_PERCENTAGE : ini->media_source.fec_percentage);
}
int _load_ini(webrtc_s *webrtc)
__ini_read_list(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_GST_EXCLUDED_ELEMENTS, &ini->general.gst_excluded_elements);
ini->general.stun_server = __ini_get_string(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_STUN_SERVER, NULL);
ini->general.jitterbuffer_latency = __ini_get_int(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_RTP_JITTERBUFFER_LATENCY, DEFAULT_JITTERBUFFER_LATENCY);
- ini->general.use_ulpfec_red = __ini_get_boolean(webrtc->ini.dict, INI_CATEGORY_GENERAL, INI_ITEM_USE_ULPFEC_RED, DEFAULT_USE_ULPFEC_RED);
- ini->general.fec_percentage = __ini_get_int(webrtc->ini.dict, INI_CATEGORY_GENERAL, INI_ITEM_FEC_PERCENTAGE, DEFAULT_FEC_PERCENTAGE);
/* default setting for a media source */
__apply_media_source_setting(ini, &ini->media_source, INI_CATEGORY_MEDIA_SOURCE);
return WEBRTC_ERROR_NONE;
}
-static void __webrtcbin_transceiver_set_ulpfec_red(webrtc_s *webrtc, GstWebRTCRTPTransceiver *transceiver)
+static void __webrtcbin_transceiver_set_ulpfec_red(webrtc_s *webrtc, int source_type, GstWebRTCRTPTransceiver *transceiver)
{
+ ini_item_media_source_s *ini_source;
GstElement *rtpbin;
RET_IF(webrtc == NULL, "webrtc is NULL");
RET_IF(transceiver == NULL, "transceiver is NULL");
- if (!webrtc->ini.general.use_ulpfec_red)
+ ini_source = _ini_get_source_by_type(&webrtc->ini, source_type);
+ if (ini_source == NULL)
+ ini_source = &(webrtc->ini.media_source);
+
+ if (!ini_source->use_ulpfec_red)
return;
g_object_set(transceiver,
"fec-type", GST_WEBRTC_FEC_TYPE_ULP_RED,
- "fec-percentage", webrtc->ini.general.fec_percentage,
+ "fec-percentage", ini_source->fec_percentage,
NULL);
- LOG_INFO("set ULPFEC/RED[percentage: %d] to transceiver[%p]", webrtc->ini.general.fec_percentage, transceiver);
+ LOG_INFO("set ULPFEC/RED[percentage: %d] to transceiver[%p]", ini_source->fec_percentage, transceiver);
if (!(rtpbin = gst_bin_get_by_name(GST_BIN(webrtc->gst.webrtcbin), "rtpbin"))) {
LOG_ERROR("failed to get rtpbin");
LOG_DEBUG("source[%s, id:%u, mline:%d for %s]",
(gchar*)key, source->id, source->av[i].mline, i == AV_IDX_AUDIO ? "AUDIO" : "VIDEO");
- __webrtcbin_transceiver_set_ulpfec_red(webrtc, transceiver);
+ __webrtcbin_transceiver_set_ulpfec_red(webrtc, source->type, transceiver);
}
}
}