webrtc_ini: Revise ini related codes 19/246919/4
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 4 Nov 2020 07:32:55 +0000 (16:32 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Mon, 9 Nov 2020 09:52:20 +0000 (18:52 +0900)
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 <sc11.lee@samsung.com>
include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_ini.c
src/webrtc_source.c

index f6dd791354e96c37a6c17ff490218bf91385004f..b89131efcece7f1652ac934db50c7e9afd9289d6 100644 (file)
@@ -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 {
index 17dab197a7f9d52cac95b8f1dd2c788c045c9622..9779ebd371618dea8d2e69a0e34b9edfd336ada2 100644 (file)
@@ -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
index c09e63ed5418590ccf8ae5f0ff7f70227451ec72..2a62da421dec249c2658af4b8ee7eac3b74b41d6 100644 (file)
 #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);
 
index a47743c100fe152fe8e6960bb56005eb2e4b629c..5e4e3e822e99a1e0a3206149aae49daedb7dcc2b 100644 (file)
@@ -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,