From: Sangchul Lee Date: Wed, 4 Nov 2020 07:32:55 +0000 (+0900) Subject: webrtc_ini: Revise ini related codes X-Git-Tag: submit/tizen/20210729.023123~194 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3aa1d048c4df223ddd2f90e642b2420f5e79fba6;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_ini: Revise ini related codes video/audio codec items are moved to media source category. Divide defines into category and item. [Version] 0.1.48 [Issue Type] Improvement Change-Id: Iaea41b20e00265833a7454f8ca1baa85b6a85604 Signed-off-by: Sangchul Lee --- diff --git a/include/webrtc_private.h b/include/webrtc_private.h index f6dd7913..b89131ef 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -155,27 +155,31 @@ typedef enum { #define MLINES_IDX_AUDIO 0 #define MLINES_IDX_VIDEO 1 +typedef struct _ini_item_general_s { + bool generate_dot; + const char *dot_path; + gchar **gst_args; + gchar **gst_excluded_elements; +} ini_item_general_s; + +typedef struct _ini_item_media_source_s { + /* video source pipeline */ + const char *v_raw_format; + int v_width; + int v_height; + int v_framerate; + const char *v_codec; + /* audio source pipeline */ + const char *a_raw_format; + int a_samplerate; + int a_channels; + const char *a_codec; +} ini_item_media_source_s; + typedef struct _webrtc_ini_s { dictionary *dict; - struct { - gboolean generate_dot; - const char *dot_path; - gchar **gst_args; - gchar **gst_excluded_elements; - } general; - struct { - const char *v_format; - int v_width; - int v_height; - int v_framerate; - const char *a_format; - int a_samplerate; - int a_channels; - } media_source; - struct { - const char *video; - const char *audio; - } codec; + ini_item_general_s general; + ini_item_media_source_s media_source; } webrtc_ini_s; typedef struct _webrtc_gst_slot_s { diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 17dab197..9779ebd3 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.1.47 +Version: 0.1.48 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_ini.c b/src/webrtc_ini.c index c09e63ed..2a62da42 100644 --- a/src/webrtc_ini.c +++ b/src/webrtc_ini.c @@ -21,19 +21,27 @@ #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 @@ -62,7 +70,7 @@ static void __dump_item(const char *prefix_str, ini_item_type_e type, void *item 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); @@ -86,57 +94,110 @@ static void __dump_ini(webrtc_ini_s *ini) { 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; @@ -151,27 +212,27 @@ int _load_ini(webrtc_s *webrtc) 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); diff --git a/src/webrtc_source.c b/src/webrtc_source.c index a47743c1..5e4e3e82 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -148,7 +148,7 @@ static GstCaps *__make_default_raw_caps(webrtc_media_source_type_e type, webrtc_ 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, @@ -158,7 +158,7 @@ static GstCaps *__make_default_raw_caps(webrtc_media_source_type_e type, webrtc_ 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); @@ -183,7 +183,7 @@ static GstCaps *__make_default_encoded_caps(webrtc_media_source_type_e type, web 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, @@ -193,7 +193,7 @@ static GstCaps *__make_default_encoded_caps(webrtc_media_source_type_e type, web 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,