#define INI_ITEM_VIDEO_FRAMERATE "video framerate"
#define INI_ITEM_VIDEO_DRC_SUPPORT "video drc support" /* source element supports dynamic resolution change */
#define INI_ITEM_VIDEO_ENCODED_FMT_SUPPORT "video encoded format support" /* source element supports encoded format */
-#define INI_ITEM_VIDEO_CODEC "video codec"
+#define INI_ITEM_VIDEO_CODECS "video codecs"
#define INI_ITEM_VIDEO_HW_ENCODER_ELEMENT "video hw encoder element"
#define INI_ITEM_AUDIO_RAW_FORMAT "audio raw format"
#define INI_ITEM_AUDIO_SAMPLERATE "audio samplerate"
#define INI_ITEM_AUDIO_CHANNELS "audio channels"
-#define INI_ITEM_AUDIO_CODEC "audio codec"
+#define INI_ITEM_AUDIO_CODECS "audio codecs"
#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"
__dump_item(INI_ITEM_VIDEO_FRAMERATE, INI_ITEM_TYPE_INT, &source->v_framerate);
__dump_item(INI_ITEM_VIDEO_DRC_SUPPORT, INI_ITEM_TYPE_BOOL, &source->v_drc_support);
__dump_item(INI_ITEM_VIDEO_ENCODED_FMT_SUPPORT, INI_ITEM_TYPE_BOOL, &source->v_encoded_fmt_support);
- __dump_item(INI_ITEM_VIDEO_CODEC, INI_ITEM_TYPE_STRING, (void *)source->v_codec);
+ __dump_item(INI_ITEM_VIDEO_CODECS, INI_ITEM_TYPE_STRINGS, (void *)source->v_codecs);
__dump_item(INI_ITEM_VIDEO_HW_ENCODER_ELEMENT, INI_ITEM_TYPE_STRING, (void *)source->v_hw_encoder_element);
__dump_item(INI_ITEM_AUDIO_RAW_FORMAT, INI_ITEM_TYPE_STRING, (void *)source->a_raw_format);
__dump_item(INI_ITEM_AUDIO_SAMPLERATE, INI_ITEM_TYPE_INT, &source->a_samplerate);
__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_CODECS, INI_ITEM_TYPE_STRINGS, (void *)source->a_codecs);
__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);
__dump_item(INI_ITEM_PACKET_LOSS_PERCENTAGE, INI_ITEM_TYPE_INT, &source->packet_loss_percentage);
}
-static bool __is_vpx(const char *v_codec)
+static bool __is_vpx(const gchar * const* v_codecs)
{
- return (!g_strcmp0(v_codec, "vp8") || !g_strcmp0(v_codec, "vp9") ||
- !g_strcmp0(v_codec, "VP8") || !g_strcmp0(v_codec, "VP9"));
+ return (g_strv_contains(v_codecs, "vp8") || g_strv_contains(v_codecs, "vp9") ||
+ g_strv_contains(v_codecs, "VP8") || g_strv_contains(v_codecs, "VP9"));
}
static void __dump_ini(webrtc_ini_s *ini)
is_default ? DEFAULT_VIDEO_DRC_SUPPORT : ini->media_source.v_drc_support);
source->v_encoded_fmt_support = __ini_get_boolean(ini->dict, category, INI_ITEM_VIDEO_ENCODED_FMT_SUPPORT,
is_default ? DEFAULT_VIDEO_ENCODED_FMT_SUPPORT : ini->media_source.v_encoded_fmt_support);
- source->v_codec = __ini_get_string(ini->dict, category, INI_ITEM_VIDEO_CODEC,
- is_default ? DEFAULT_VIDEO_CODEC : ini->media_source.v_codec);
+ __ini_read_list(ini->dict, category, INI_ITEM_VIDEO_CODECS, &source->v_codecs, is_default ? NULL : ini->media_source.v_codecs);
source->v_hw_encoder_element = __ini_get_string(ini->dict, category, INI_ITEM_VIDEO_HW_ENCODER_ELEMENT,
is_default ? NULL : ini->media_source.v_hw_encoder_element);
source->a_raw_format = __ini_get_string(ini->dict, category, INI_ITEM_AUDIO_RAW_FORMAT,
is_default ? DEFAULT_AUDIO_SAMPLERATE : ini->media_source.a_samplerate);
source->a_channels = __ini_get_int(ini->dict, category, INI_ITEM_AUDIO_CHANNELS,
is_default ? DEFAULT_AUDIO_CHANNELS : ini->media_source.a_channels);
- source->a_codec = __ini_get_string(ini->dict, category, INI_ITEM_AUDIO_CODEC,
- is_default ? DEFAULT_AUDIO_CODEC : ini->media_source.a_codec);
+ __ini_read_list(ini->dict, category, INI_ITEM_AUDIO_CODECS, &source->a_codecs, is_default ? NULL : ini->media_source.a_codecs);
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,
ini->resource_acquisition.video_overlay = __ini_get_boolean(ini->dict, INI_CATEGORY_RESOURCE_ACQUISITION,
INI_ITEM_RESOURCE_VIDEO_OVERLAY, DEFAULT_RESOURCE_VIDEO_OVERLAY_REQUIRED);
- if (__is_vpx(ini->media_source.v_codec))
+ if (__is_vpx((const gchar * const*)ini->media_source.v_codecs))
__apply_vpxenc_params_setting(ini, &ini->vpxenc_params, INI_CATEGORY_VPXENC_PARAMS);
__dump_ini(ini);
if (ini_source == NULL)
ini_source = &ini->media_source;
+ if (source->media_types == MEDIA_TYPE_AUDIO)
+ RET_VAL_IF(ini_source->a_codecs == NULL, NULL, "a_codecs is NULL");
+ else if (source->media_types == MEDIA_TYPE_VIDEO)
+ RET_VAL_IF(ini_source->v_codecs == NULL, NULL, "v_codecs is NULL");
+
switch (source->type) {
case WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST:
case WEBRTC_MEDIA_SOURCE_TYPE_CAMERA:
case WEBRTC_MEDIA_SOURCE_TYPE_SCREEN:
case WEBRTC_MEDIA_SOURCE_TYPE_CUSTOM_VIDEO:
- _media_type = __get_video_media_type(ini_source->v_codec);
+ _media_type = __get_video_media_type(ini_source->v_codecs[0]);
RET_VAL_IF(_media_type == NULL, NULL, "_media_type is NULL");
source->video_info.width = source->video_info.width > 0 ? source->video_info.width : ini_source->v_width;
case WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST:
case WEBRTC_MEDIA_SOURCE_TYPE_MIC:
case WEBRTC_MEDIA_SOURCE_TYPE_CUSTOM_AUDIO:
- _media_type = __get_audio_media_type(ini_source->a_codec);
+ _media_type = __get_audio_media_type(ini_source->a_codecs[0]);
RET_VAL_IF(_media_type == NULL, NULL, "_media_type is NULL");
caps = __get_caps_from_encoded_audio_media_type(_media_type, ini_source->a_channels, ini_source->a_samplerate);
break;
case WEBRTC_MEDIA_SOURCE_TYPE_MEDIA_PACKET:
if (source->media_types == MEDIA_TYPE_AUDIO) {
- _media_type = __get_audio_media_type(ini_source->a_codec);
+ _media_type = __get_audio_media_type(ini_source->a_codecs[0]);
RET_VAL_IF(_media_type == NULL, NULL, "_media_type is NULL");
caps = __get_caps_from_encoded_audio_media_type(_media_type, ini_source->a_channels, ini_source->a_samplerate);
} else if (source->media_types == MEDIA_TYPE_VIDEO) {
- _media_type = __get_video_media_type(ini_source->v_codec);
+ _media_type = __get_video_media_type(ini_source->v_codecs[0]);
RET_VAL_IF(_media_type == NULL, NULL, "_media_type is NULL");
caps = __get_caps_from_encoded_video_media_type(_media_type, ini_source->v_width, ini_source->v_height);
} else {