Apply zero copy format for camerasrc and h/w encoder 54/238454/2
authorHyunil <hyunil46.park@samsung.com>
Tue, 14 Jul 2020 01:42:39 +0000 (10:42 +0900)
committerHyunil <hyunil46.park@samsung.com>
Tue, 14 Jul 2020 05:40:49 +0000 (14:40 +0900)
[Version] 0.1.93
[Issue Type] Improvement

Change-Id: Ib9cdbd5dd5eb7938fed2845bf930998a490dd300
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
include/media_streamer_util.h
packaging/capi-media-streamer.spec
src/media_streamer_util.c

index ffd5d99..1e9b957 100644 (file)
@@ -148,6 +148,7 @@ typedef struct _media_streamer_wl_info_s {
 /* general */
 #define DEFAULT_GENERATE_DOT                FALSE
 #define DEFAULT_USE_DECODEBIN               FALSE
+#define DEFAULT_USE_ZEROCOPY                FALSE
 #define DEFAULT_QUEUE                       "queue"
 #define DEFAULT_FILTER                      "capsfilter"
 #define DEFAULT_TYPEFIND                    "typefind"
@@ -269,6 +270,11 @@ void ms_load_ini_settings(media_streamer_ini_t *ini);
 gchar *ms_ini_get_string(const char *ini_path, const char *default_str);
 
 /**
+ * @brief Read boolean value from ini file.
+ */
+gboolean ms_ini_get_boolean(const char *ini_path, gboolean default_value);
+
+/**
  * @brief Reads comma-separated string list from ini file.
  */
 void ms_ini_read_list(const char *key, gchar ***list);
index 7cf6e2a..b1bffa2 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-streamer
 Summary:    A Media Streamer API
-Version:    0.1.92
+Version:    0.1.93
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index c9f5106..57967e2 100644 (file)
 #include "media_streamer_priv.h"
 #include "media_streamer_util.h"
 
+static const format_s zerocopy_fmt_table[] = {
+       {MEDIA_FORMAT_I420, "S420"},
+       {MEDIA_FORMAT_NV12, "SN12"},
+       {MEDIA_FORMAT_NV12T, "ST12"},
+       {MEDIA_FORMAT_NV21, "SN21"},
+       {MEDIA_FORMAT_MAX, NULL}
+};
+
 static const format_s format_table[] = {
        /* Audio - ENCODED */
        {MEDIA_FORMAT_L16, "audio/x-raw"},
@@ -131,6 +139,22 @@ gchar *ms_ini_get_string(const char *ini_path, const char *default_str)
        return g_strdup(result_str);
 }
 
+gboolean ms_ini_get_boolean(const char *ini_path, gboolean default_value)
+{
+       gboolean result_value = default_value;
+
+       ms_retvm_if(ini_path == NULL, default_value, "Invalid ini path");
+       ms_debug_fenter();
+
+       if (__ms_get_ini_instance())
+               result_value = iniparser_getboolean(__ms_get_ini_instance(), ini_path, default_value);
+
+       ms_info("%s :result value(%d)", ini_path, result_value);
+       ms_debug_fleave();
+
+       return result_value;
+}
+
 void ms_ini_read_list(const char *key, gchar ***list)
 {
        const gchar *str;
@@ -197,9 +221,12 @@ const gchar *ms_convert_mime_to_string_format(media_format_mimetype_e mime)
 {
        gchar *format_name = NULL;
        int it_format;
+       gboolean use_zerocopy_fmt = DEFAULT_USE_ZEROCOPY;
 
        ms_debug_fenter();
 
+       use_zerocopy_fmt = ms_ini_get_boolean("general:use zerocopy", DEFAULT_USE_ZEROCOPY);
+
        for (it_format = 0; format_table[it_format].format != MEDIA_FORMAT_MAX; it_format++) {
                if (mime == format_table[it_format].format) {
                        format_name = format_table[it_format].format_name;
@@ -207,6 +234,15 @@ const gchar *ms_convert_mime_to_string_format(media_format_mimetype_e mime)
                }
        }
 
+       if (use_zerocopy_fmt) {
+               for (it_format = 0; zerocopy_fmt_table[it_format].format != MEDIA_FORMAT_MAX; it_format++) {
+                       if (mime == zerocopy_fmt_table[it_format].format) {
+                               format_name = zerocopy_fmt_table[it_format].format_name;
+                               break;
+                       }
+               }
+       }
+
        if (!format_name)
                ms_warning("Not supported this mimetype[0x%x]", mime);
 
@@ -246,9 +282,12 @@ media_format_mimetype_e ms_convert_string_format_to_media_format(const char *for
 {
        media_format_mimetype_e mime = MEDIA_FORMAT_NATIVE_VIDEO;
        int it_format;
+       gboolean use_zerocopy_fmt = DEFAULT_USE_ZEROCOPY;
 
        ms_debug_fenter();
 
+       use_zerocopy_fmt = ms_ini_get_boolean("general:use zerocopy", DEFAULT_USE_ZEROCOPY);
+
        for (it_format = 0; format_table[it_format].format != MEDIA_FORMAT_MAX; it_format++) {
                if (g_strrstr(format_type, format_table[it_format].format_name)) {
                        mime = format_table[it_format].format;
@@ -256,6 +295,15 @@ media_format_mimetype_e ms_convert_string_format_to_media_format(const char *for
                }
        }
 
+       if (use_zerocopy_fmt) {
+               for (it_format = 0; zerocopy_fmt_table[it_format].format != MEDIA_FORMAT_MAX; it_format++) {
+                       if (g_strrstr(format_type, zerocopy_fmt_table[it_format].format_name)) {
+                               mime = zerocopy_fmt_table[it_format].format;
+                               break;
+                       }
+               }
+       }
+
        ms_debug_fleave();
 
        return mime;