#define DEFAULT_GENERATE_DOT TRUE
#define DEFAULT_DOT_PATH "/tmp"
-#define INI_ITEM_GENERAL_DOT_PATH "general:dot path"
-#define INI_ITEM_GENERAL_DOT_GENERATE "general:generate dot"
-#define INI_ITEM_GENERAL_GST_ARGS "general:gstreamer arguments"
-#define INI_ITEM_GENERAL_GST_EXCLUDED_ELEMENTS "general:gstreamer excluded elements"
-#define INI_ITEM_MEDIA_SOURCE_V_FORMAT "media source:video format"
-#define INI_ITEM_MEDIA_SOURCE_V_WIDTH "media source:video width"
-#define INI_ITEM_MEDIA_SOURCE_V_HEIGHT "media source:video height"
-#define INI_ITEM_MEDIA_SOURCE_V_FRAMERATE "media source:video framerate"
-#define INI_ITEM_MEDIA_SOURCE_A_FORMAT "media source:audio format"
-#define INI_ITEM_MEDIA_SOURCE_A_SAMPLERATE "media source:audio samplerate"
-#define INI_ITEM_MEDIA_SOURCE_A_CHANNELS "media source:audio channels"
-#define INI_ITEM_CODEC_VIDEO "codec:video codec"
-#define INI_ITEM_CODEC_AUDIO "codec:audio codec"
+/* categories */
+#define INI_CATEGORY_GENERAL "general:"
+#define INI_CATEGORY_MEDIA_SOURCE "media source:"
+
+/* items for general */
+#define INI_ITEM_DOT_PATH "dot path"
+#define INI_ITEM_DOT_GENERATE "generate dot"
+#define INI_ITEM_GST_ARGS "gstreamer arguments"
+#define INI_ITEM_GST_EXCLUDED_ELEMENTS "gstreamer excluded elements"
+
+/* items for media source */
+#define INI_ITEM_VIDEO_RAW_FORMAT "video raw format"
+#define INI_ITEM_VIDEO_WIDTH "video width"
+#define INI_ITEM_VIDEO_HEIGHT "video height"
+#define INI_ITEM_VIDEO_FRAMERATE "video framerate"
+#define INI_ITEM_VIDEO_CODEC "video codec"
+#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_HW_ENCODER_ELEMENT "hw encoder element"
#define DEFAULT_VIDEO_RAW_FORMAT "I420"
#define DEFAULT_VIDEO_WIDTH 320
switch (type) {
case INI_ITEM_TYPE_BOOL:
- LOG_INFO("- %-19s = %s", prefix_str, *(gboolean*)item ? "yes" : "no");
+ LOG_INFO("- %-19s = %s", prefix_str, *(bool*)item ? "yes" : "no");
break;
case INI_ITEM_TYPE_INT:
LOG_INFO("- %-19s = %d", prefix_str, *(int*)item);
{
RET_IF(ini == NULL, "ini is NULL");
- LOG_INFO("[general]");
- __dump_item("generate dot", INI_ITEM_TYPE_BOOL, &ini->general.generate_dot);
- __dump_item("dot path", INI_ITEM_TYPE_STRING, (void *)ini->general.dot_path);
- __dump_item("gstreamer arguments", INI_ITEM_TYPE_STRINGS, ini->general.gst_args);
- __dump_item("gstreamer excluded elements", INI_ITEM_TYPE_STRINGS, ini->general.gst_excluded_elements);
-
- LOG_INFO("[media source]");
- __dump_item("video format", INI_ITEM_TYPE_STRING, (void *)ini->media_source.v_format);
- __dump_item("video width", INI_ITEM_TYPE_INT, &ini->media_source.v_width);
- __dump_item("video height", INI_ITEM_TYPE_INT, &ini->media_source.v_height);
- __dump_item("video framerate", INI_ITEM_TYPE_INT, &ini->media_source.v_framerate);
- __dump_item("audio format", INI_ITEM_TYPE_STRING, (void *)ini->media_source.a_format);
- __dump_item("audio samplerate", INI_ITEM_TYPE_INT, &ini->media_source.a_samplerate);
- __dump_item("audio channels", INI_ITEM_TYPE_INT, &ini->media_source.a_channels);
-
- LOG_INFO("[codec]");
- __dump_item("video codec", INI_ITEM_TYPE_STRING, (void *)ini->codec.video);
- __dump_item("audio codec", INI_ITEM_TYPE_STRING, (void *)ini->codec.audio);
+ LOG_INFO("%s", INI_CATEGORY_GENERAL);
+ __dump_item(INI_ITEM_DOT_GENERATE, INI_ITEM_TYPE_BOOL, &ini->general.generate_dot);
+ __dump_item(INI_ITEM_DOT_PATH, INI_ITEM_TYPE_STRING, (void *)ini->general.dot_path);
+ __dump_item(INI_ITEM_GST_ARGS, INI_ITEM_TYPE_STRINGS, ini->general.gst_args);
+ __dump_item(INI_ITEM_GST_EXCLUDED_ELEMENTS, INI_ITEM_TYPE_STRINGS, ini->general.gst_excluded_elements);
+
+ LOG_INFO("%s", INI_CATEGORY_MEDIA_SOURCE);
+ __dump_item(INI_ITEM_VIDEO_RAW_FORMAT, INI_ITEM_TYPE_STRING, (void *)ini->media_source.v_raw_format);
+ __dump_item(INI_ITEM_VIDEO_WIDTH, INI_ITEM_TYPE_INT, &ini->media_source.v_width);
+ __dump_item(INI_ITEM_VIDEO_HEIGHT, INI_ITEM_TYPE_INT, &ini->media_source.v_height);
+ __dump_item(INI_ITEM_VIDEO_FRAMERATE, INI_ITEM_TYPE_INT, &ini->media_source.v_framerate);
+ __dump_item(INI_ITEM_VIDEO_CODEC, INI_ITEM_TYPE_STRING, (void *)ini->media_source.v_codec);
+ __dump_item(INI_ITEM_AUDIO_RAW_FORMAT, INI_ITEM_TYPE_STRING, (void *)ini->media_source.a_raw_format);
+ __dump_item(INI_ITEM_AUDIO_SAMPLERATE, INI_ITEM_TYPE_INT, &ini->media_source.a_samplerate);
+ __dump_item(INI_ITEM_AUDIO_CHANNELS, INI_ITEM_TYPE_INT, &ini->media_source.a_channels);
+ __dump_item(INI_ITEM_AUDIO_CODEC, INI_ITEM_TYPE_STRING, (void *)ini->media_source.a_codec);
}
static const char* __get_delimiter(const char *ini_path)
{
const char *delimiter = ",";
- if (g_strcmp0(ini_path, INI_ITEM_GENERAL_GST_ARGS) == 0)
+ if (g_strcmp0(ini_path, INI_ITEM_GST_ARGS) == 0)
delimiter = "|";
return delimiter;
}
-static void __ini_read_list(dictionary *dict, const char *ini_path, gchar ***list)
+static void __ini_read_list(dictionary *dict, const char *category, const char *item, gchar ***list)
{
const char *str;
+ gchar *path;
gchar *strtmp = NULL;
RET_IF(dict == NULL, "dict is NULL");
- RET_IF(ini_path == NULL, "ini_path is NULL");
+ RET_IF(category == NULL, "category is NULL");
+ RET_IF(item == NULL, "item is NULL");
RET_IF(list == NULL, "list is NULL");
- str = iniparser_getstring(dict, ini_path, NULL);
+ path = g_strconcat(category, item, NULL);
+ str = iniparser_getstring(dict, path, NULL);
if (str && strlen(str) > 0) {
strtmp = g_strdup(str);
g_strstrip(strtmp);
- *list = g_strsplit(strtmp, __get_delimiter(ini_path), 10);
+ *list = g_strsplit(strtmp, __get_delimiter((const char *)path), 10);
}
- LOG_DEBUG("[%s] %s", ini_path, strtmp ? strtmp : "none");
+ LOG_DEBUG("[%s] %s", path, strtmp ? strtmp : "none");
+ g_free(path);
g_free(strtmp);
}
+static const char* __ini_get_string(dictionary *dict, const char *category, const char *item, const char *default_value)
+{
+ gchar *path;
+ const char *ret_val;
+
+ RET_VAL_IF(dict == NULL, default_value, "dict is NULL");
+ RET_VAL_IF(category == NULL, default_value, "category is NULL");
+ RET_VAL_IF(item == NULL, default_value, "item is NULL");
+
+ path = g_strconcat(category, item, NULL);
+ ret_val = iniparser_getstring(dict, path, default_value);
+
+ g_free(path);
+
+ return ret_val;
+}
+
+static int __ini_get_int(dictionary *dict, const char *category, const char *item, int default_value)
+{
+ gchar *path;
+ int ret_val;
+
+ RET_VAL_IF(dict == NULL, default_value, "dict is NULL");
+ RET_VAL_IF(category == NULL, default_value, "category is NULL");
+ RET_VAL_IF(item == NULL, default_value, "item is NULL");
+
+ path = g_strconcat(category, item, NULL);
+ ret_val = iniparser_getint(dict, path, default_value);
+
+ g_free(path);
+
+ return ret_val;
+}
+
+static bool __ini_get_boolean(dictionary *dict, const char *category, const char *item, gboolean default_value)
+{
+ gchar *path;
+ bool ret_val;
+
+ RET_VAL_IF(dict == NULL, default_value, "dict is NULL");
+ RET_VAL_IF(category == NULL, default_value, "category is NULL");
+ RET_VAL_IF(item == NULL, default_value, "item is NULL");
+
+ path = g_strconcat(category, item, NULL);
+ ret_val = (bool)iniparser_getboolean(dict, path, default_value);
+
+ g_free(path);
+
+ return ret_val;
+}
+
int _load_ini(webrtc_s *webrtc)
{
webrtc_ini_s *ini;
LOG_WARNING("could not open ini[%s], use default values", WEBRTC_INI_PATH);
/* general */
- ini->general.generate_dot = iniparser_getboolean(ini->dict, INI_ITEM_GENERAL_DOT_GENERATE, DEFAULT_GENERATE_DOT);
- ini->general.dot_path = iniparser_getstring(ini->dict, INI_ITEM_GENERAL_DOT_PATH, DEFAULT_DOT_PATH);
+ ini->general.generate_dot = __ini_get_boolean(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_DOT_GENERATE, DEFAULT_GENERATE_DOT);
+ ini->general.dot_path = __ini_get_string(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_DOT_PATH, DEFAULT_DOT_PATH);
if (ini->general.generate_dot) {
LOG_INFO("dot file will be stored in [%s]", ini->general.dot_path);
g_setenv("GST_DEBUG_DUMP_DOT_DIR", ini->general.dot_path, FALSE);
}
- __ini_read_list(ini->dict, INI_ITEM_GENERAL_GST_ARGS, &ini->general.gst_args);
- __ini_read_list(ini->dict, INI_ITEM_GENERAL_GST_EXCLUDED_ELEMENTS, &ini->general.gst_excluded_elements);
-
- /* media source */
- ini->media_source.v_format = iniparser_getstring(ini->dict, INI_ITEM_MEDIA_SOURCE_V_FORMAT, DEFAULT_VIDEO_RAW_FORMAT);
- ini->media_source.v_width = iniparser_getint(ini->dict, INI_ITEM_MEDIA_SOURCE_V_WIDTH, DEFAULT_VIDEO_WIDTH);
- ini->media_source.v_height = iniparser_getint(ini->dict, INI_ITEM_MEDIA_SOURCE_V_HEIGHT, DEFAULT_VIDEO_HEIGHT);
- ini->media_source.v_framerate = iniparser_getint(ini->dict, INI_ITEM_MEDIA_SOURCE_V_FRAMERATE, DEFAULT_VIDEO_FRAMERATE);
- ini->media_source.a_format = iniparser_getstring(ini->dict, INI_ITEM_MEDIA_SOURCE_A_FORMAT, DEFAULT_AUDIO_RAW_FORMAT);
- ini->media_source.a_samplerate = iniparser_getint(ini->dict, INI_ITEM_MEDIA_SOURCE_A_SAMPLERATE, DEFAULT_AUDIO_SAMPLERATE);
- ini->media_source.a_channels = iniparser_getint(ini->dict, INI_ITEM_MEDIA_SOURCE_A_CHANNELS, DEFAULT_AUDIO_CHANNELS);
-
- /* codec */
- ini->codec.video = iniparser_getstring(ini->dict, INI_ITEM_CODEC_VIDEO, DEFAULT_VIDEO_CODEC);
- ini->codec.audio = iniparser_getstring(ini->dict, INI_ITEM_CODEC_AUDIO, DEFAULT_AUDIO_CODEC);
+ __ini_read_list(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_GST_ARGS, &ini->general.gst_args);
+ __ini_read_list(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_GST_EXCLUDED_ELEMENTS, &ini->general.gst_excluded_elements);
+
+ /* default setting for a media source */
+ ini->media_source.v_raw_format = __ini_get_string(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_VIDEO_RAW_FORMAT, DEFAULT_VIDEO_RAW_FORMAT);
+ ini->media_source.v_width = __ini_get_int(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_VIDEO_WIDTH, DEFAULT_VIDEO_WIDTH);
+ ini->media_source.v_height = __ini_get_int(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_VIDEO_HEIGHT, DEFAULT_VIDEO_HEIGHT);
+ ini->media_source.v_framerate = __ini_get_int(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_VIDEO_FRAMERATE, DEFAULT_VIDEO_FRAMERATE);
+ ini->media_source.v_codec = __ini_get_string(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_VIDEO_CODEC, DEFAULT_VIDEO_CODEC);
+ ini->media_source.a_raw_format = __ini_get_string(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_AUDIO_RAW_FORMAT, DEFAULT_AUDIO_RAW_FORMAT);
+ ini->media_source.a_samplerate = __ini_get_int(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_AUDIO_SAMPLERATE, DEFAULT_AUDIO_SAMPLERATE);
+ ini->media_source.a_channels = __ini_get_int(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_AUDIO_CHANNELS, DEFAULT_AUDIO_CHANNELS);
+ ini->media_source.a_codec = __ini_get_string(ini->dict, INI_CATEGORY_MEDIA_SOURCE, INI_ITEM_AUDIO_CODEC, DEFAULT_AUDIO_CODEC);
+
+ /* TODO: it overrides default variables above */
__dump_ini(ini);
case WEBRTC_MEDIA_SOURCE_TYPE_CAMERA:
case WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST:
caps = gst_caps_new_simple(MEDIA_TYPE_VIDEO_RAW,
- "format", G_TYPE_STRING, ini->media_source.v_format,
+ "format", G_TYPE_STRING, ini->media_source.v_raw_format,
"framerate", GST_TYPE_FRACTION, ini->media_source.v_framerate, 1,
"width", G_TYPE_INT, ini->media_source.v_width,
"height", G_TYPE_INT, ini->media_source.v_height,
case WEBRTC_MEDIA_SOURCE_TYPE_MIC:
case WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST:
caps = gst_caps_new_simple(MEDIA_TYPE_AUDIO_RAW,
- "format", G_TYPE_STRING, ini->media_source.a_format,
+ "format", G_TYPE_STRING, ini->media_source.a_raw_format,
"channels", G_TYPE_INT, ini->media_source.a_channels,
"rate", G_TYPE_INT, ini->media_source.a_samplerate,
NULL);
switch (type) {
case WEBRTC_MEDIA_SOURCE_TYPE_CAMERA:
case WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST:
- _media_type = __get_video_media_type(ini->codec.video);
+ _media_type = __get_video_media_type(ini->media_source.v_codec);
caps = gst_caps_new_simple(_media_type,
"framerate", GST_TYPE_FRACTION, ini->media_source.v_framerate, 1,
"width", G_TYPE_INT, ini->media_source.v_width,
case WEBRTC_MEDIA_SOURCE_TYPE_MIC:
case WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST:
- _media_type = __get_audio_media_type(ini->codec.audio);
+ _media_type = __get_audio_media_type(ini->media_source.a_codec);
caps = gst_caps_new_simple(_media_type,
"channels", G_TYPE_INT, ini->media_source.a_channels,
"rate", G_TYPE_INT, ini->media_source.a_samplerate,