This patch supports the VD product build system.
`enable_tizen_privilege_check` and `enable_tizen_feature_check` are
newly added and below features are disabled.
* Privacy / Privilege Manager
* Resource Manager
* ProtoBuffer / FlatBuffer
* Test since python-numpy is not supported
Signed-off-by: Sangjung Woo <sangjung.woo@samsung.com>
#if defined (__TIZEN__)
#include "nnstreamer-tizen-internal.h"
+#if defined (__FEATURE_CHECK_SUPPORT__)
#define check_feature_state() \
do { \
int feature_ret = ml_tizen_get_feature_enabled (); \
} while (0);
#define set_feature_state(...) ml_tizen_set_feature_state(__VA_ARGS__)
+#else
+#define check_feature_state()
+#define set_feature_state(...)
+#endif /* __FEATURE_CHECK_SUPPORT__ */
+
+#if defined (__PRIVILEGE_CHECK_SUPPORT__)
+
#define convert_tizen_element(...) ml_tizen_convert_element(__VA_ARGS__)
#if (TIZENVERSION >= 5) && (TIZENVERSION < 9999)
#endif
#else
+
+#define convert_tizen_element(...) ML_ERROR_NONE
+#define get_tizen_resource(...) ML_ERROR_NONE
+#define release_tizen_resource(...)
+#define TIZEN5PLUS 0
+
+#endif /* __PRIVILEGE_CHECK_SUPPORT__ */
+
+#else
#define check_feature_state()
#define set_feature_state(...)
#define convert_tizen_element(...) ML_ERROR_NONE
#define get_tizen_resource(...) ML_ERROR_NONE
#define release_tizen_resource(...)
#define TIZEN5PLUS 0
-#endif
+#endif /* __TIZEN__ */
#ifdef __cplusplus
extern "C" {
capi_main += join_paths(meson.current_source_dir(), 'src', 'nnstreamer-capi-single.c')
capi_main += join_paths(meson.current_source_dir(), 'src', 'tensor_filter_single.c')
-if get_option('enable-tizen')
- capi_main += join_paths('src', 'nnstreamer-capi-tizen.c')
+if get_option('enable-tizen') and get_option('enable-tizen-feature-check')
+ capi_main += join_paths(meson.current_source_dir(), 'src', 'nnstreamer-capi-tizen-feature-check.c')
+endif
+
+if get_option('enable-tizen') and get_option('enable-tizen-privilege-check')
+ capi_main += join_paths(meson.current_source_dir(), 'src', 'nnstreamer-capi-tizen-privilege-check.c')
endif
capi_devel_main = []
tizen_deps = [
dependency('dpm'),
dependency('mm-camcorder'),
- dependency('capi-privacy-privilege-manager'),
dependency('capi-base-common'),
dependency('capi-system-info'),
dependency('dlog')
]
+
+ if get_option('enable-tizen-privilege-check')
+ tizen_deps += dependency('capi-privacy-privilege-manager')
+ endif
else
tizen_deps = [
dependency('dpm'),
- dependency('mm-resource-manager'),
dependency('mm-camcorder'),
- dependency('capi-privacy-privilege-manager'),
dependency('capi-base-common'),
dependency('capi-system-info'),
dependency('dlog')
]
+
+ if get_option('enable-tizen-privilege-check')
+ tizen_deps += dependency('mm-resource-manager')
+ tizen_deps += dependency('capi-privacy-privilege-manager')
+ endif
endif
capi_deps += tizen_deps
--- /dev/null
+/**
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ */
+
+/**
+ * @file nnstreamer-capi-tizen-feature-check.c
+ * @date 21 July 2020
+ * @brief NNStreamer/C-API Tizen dependent functions.
+ * @see https://github.com/nnstreamer/nnstreamer
+ * @author MyungJoo Ham <myungjoo.ham@samsung.com>
+ * @bug No known bugs except for NYI items
+ */
+
+#if !defined (__TIZEN__) || !defined (__FEATURE_CHECK_SUPPORT__)
+#error "This file can be included only in Tizen."
+#endif
+
+#include <glib.h>
+#include <system_info.h>
+
+#include "nnstreamer-capi-private.h"
+
+/**
+ * @brief Tizen ML feature.
+ */
+#define ML_INF_FEATURE_PATH "tizen.org/feature/machine_learning.inference"
+
+/**
+ * @brief Internal struct to control tizen feature support (machine_learning.inference).
+ * -1: Not checked yet, 0: Not supported, 1: Supported
+ */
+typedef struct
+{
+ GMutex mutex;
+ int feature_state;
+} feature_info_s;
+
+static feature_info_s *feature_info = NULL;
+
+/**
+ * @brief Internal function to initialize feature state.
+ */
+static void
+ml_tizen_initialize_feature_state (void)
+{
+ if (feature_info == NULL) {
+ feature_info = g_new0 (feature_info_s, 1);
+ g_assert (feature_info);
+
+ g_mutex_init (&feature_info->mutex);
+ feature_info->feature_state = -1;
+ }
+}
+
+/**
+ * @brief Set the feature status of machine_learning.inference.
+ */
+int
+ml_tizen_set_feature_state (int state)
+{
+ ml_tizen_initialize_feature_state ();
+ g_mutex_lock (&feature_info->mutex);
+
+ /**
+ * Update feature status
+ * -1: Not checked yet, 0: Not supported, 1: Supported
+ */
+ feature_info->feature_state = state;
+
+ g_mutex_unlock (&feature_info->mutex);
+ return ML_ERROR_NONE;
+}
+
+/**
+ * @brief Checks whether machine_learning.inference feature is enabled or not.
+ */
+int
+ml_tizen_get_feature_enabled (void)
+{
+ int ret;
+ int feature_enabled;
+
+ ml_tizen_initialize_feature_state ();
+
+ g_mutex_lock (&feature_info->mutex);
+ feature_enabled = feature_info->feature_state;
+ g_mutex_unlock (&feature_info->mutex);
+
+ if (0 == feature_enabled) {
+ ml_loge ("machine_learning.inference NOT supported");
+ return ML_ERROR_NOT_SUPPORTED;
+ } else if (-1 == feature_enabled) {
+ bool ml_inf_supported = false;
+ ret =
+ system_info_get_platform_bool (ML_INF_FEATURE_PATH, &ml_inf_supported);
+ if (0 == ret) {
+ if (false == ml_inf_supported) {
+ ml_loge ("machine_learning.inference NOT supported");
+ ml_tizen_set_feature_state (0);
+ return ML_ERROR_NOT_SUPPORTED;
+ }
+
+ ml_tizen_set_feature_state (1);
+ } else {
+ switch (ret) {
+ case SYSTEM_INFO_ERROR_INVALID_PARAMETER:
+ ml_loge
+ ("failed to get feature value because feature key is not vaild");
+ ret = ML_ERROR_NOT_SUPPORTED;
+ break;
+
+ case SYSTEM_INFO_ERROR_IO_ERROR:
+ ml_loge ("failed to get feature value because of input/output error");
+ ret = ML_ERROR_NOT_SUPPORTED;
+ break;
+
+ case SYSTEM_INFO_ERROR_PERMISSION_DENIED:
+ ml_loge ("failed to get feature value because of permission denied");
+ ret = ML_ERROR_PERMISSION_DENIED;
+ break;
+
+ default:
+ ml_loge ("failed to get feature value because of unknown error");
+ ret = ML_ERROR_NOT_SUPPORTED;
+ break;
+ }
+ return ret;
+ }
+ }
+
+ return ML_ERROR_NONE;
+}
/**
- * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
*/
/**
- * @file nnstreamer-capi-tizen.c
- * @date 26 August 2019
+ * @file nnstreamer-capi-tizen-privilege-check.c
+ * @date 22 July 2020
* @brief NNStreamer/C-API Tizen dependent functions.
* @see https://github.com/nnstreamer/nnstreamer
* @author MyungJoo Ham <myungjoo.ham@samsung.com>
* @bug No known bugs except for NYI items
*/
-#if !defined (__TIZEN__)
+#if !defined (__TIZEN__) || !defined (__PRIVILEGE_CHECK_SUPPORT__)
#error "This file can be included only in Tizen."
#endif
#define TIZEN_RES_MM "tizen_res_mm"
/**
- * @brief Tizen ML feature.
- */
-#define ML_INF_FEATURE_PATH "tizen.org/feature/machine_learning.inference"
-
-/**
* @brief Tizen Privilege Camera (See https://www.tizen.org/privilege)
*/
#define TIZEN_PRIVILEGE_CAMERA "http://tizen.org/privilege/camera"
*/
#define TIZEN_PRIVILEGE_RECODER "http://tizen.org/privilege/recorder"
-/**
- * @brief Internal struct to control tizen feature support (machine_learning.inference).
- * -1: Not checked yet, 0: Not supported, 1: Supported
- */
-typedef struct
-{
- GMutex mutex;
- int feature_state;
-} feature_info_s;
-
-static feature_info_s *feature_info = NULL;
-
-/**
- * @brief Internal function to initialize feature state.
- */
-static void
-ml_tizen_initialize_feature_state (void)
-{
- if (feature_info == NULL) {
- feature_info = g_new0 (feature_info_s, 1);
- g_assert (feature_info);
-
- g_mutex_init (&feature_info->mutex);
- feature_info->feature_state = -1;
- }
-}
-
-/**
- * @brief Set the feature status of machine_learning.inference.
- */
-int
-ml_tizen_set_feature_state (int state)
-{
- ml_tizen_initialize_feature_state ();
- g_mutex_lock (&feature_info->mutex);
-
- /**
- * Update feature status
- * -1: Not checked yet, 0: Not supported, 1: Supported
- */
- feature_info->feature_state = state;
-
- g_mutex_unlock (&feature_info->mutex);
- return ML_ERROR_NONE;
-}
-
-/**
- * @brief Checks whether machine_learning.inference feature is enabled or not.
- */
-int
-ml_tizen_get_feature_enabled (void)
-{
- int ret;
- int feature_enabled;
-
- ml_tizen_initialize_feature_state ();
-
- g_mutex_lock (&feature_info->mutex);
- feature_enabled = feature_info->feature_state;
- g_mutex_unlock (&feature_info->mutex);
-
- if (0 == feature_enabled) {
- ml_loge ("machine_learning.inference NOT supported");
- return ML_ERROR_NOT_SUPPORTED;
- } else if (-1 == feature_enabled) {
- bool ml_inf_supported = false;
- ret =
- system_info_get_platform_bool (ML_INF_FEATURE_PATH, &ml_inf_supported);
- if (0 == ret) {
- if (false == ml_inf_supported) {
- ml_loge ("machine_learning.inference NOT supported");
- ml_tizen_set_feature_state (0);
- return ML_ERROR_NOT_SUPPORTED;
- }
-
- ml_tizen_set_feature_state (1);
- } else {
- switch (ret) {
- case SYSTEM_INFO_ERROR_INVALID_PARAMETER:
- ml_loge
- ("failed to get feature value because feature key is not vaild");
- ret = ML_ERROR_NOT_SUPPORTED;
- break;
-
- case SYSTEM_INFO_ERROR_IO_ERROR:
- ml_loge ("failed to get feature value because of input/output error");
- ret = ML_ERROR_NOT_SUPPORTED;
- break;
-
- case SYSTEM_INFO_ERROR_PERMISSION_DENIED:
- ml_loge ("failed to get feature value because of permission denied");
- ret = ML_ERROR_PERMISSION_DENIED;
- break;
-
- default:
- ml_loge ("failed to get feature value because of unknown error");
- ret = ML_ERROR_NOT_SUPPORTED;
- break;
- }
- return ret;
- }
- }
-
- return ML_ERROR_NONE;
-}
-
/** The following functions are either not used or supported in Tizen 4 */
#if TIZEN5PLUS
/**
tizenVmajor = get_option('tizen-version-major')
add_project_arguments('-DTIZENVERSION='+tizenVmajor.to_string(), language: ['c', 'cpp'])
+ if get_option('enable-tizen-feature-check')
+ add_project_arguments('-D__FEATURE_CHECK_SUPPORT__', language: ['c', 'cpp'])
+ endif
+
+ if get_option('enable-tizen-privilege-check')
+ add_project_arguments('-D__PRIVILEGE_CHECK_SUPPORT__', language: ['c', 'cpp'])
+ endif
+
elif not meson.is_cross_build()
if cc.get_id() == 'clang' and cxx.get_id() == 'clang'
if build_machine.system() == 'darwin'
option('enable-edgetpu', type: 'boolean', value: false)
option('enable-openvino', type: 'boolean', value: false)
option('enable-vivante', type: 'boolean', value: false)
+option('enable-tizen-feature-check', type: 'boolean', value: true)
+option('enable-tizen-privilege-check', type: 'boolean', value: true)
option('framework-priority-tflite', type: 'string', value: 'tensorflow-lite,nnfw,armnn,edgetpu', description: 'A comma separated prioritized list of neural network frameworks to open a .tflite file')
%define flatbuf_support 1
%define protobuf_support 1
%define nnfw_support 1
+%define check_test 1
+%define enable_tizen_privilege 1
+%define enable_tizen_feature 1
+%define enable_extra_subplugins 1
+
+%if "%{?profile}" == "tv"
+%define enable_extra_subplugins 0
+%define enable_tizen_privilege 0
+%define check_test 0
+%endif
%if 0%{tizen_version_major} >= 5
%define python_support 1
%define edgetpu_support 0
%endif
+%if !0%{?enable_extra_subplugins}
+%define flatbuf_support 0
+%define protobuf_support 0
+%define python_support 0
+%define mvncsdk2_support 0
+%define edgetpu_support 0
+%endif
+
# If it is tizen, we can export Tizen API packages.
%bcond_with tizen
# and gtest
BuildRequires: gtest-devel
# a few test cases uses python
+%if 0%{?check_test}
BuildRequires: python
BuildRequires: python-numpy
+%endif
%if 0%{?python_support}
# for python custom filters
BuildRequires: pkgconfig(python2)
%if %{with tizen}
BuildRequires: pkgconfig(dpm)
%if 0%{tizen_version_major} >= 5
+%if 0%{?enable_tizen_privilege}
BuildRequires: pkgconfig(mm-resource-manager)
%endif
+%endif
BuildRequires: pkgconfig(mm-camcorder)
+%if 0%{?enable_tizen_privilege}
BuildRequires: pkgconfig(capi-privacy-privilege-manager)
+%endif
BuildRequires: pkgconfig(capi-system-info)
BuildRequires: pkgconfig(capi-base-common)
BuildRequires: pkgconfig(dlog)
%define enable_mvncsdk2 -Dmvncsdk2-support=disabled
%define enable_nnfw_runtime -Dnnfw-runtime-support=disabled
%define element_restriction -Denable-element-restriction=false
+%define enable_tizen_privilege_check -Denable-tizen-privilege-check=true
+%define enable_tizen_feature_check -Denable-tizen-feature-check=true
+%define enable_test -Denable-test=true
%if 0%{mvncsdk2_support}
%define enable_mvncsdk2 -Dmvncsdk2-support=enabled
%define enable_tizen_sensor -Denable-tizen-sensor=true
%endif
+%if !0%{?check_test}
+%define enable_test -Denable-test=false
+%endif
+
+%if !0%{?enable_tizen_privilege}
+%define enable_tizen_privilege_check -Denable-tizen-privilege-check=false
+%endif
+
+%if !0%{?enable_tizen_feature}
+%define enable_tizen_feature_check -Denable-tizen-feature-check=false
+%endif
+
%if %{with tizen}
%define enable_tizen -Denable-tizen=true -Dtizen-version-major=0%{tizen_version_major}
%define enable_api -Denable-capi=true
%ifarch %arm aarch64
%if 0%{?nnfw_support}
%define enable_nnfw_runtime -Dnnfw-runtime-support=enabled
-%endif
+%endif # nnfw_support
+
%endif
# Element restriction in Tizen
%define restricted_element 'capsfilter input-selector output-selector queue tee valve appsink appsrc audioconvert audiorate audioresample audiomixer videoconvert videocrop videorate videoscale videoflip videomixer compositor fakesrc fakesink filesrc filesink audiotestsrc videotestsrc jpegparse jpegenc jpegdec pngenc pngdec tcpclientsink tcpclientsrc tcpserversink tcpserversrc udpsink udpsrc xvimagesink ximagesink evasimagesink evaspixmapsink glimagesink theoraenc lame vorbisenc wavenc volume oggmux avimux matroskamux v4l2src avsysvideosrc camerasrc tvcamerasrc pulsesrc fimcconvert tizenwlsink gdppay gdpdepay'
%{enable_api} %{enable_tizen} %{element_restriction} -Denable-env-var=false -Denable-symbolic-link=false \
%{enable_tf_lite} %{enable_tf} %{enable_pytorch} %{enable_caffe2} %{enable_python} \
%{enable_nnfw_runtime} %{enable_mvncsdk2} %{enable_armnn} %{enable_edgetpu} %{enable_vivante} %{enable_flatbuf} \
- %{enable_tizen_sensor} %{enable_test_coverage} \
+ %{enable_tizen_privilege_check} %{enable_tizen_feature_check} %{enable_tizen_sensor} %{enable_test} %{enable_test_coverage} \
build
ninja -C build %{?_smp_mflags}