Add feature for preloading plugins for GStreamer 66/227066/3 accepted/tizen/unified/20200315.214816 submit/tizen/20200311.020132 submit/tizen/20200311.030158 submit/tizen/20200312.062225
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 9 Mar 2020 09:40:33 +0000 (18:40 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 10 Mar 2020 03:00:55 +0000 (12:00 +0900)
- Currently, we should describe full path of plugins in mused.conf file,
  but, this patch simplifies it like below.

  As-Is:
  gstparam3=--gst-plugin-load=/usr/lib/gstreamer-1.0/libgstcoreelements.so

  To-Be:
  gstpreload=coreelements

[Version] 0.3.103
[Profile] Common
[Issue Type] Update

Change-Id: I4eab3a3e7ce65c19387d66ad773633cc5fb82f8f
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/mused.spec
server/CMakeLists.txt
server/include/muse_server_config.h
server/include/muse_server_private.h
server/src/muse_server_config.c
server/src/muse_server_private.c

index a1d4a8f..f065290 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mused
 Summary:    A multimedia daemon
-Version:    0.3.102
+Version:    0.3.103
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
index 22d0608..bfb2bd8 100644 (file)
@@ -38,7 +38,7 @@ ENDIF("${ARCH}" STREQUAL "arm")
 
 ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
 ADD_DEFINITIONS("-DTIZEN_DEBUG")
-
+ADD_DEFINITIONS("-DLIBDIR=\"${LIBDIR}\"")
 
 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,relro,--as-needed -pie")
 
index fbe7a10..e315a55 100644 (file)
@@ -38,7 +38,8 @@ extern "C" {
 #define MUSE_ON_DEMAND_LAUNCH                                  "muse:on_demand"
 #define MUSE_ON_DEMAND_MAX_IDLE_TIME                   "muse:on_demand_max_idle_time"
 #define MUSE_ON_DEMAND_MAX_IDLE_MEMORY                 "muse:on_demand_max_idle_memory"
-#define MUSE_GST                                                       "muse:gstparam"
+#define MUSE_GST_PARAM                                                 "muse:gstparam"
+#define MUSE_GST_PRELOAD                                               "muse:gstpreload"
 #define INI_PARSER_COLON                                           ":"
 #define PATH                                                           "path"
 #define PRELOADED                                                      "preloaded"
@@ -83,6 +84,7 @@ typedef struct ms_config {
        gboolean is_on_demand;
        int max_idle_time;
        int max_idle_memory;
+       char *gst_preload_plugins;
 } ms_config_t;
 
 void ms_config_init(ms_config_t *conf);
@@ -91,6 +93,7 @@ char *ms_config_get_host_name(int idx);
 int ms_config_get_host_cnt(void);
 int ms_config_get_gst_param_cnt(void);
 char *ms_config_get_gst_param_str(int idx);
+char *ms_config_get_gst_preload_plugins(void);
 char *ms_config_get_path(int idx);
 char *ms_config_get_preloaded_value(int idx);
 char *ms_config_get_lockfile(void);
index 128d01c..4c588ca 100644 (file)
@@ -96,6 +96,7 @@ void ms_fork(int *notify_fd);
 pid_t ms_daemonize(int *notify_fd);
 void ms_daemonize_complete(int notify_fd);
 void ms_gst_init(char **cmd);
+void ms_gst_preload_plugin(void);
 int ms_pidfile_create(const char *path, pid_t pid);
 void ms_init(char **argv);
 muse_server_h ms_get_instance(void);
index 5c18a23..1b32b40 100644 (file)
@@ -105,8 +105,7 @@ static int _ms_config_parser(ms_config_t *conf)
                                                MUSE_ON_DEMAND_MAX_IDLE_MEMORY, DEFAULT_ON_DEMAND_MAX_IDLE_MEMORY);
 
        for (conf->gst_param_cnt = 0; conf->gst_param_cnt < MUSE_PARAM_MAX; conf->gst_param_cnt++) {
-               memset(gst_param_key, 0, MUSE_MSG_LEN_MAX);
-               snprintf(gst_param_key, MUSE_MSG_LEN_MAX, "%s%d", MUSE_GST, conf->gst_param_cnt + 1);
+               snprintf(gst_param_key, MUSE_MSG_LEN_MAX, "%s%d", MUSE_GST_PARAM, conf->gst_param_cnt + 1);
 
                conf->gst_param_str[conf->gst_param_cnt] = _ms_config_get_str(conf->muse_dict, gst_param_key, NULL);
 
@@ -117,6 +116,8 @@ static int _ms_config_parser(ms_config_t *conf)
                LOGD("gstparam%d: %s", conf->gst_param_cnt + 1, conf->gst_param_str[conf->gst_param_cnt]);
        }
 
+       conf->gst_preload_plugins = _ms_config_get_str(conf->muse_dict, MUSE_GST_PRELOAD, NULL);
+
        conf->host_cnt = 0;
        host = strtok_r(hosts, INI_PARSER_COMMA, &ptr);
 
@@ -226,6 +227,8 @@ void ms_config_deinit(ms_config_t *conf)
        for (idx = 0; idx <= conf->gst_param_cnt; idx++)
                MUSE_FREE(conf->gst_param_str[idx]);
 
+       MUSE_FREE(conf->gst_preload_plugins);
+
        free(conf);
 }
 
@@ -265,6 +268,15 @@ char *ms_config_get_gst_param_str(int idx)
        return conf->gst_param_str[idx];
 }
 
+char *ms_config_get_gst_preload_plugins(void)
+{
+       ms_config_t *conf = _ms_config_get_instance();
+
+       muse_return_val_if_fail(conf, NULL);
+
+       return conf->gst_preload_plugins;
+}
+
 char *ms_config_get_path(int idx)
 {
        char *path = NULL;
index 604a9a7..7c6c358 100644 (file)
@@ -768,6 +768,39 @@ void ms_gst_init(char **cmd)
 #endif
 }
 
+void ms_gst_preload_plugin(void)
+{
+       char *token = NULL;
+       char *saveptr = NULL;
+       char plugin_path[128];
+       const char *delimeters = " ,";
+       gchar *gst_preload_plugins = g_strdup(ms_config_get_gst_preload_plugins());
+       GstPlugin *plugin = NULL;
+
+       muse_return_if_fail(gst_preload_plugins);
+
+       LOGI("preload plugins [%s]", gst_preload_plugins);
+
+       token = strtok_r(gst_preload_plugins, delimeters, &saveptr);
+       while (token) {
+               snprintf(plugin_path, sizeof(plugin_path), "%s/gstreamer-1.0/libgst%s.so", LIBDIR, token);
+
+               LOGI("    plugin path : %s", plugin_path);
+
+               plugin = gst_plugin_load_file(plugin_path, NULL);
+               if (plugin)
+                       gst_object_unref(plugin);
+               else
+                       LOGW("failed to load plugin [%s]", plugin_path);
+
+               token = strtok_r(NULL, delimeters, &saveptr);
+       }
+
+       g_free(gst_preload_plugins);
+
+       LOGI("Leave");
+}
+
 int ms_pidfile_create(const char *path, pid_t pid)
 {
        int fd;
@@ -883,6 +916,14 @@ void ms_init(char **argv)
        trace_end();
 #endif
 
+#ifdef MUSE_TTRACE_LOG
+       trace_begin("MUSE:preloading GST module");
+#endif
+       ms_gst_preload_plugin();
+#ifdef MUSE_TTRACE_LOG
+       trace_end();
+#endif
+
        LOGD("Leave");
 }