Add platform check before resource manager initialization 58/107358/1
authorOleksandr Popov <ol.popov@samsung.com>
Tue, 27 Dec 2016 17:00:21 +0000 (19:00 +0200)
committereunhae choi <eunhae1.choi@samsung.com>
Tue, 27 Dec 2016 15:09:50 +0000 (07:09 -0800)
Change-Id: I001fbd14fe4589db030a69e6fd985a32460ac6da
Signed-off-by: Oleksandr Popov <ol.popov@samsung.com>
include/media_streamer_resource.h
src/media_streamer_node_resources.c

index 27da5ca..2cefdc8 100644 (file)
@@ -52,7 +52,7 @@ typedef enum {
 } media_streamer_resource_state_e;
 
 typedef struct _media_streamer_resource_manager_s media_streamer_resource_manager_s;
-typedef gboolean (*resource_relese_cb) (media_streamer_resource_manager_s *resource_manager, void *user_data);
+typedef gboolean (*resource_relese_cb)(media_streamer_resource_manager_s *resource_manager, void *user_data);
 
 struct _media_streamer_resource_manager_s {
        mrp_mainloop_t *mloop;
index 3c1545a..5e96813 100644 (file)
@@ -16,6 +16,8 @@
 
 #include <gst/gst.h>
 
+#include <system_info.h>
+
 #include <media_streamer_node_resources.h>
 #include <media_streamer.h>
 #include <media_streamer_priv.h>
@@ -61,6 +63,41 @@ static gboolean __ms_resource_relese_cb(
        return TRUE;
 }
 
+static gboolean __ms_node_resources_is_needed_by_platform(media_streamer_node_s *node)
+{
+       media_streamer_node_type_e type = node->type;
+       int subtype = node->subtype;
+       char *model_name, *platform_processor;
+       gboolean ret = FALSE;
+
+       /* Checking for model_name and processor because some resources
+          are platform dependent */
+       system_info_get_platform_string("http://tizen.org/system/model_name", &model_name);
+       system_info_get_platform_string("http://tizen.org/system/platform.processor", &platform_processor);
+       ms_info("Check for resources for model_name %s, platform.processor %s", model_name, platform_processor);
+
+       switch (type) {
+       case MEDIA_STREAMER_NODE_TYPE_VIDEO_ENCODER:
+       case MEDIA_STREAMER_NODE_TYPE_VIDEO_DECODER:
+               if (!g_strcmp0(model_name, "Emulator") ||
+                       !g_strcmp0(platform_processor, "Emulator"))
+                       ret = FALSE;
+               break;
+       case MEDIA_STREAMER_NODE_TYPE_SRC:
+               if (MEDIA_STREAMER_NODE_SRC_TYPE_CAMERA == subtype)
+                       ret = TRUE;
+               break;
+       case MEDIA_STREAMER_NODE_TYPE_SINK:
+               if (MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY == subtype)
+                       ret = TRUE;
+               break;
+       default:
+               break;
+       }
+
+       return ret;
+}
+
 static void __ms_node_get_resources_needed(media_streamer_node_s *node,
        media_streamer_resource_type_e *resource) {
        media_streamer_node_type_e type = node->type;
@@ -101,6 +138,13 @@ int __ms_node_resouces_init(media_streamer_node_s *node)
                return MEDIA_STREAMER_ERROR_NONE;
        }
 
+       /* Check if platform requires resource (e.g. Emulator) */
+       if (!__ms_node_resources_is_needed_by_platform(node)) {
+               ms_info("Platform doesn't require resource for %p node type [%d] subtype [%d]",
+                       node, node->type, node->subtype);
+               return MEDIA_STREAMER_ERROR_NONE;
+       }
+
        /* Initialize resource manager */
        ret = _ms_resource_manager_init(&node->resource_manager,
                __ms_resource_relese_cb, node);
@@ -125,6 +169,13 @@ int __ms_node_resouces_deinit(media_streamer_node_s *node)
                return MEDIA_STREAMER_ERROR_NONE;
        }
 
+       /* Check if platform requires resource (e.g. Emulator) */
+       if (!__ms_node_resources_is_needed_by_platform(node)) {
+               ms_info("Platform doesn't require resource for %p node type [%d] subtype [%d]",
+                       node, node->type, node->subtype);
+               return MEDIA_STREAMER_ERROR_NONE;
+       }
+
        /* Deinitialize resource manager */
        ret = _ms_resource_manager_deinit(&node->resource_manager);
        if (ret != MEDIA_STREAMER_ERROR_NONE) {
@@ -196,6 +247,13 @@ int _ms_node_resource_aquire(media_streamer_node_s *node)
                return MEDIA_STREAMER_ERROR_NONE;
        }
 
+       /* Check if platform requires resource (e.g. Emulator) */
+       if (!__ms_node_resources_is_needed_by_platform(node)) {
+               ms_info("Platform doesn't require resource for %p node type [%d] subtype [%d]",
+                       node, node->type, node->subtype);
+               return MEDIA_STREAMER_ERROR_NONE;
+       }
+
        if (MEDIA_STREAMER_ERROR_NONE != __ms_node_resouces_prepare(node, resource)) {
                ms_error("Failed to prepare resources for Node [%p]", node);
                return MEDIA_STREAMER_ERROR_INVALID_OPERATION;