From 930e857968a9bb022d04c263ee04cc1d6dc328e4 Mon Sep 17 00:00:00 2001 From: Bumsik Kim Date: Mon, 21 Sep 2020 06:12:59 -0700 Subject: [PATCH] [ext/tensor_filter] [patch 1/4] Initialize driver struct at compile-time Initialize driver structs at compile-time by using designated initializer. This approach also improves readability and makes it easier to kepp track of unimplemented APIs by partially forced to set fields manually since g++ does not implement out-of-order (including skipped) designator. Note that this commit fails to build, which shows the later point mentioned. This is fixed in the later commit in this patch. Signed-off-by: Bumsik Kim --- .../tensor_filter/tensor_filter_armnn.cc | 27 ++++++++++-------- .../tensor_filter/tensor_filter_caffe2.cc | 29 +++++++++++-------- ext/nnstreamer/tensor_filter/tensor_filter_cpp.cc | 28 ++++++++++-------- .../tensor_filter/tensor_filter_movidius_ncsdk2.c | 25 +++++++++------- ext/nnstreamer/tensor_filter/tensor_filter_nnfw.c | 31 +++++++++++--------- .../tensor_filter/tensor_filter_openvino.cc | 27 ++++++++++-------- .../tensor_filter/tensor_filter_python.cc | 33 +++++++++++++--------- .../tensor_filter/tensor_filter_pytorch.cc | 27 ++++++++++-------- .../tensor_filter/tensor_filter_tensorflow.cc | 29 +++++++++++-------- .../tensor_filter/tensor_filter_tensorflow_lite.cc | 32 ++++++++++++--------- .../vivante/tensor_filter_subplugin.c | 22 +++++++++------ 11 files changed, 184 insertions(+), 126 deletions(-) diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_armnn.cc b/ext/nnstreamer/tensor_filter/tensor_filter_armnn.cc index 55e53a8..69bd4e3 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_armnn.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_armnn.cc @@ -35,7 +35,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include #include @@ -741,22 +743,25 @@ static GstTensorFilterFramework NNS_support_armnn = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = armnn_open, .close = armnn_close, - .checkAvailability = armnn_checkAvailability, + { + .v0 = { + .name = filter_subplugin_armnn, + .allow_in_place = FALSE, /** @todo: support this to optimize performance later. */ + .allocate_in_invoke = FALSE, + .run_without_model = FALSE, + .verify_model_path = FALSE, + .invoke_NN = armnn_invoke, + .getInputDimension = armnn_getInputDim, + .getOutputDimension = armnn_getOutputDim, + .checkAvailability = armnn_checkAvailability, + } + } }; /** @brief Initialize this object for tensor_filter subplugin runtime register */ void init_filter_armnn (void) { - NNS_support_armnn.name = filter_subplugin_armnn; - NNS_support_armnn.allow_in_place = FALSE; /** @todo: support this to optimize performance later. */ - NNS_support_armnn.allocate_in_invoke = FALSE; - NNS_support_armnn.run_without_model = FALSE; - NNS_support_armnn.verify_model_path = FALSE; - NNS_support_armnn.invoke_NN = armnn_invoke; - NNS_support_armnn.getInputDimension = armnn_getInputDim; - NNS_support_armnn.getOutputDimension = armnn_getOutputDim; - nnstreamer_filter_probe (&NNS_support_armnn); } @@ -764,5 +769,5 @@ init_filter_armnn (void) void fini_filter_armnn (void) { - nnstreamer_filter_exit (NNS_support_armnn.name); + nnstreamer_filter_exit (NNS_support_armnn.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_caffe2.cc b/ext/nnstreamer/tensor_filter/tensor_filter_caffe2.cc index a55490c..99b907f 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_caffe2.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_caffe2.cc @@ -31,7 +31,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include #include @@ -597,23 +599,26 @@ static GstTensorFilterFramework NNS_support_caffe2 = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = caffe2_open, .close = caffe2_close, + { + .v0 = { + .name = filter_subplugin_caffe2, + .allow_in_place = FALSE, /** @todo: support this to optimize performance later. */ + .allocate_in_invoke = TRUE, + .run_without_model = FALSE, + .verify_model_path = FALSE, + .invoke_NN = caffe2_run, + .getInputDimension = caffe2_getInputDim, + .getOutputDimension = caffe2_getOutputDim, + .destroyNotify = caffe2_destroyNotify, + .checkAvailability = caffe2_checkAvailability, + } + } }; /** @brief Initialize this object for tensor_filter subplugin runtime register */ void init_filter_caffe2 (void) { - NNS_support_caffe2.name = filter_subplugin_caffe2; - NNS_support_caffe2.allow_in_place = FALSE; /** @todo: support this to optimize performance later. */ - NNS_support_caffe2.allocate_in_invoke = TRUE; - NNS_support_caffe2.run_without_model = FALSE; - NNS_support_caffe2.verify_model_path = FALSE; - NNS_support_caffe2.invoke_NN = caffe2_run; - NNS_support_caffe2.getInputDimension = caffe2_getInputDim; - NNS_support_caffe2.getOutputDimension = caffe2_getOutputDim; - NNS_support_caffe2.destroyNotify = caffe2_destroyNotify; - NNS_support_caffe2.checkAvailability = caffe2_checkAvailability; - nnstreamer_filter_probe (&NNS_support_caffe2); } @@ -621,5 +626,5 @@ init_filter_caffe2 (void) void fini_filter_caffe2 (void) { - nnstreamer_filter_exit (NNS_support_caffe2.name); + nnstreamer_filter_exit (NNS_support_caffe2.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_cpp.cc b/ext/nnstreamer/tensor_filter/tensor_filter_cpp.cc index ff1fb6c..ee7112d 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_cpp.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_cpp.cc @@ -35,7 +35,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include "tensor_filter_cpp.hh" @@ -50,6 +52,19 @@ static GstTensorFilterFramework NNS_support_cpp = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = tensor_filter_cpp::open, .close = tensor_filter_cpp::close, + { + .v0 = { + .name = filter_subplugin_cpp, + .allow_in_place = FALSE, /** @todo: support this to optimize performance later. */ + .allocate_in_invoke = FALSE, + .run_without_model = FALSE, + .verify_model_path = FALSE, + .invoke_NN = tensor_filter_cpp::invoke, + .getInputDimension = tensor_filter_cpp::getInputDim, + .getOutputDimension = tensor_filter_cpp::getOutputDim, + .setInputDimension = tensor_filter_cpp::setInputDim, + } + } }; G_BEGIN_DECLS @@ -60,15 +75,6 @@ void fini_filter_cpp (void) __attribute__ ((destructor)); void init_filter_cpp (void) { - NNS_support_cpp.name = filter_subplugin_cpp; - NNS_support_cpp.allow_in_place = FALSE; /** @todo: support this to optimize performance later. */ - NNS_support_cpp.allocate_in_invoke = FALSE; - NNS_support_cpp.run_without_model = FALSE; - NNS_support_cpp.verify_model_path = FALSE; - NNS_support_cpp.invoke_NN = tensor_filter_cpp::invoke; - NNS_support_cpp.getInputDimension = tensor_filter_cpp::getInputDim; - NNS_support_cpp.getOutputDimension = tensor_filter_cpp::getOutputDim; - NNS_support_cpp.setInputDimension = tensor_filter_cpp::setInputDim; nnstreamer_filter_probe (&NNS_support_cpp); } @@ -76,7 +82,7 @@ init_filter_cpp (void) void fini_filter_cpp (void) { - nnstreamer_filter_exit (NNS_support_cpp.name); + nnstreamer_filter_exit (NNS_support_cpp.v0.name); tensor_filter_cpp::close_all_handles (); } G_END_DECLS @@ -247,7 +253,7 @@ int tensor_filter_cpp::open (const GstTensorFilterProperties *prop, void **priva cpp->ref_count++; cpp->prop = prop; - NNS_support_cpp.allocate_in_invoke = ! cpp->isAllocatedBeforeInvoke(); + NNS_support_cpp.v0.allocate_in_invoke = ! cpp->isAllocatedBeforeInvoke(); return 0; } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_movidius_ncsdk2.c b/ext/nnstreamer/tensor_filter/tensor_filter_movidius_ncsdk2.c index 36051c9..97ae1e7 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_movidius_ncsdk2.c +++ b/ext/nnstreamer/tensor_filter/tensor_filter_movidius_ncsdk2.c @@ -32,7 +32,9 @@ #include #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include #include @@ -437,21 +439,24 @@ static GstTensorFilterFramework NNS_support_movidius_ncsdk2 = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = _mvncsdk2_open, .close = _mvncsdk2_close, - .checkAvailability = _mvncsdk2_checkAvailability, + { + .v0 = { + .name = filter_subplugin_movidius_ncsdk2, + .allow_in_place = FALSE, + .allocate_in_invoke = FALSE, + .verify_model_path = FALSE, + .invoke_NN = _mvncsdk2_invoke, + .getInputDimension = _mvncsdk2_getInputDim, + .getOutputDimension = _mvncsdk2_getOutputDim, + .checkAvailability = _mvncsdk2_checkAvailability, + } + } }; /** @brief Initialize this object for tensor_filter subplugin runtime register */ void init_filter_mvncsdk2 (void) { - NNS_support_movidius_ncsdk2.name = filter_subplugin_movidius_ncsdk2; - NNS_support_movidius_ncsdk2.allow_in_place = FALSE; - NNS_support_movidius_ncsdk2.allocate_in_invoke = FALSE; - NNS_support_movidius_ncsdk2.verify_model_path = FALSE; - NNS_support_movidius_ncsdk2.invoke_NN = _mvncsdk2_invoke; - NNS_support_movidius_ncsdk2.getInputDimension = _mvncsdk2_getInputDim; - NNS_support_movidius_ncsdk2.getOutputDimension = _mvncsdk2_getOutputDim; - nnstreamer_filter_probe (&NNS_support_movidius_ncsdk2); } @@ -459,5 +464,5 @@ init_filter_mvncsdk2 (void) void fini_filter_mvncsdk2 (void) { - nnstreamer_filter_exit (NNS_support_movidius_ncsdk2.name); + nnstreamer_filter_exit (NNS_support_movidius_ncsdk2.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_nnfw.c b/ext/nnstreamer/tensor_filter/tensor_filter_nnfw.c index 1ec7518..64925a1 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_nnfw.c +++ b/ext/nnstreamer/tensor_filter/tensor_filter_nnfw.c @@ -32,7 +32,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include /** backends supported by nnfw */ @@ -664,6 +666,21 @@ static GstTensorFilterFramework NNS_support_nnfw = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = nnfw_open, .close = nnfw_close, + { + .v0 = { + .name = filter_subplugin_nnfw, + .allow_in_place = FALSE, + .allocate_in_invoke = FALSE, + .run_without_model = FALSE, + .verify_model_path = FALSE, + .statistics = &nnfw_internal_stats, + .invoke_NN = nnfw_invoke, + .getInputDimension = nnfw_getInputDim, + .getOutputDimension = nnfw_getOutputDim, + .setInputDimension = nnfw_setInputDim, + .checkAvailability = nnfw_checkAvailability, + } + } }; /**@brief Initialize this object for tensor_filter subplugin runtime register */ @@ -674,18 +691,6 @@ init_filter_nnfw (void) nnfw_internal_stats.total_invoke_latency = 0; nnfw_internal_stats.total_overhead_latency = 0; - NNS_support_nnfw.name = filter_subplugin_nnfw; - NNS_support_nnfw.allow_in_place = FALSE; - NNS_support_nnfw.allocate_in_invoke = FALSE; - NNS_support_nnfw.run_without_model = FALSE; - NNS_support_nnfw.verify_model_path = FALSE; - NNS_support_nnfw.invoke_NN = nnfw_invoke; - NNS_support_nnfw.getInputDimension = nnfw_getInputDim; - NNS_support_nnfw.getOutputDimension = nnfw_getOutputDim; - NNS_support_nnfw.setInputDimension = nnfw_setInputDim; - NNS_support_nnfw.checkAvailability = nnfw_checkAvailability; - NNS_support_nnfw.statistics = &nnfw_internal_stats; - nnstreamer_filter_probe (&NNS_support_nnfw); } @@ -693,5 +698,5 @@ init_filter_nnfw (void) void fini_filter_nnfw (void) { - nnstreamer_filter_exit (NNS_support_nnfw.name); + nnstreamer_filter_exit (NNS_support_nnfw.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_openvino.cc b/ext/nnstreamer/tensor_filter/tensor_filter_openvino.cc index 946b6db..e7c4bba 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_openvino.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_openvino.cc @@ -26,7 +26,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include #ifdef __OPENVINO_CPU_EXT__ #include @@ -646,6 +648,19 @@ static GstTensorFilterFramework NNS_support_openvino = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = ov_open, .close = ov_close, + { + .v0 = { + .name = filter_subplugin_openvino, + .allow_in_place = FALSE, + .allocate_in_invoke = FALSE, + .run_without_model = FALSE, + .verify_model_path = FALSE, + .invoke_NN = ov_invoke, + .getInputDimension = ov_getInputDim, + .getOutputDimension = ov_getOutputDim, + .checkAvailability = ov_checkAvailability, + } + } }; /** @@ -654,16 +669,6 @@ static GstTensorFilterFramework NNS_support_openvino = { void init_filter_openvino (void) { - NNS_support_openvino.name = filter_subplugin_openvino; - NNS_support_openvino.allow_in_place = FALSE; - NNS_support_openvino.allocate_in_invoke = FALSE; - NNS_support_openvino.run_without_model = FALSE; - NNS_support_openvino.verify_model_path = FALSE; - NNS_support_openvino.invoke_NN = ov_invoke; - NNS_support_openvino.getInputDimension = ov_getInputDim; - NNS_support_openvino.getOutputDimension = ov_getOutputDim; - NNS_support_openvino.checkAvailability = ov_checkAvailability; - nnstreamer_filter_probe (&NNS_support_openvino); } @@ -673,5 +678,5 @@ init_filter_openvino (void) void fini_filter_openvino (void) { - nnstreamer_filter_exit (NNS_support_openvino.name); + nnstreamer_filter_exit (NNS_support_openvino.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_python.cc b/ext/nnstreamer/tensor_filter/tensor_filter_python.cc index 419c9ca..3edd5f6 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_python.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_python.cc @@ -60,7 +60,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include #include @@ -966,25 +968,28 @@ static GstTensorFilterFramework NNS_support_python = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = py_open, .close = py_close, + { + .v0 = { + .name = filter_subplugin_python, + .allow_in_place = FALSE, /** @todo: support this to optimize performance later. */ + .allocate_in_invoke = TRUE, + .run_without_model = FALSE, + .verify_model_path = FALSE, + .invoke_NN = py_run, + /** dimension-related callbacks are dynamically updated */ + .getInputDimension = py_getInputDim, + .getOutputDimension = py_getOutputDim, + .setInputDimension = py_setInputDim, + .destroyNotify = py_destroyNotify, + .checkAvailability = py_checkAvailability, + } + } }; /** @brief Initialize this object for tensor_filter subplugin runtime register */ void init_filter_py (void) { - NNS_support_python.name = filter_subplugin_python; - NNS_support_python.allow_in_place = FALSE; /** @todo: support this to optimize performance later. */ - NNS_support_python.allocate_in_invoke = TRUE; - NNS_support_python.run_without_model = FALSE; - NNS_support_python.verify_model_path = FALSE; - NNS_support_python.invoke_NN = py_run; - /** dimension-related callbacks are dynamically updated */ - NNS_support_python.getInputDimension = py_getInputDim; - NNS_support_python.getOutputDimension = py_getOutputDim; - NNS_support_python.setInputDimension = py_setInputDim; - NNS_support_python.destroyNotify = py_destroyNotify; - NNS_support_python.checkAvailability = py_checkAvailability; - nnstreamer_filter_probe (&NNS_support_python); /** Python should be initialized and finalized only once */ Py_Initialize(); @@ -996,5 +1001,5 @@ fini_filter_py (void) { /** Python should be initialized and finalized only once */ Py_Finalize(); - nnstreamer_filter_exit (NNS_support_python.name); + nnstreamer_filter_exit (NNS_support_python.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_pytorch.cc b/ext/nnstreamer/tensor_filter/tensor_filter_pytorch.cc index 6dadc5d..f169310 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_pytorch.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_pytorch.cc @@ -28,7 +28,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include @@ -682,22 +684,25 @@ static GstTensorFilterFramework NNS_support_pytorch = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = torch_open, .close = torch_close, + { + .v0 = { + .name = filter_subplugin_pytorch, + .allow_in_place = FALSE, /** @todo: support this to optimize performance later. */ + .allocate_in_invoke = FALSE, + .run_without_model = FALSE, + .verify_model_path = FALSE, + .invoke_NN = torch_invoke, + .getInputDimension = torch_getInputDim, + .getOutputDimension = torch_getOutputDim, + .checkAvailability = torch_checkAvailability, + } + } }; /** @brief Initialize this object for tensor_filter subplugin runtime register */ void init_filter_torch (void) { - NNS_support_pytorch.name = filter_subplugin_pytorch; - NNS_support_pytorch.allow_in_place = FALSE; - NNS_support_pytorch.allocate_in_invoke = FALSE; - NNS_support_pytorch.run_without_model = FALSE; - NNS_support_pytorch.verify_model_path = FALSE; - NNS_support_pytorch.invoke_NN = torch_invoke; - NNS_support_pytorch.getInputDimension = torch_getInputDim; - NNS_support_pytorch.getOutputDimension = torch_getOutputDim; - NNS_support_pytorch.checkAvailability = torch_checkAvailability; - nnstreamer_filter_probe (&NNS_support_pytorch); } @@ -705,5 +710,5 @@ init_filter_torch (void) void fini_filter_torch (void) { - nnstreamer_filter_exit (NNS_support_pytorch.name); + nnstreamer_filter_exit (NNS_support_pytorch.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow.cc b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow.cc index 0ba6c06..69943a6 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow.cc @@ -29,7 +29,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include #include @@ -764,23 +766,26 @@ static GstTensorFilterFramework NNS_support_tensorflow = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = tf_open, .close = tf_close, + { + .v0 = { + .name = filter_subplugin_tensorflow, + .allow_in_place = FALSE, /** @todo: support this to optimize performance later. */ + .allocate_in_invoke = TRUE, + .run_without_model = FALSE, + .verify_model_path = FALSE, + .invoke_NN = tf_run, + .getInputDimension = tf_getInputDim, + .getOutputDimension = tf_getOutputDim, + .destroyNotify = tf_destroyNotify, + .checkAvailability = tf_checkAvailability, + } + } }; /** @brief Initialize this object for tensor_filter subplugin runtime register */ void init_filter_tf (void) { - NNS_support_tensorflow.name = filter_subplugin_tensorflow; - NNS_support_tensorflow.allow_in_place = FALSE; /** @todo: support this to optimize performance later. */ - NNS_support_tensorflow.allocate_in_invoke = TRUE; - NNS_support_tensorflow.run_without_model = FALSE; - NNS_support_tensorflow.verify_model_path = FALSE; - NNS_support_tensorflow.invoke_NN = tf_run; - NNS_support_tensorflow.getInputDimension = tf_getInputDim; - NNS_support_tensorflow.getOutputDimension = tf_getOutputDim; - NNS_support_tensorflow.destroyNotify = tf_destroyNotify; - NNS_support_tensorflow.checkAvailability = tf_checkAvailability; - nnstreamer_filter_probe (&NNS_support_tensorflow); } @@ -788,5 +793,5 @@ init_filter_tf (void) void fini_filter_tf (void) { - nnstreamer_filter_exit (NNS_support_tensorflow.name); + nnstreamer_filter_exit (NNS_support_tensorflow.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc index efd29ac..620a0c5 100644 --- a/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc +++ b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc @@ -32,7 +32,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include #include @@ -1086,6 +1088,22 @@ static GstTensorFilterFramework NNS_support_tensorflow_lite = { .version = GST_TENSOR_FILTER_FRAMEWORK_V0, .open = tflite_open, .close = tflite_close, + { + .v0 = { + .name = filter_subplugin_tensorflow_lite, + .allow_in_place = FALSE, /** @todo: support this to optimize performance later. */ + .allocate_in_invoke = FALSE, + .run_without_model = FALSE, + .verify_model_path = TRUE, + .statistics = &tflite_internal_stats, + .invoke_NN = tflite_invoke, + .getInputDimension = tflite_getInputDim, + .getOutputDimension = tflite_getOutputDim, + .setInputDimension = tflite_setInputDim, + .reloadModel = tflite_reloadModel, + .checkAvailability = tflite_checkAvailability, + } + } }; /** @brief Initialize this object for tensor_filter subplugin runtime register */ @@ -1096,18 +1114,6 @@ init_filter_tflite (void) tflite_internal_stats.total_invoke_latency = 0; tflite_internal_stats.total_overhead_latency = 0; - NNS_support_tensorflow_lite.name = filter_subplugin_tensorflow_lite; - NNS_support_tensorflow_lite.allow_in_place = FALSE; /** @todo: support this to optimize performance later. */ - NNS_support_tensorflow_lite.allocate_in_invoke = FALSE; - NNS_support_tensorflow_lite.run_without_model = FALSE; - NNS_support_tensorflow_lite.verify_model_path = TRUE; - NNS_support_tensorflow_lite.invoke_NN = tflite_invoke; - NNS_support_tensorflow_lite.getInputDimension = tflite_getInputDim; - NNS_support_tensorflow_lite.getOutputDimension = tflite_getOutputDim; - NNS_support_tensorflow_lite.setInputDimension = tflite_setInputDim; - NNS_support_tensorflow_lite.reloadModel = tflite_reloadModel; - NNS_support_tensorflow_lite.checkAvailability = tflite_checkAvailability; - NNS_support_tensorflow_lite.statistics = &tflite_internal_stats; nnstreamer_filter_probe (&NNS_support_tensorflow_lite); } @@ -1115,5 +1121,5 @@ init_filter_tflite (void) void fini_filter_tflite (void) { - nnstreamer_filter_exit (NNS_support_tensorflow_lite.name); + nnstreamer_filter_exit (NNS_support_tensorflow_lite.v0.name); } diff --git a/ext/nnstreamer/tensor_filter/vivante/tensor_filter_subplugin.c b/ext/nnstreamer/tensor_filter/vivante/tensor_filter_subplugin.c index ff3da50..00d98b5 100644 --- a/ext/nnstreamer/tensor_filter/vivante/tensor_filter_subplugin.c +++ b/ext/nnstreamer/tensor_filter/vivante/tensor_filter_subplugin.c @@ -72,7 +72,9 @@ #include #include +#define __NO_ANONYMOUS_NESTED_STRUCT #include +#undef __NO_ANONYMOUS_NESTED_STRUCT #include @@ -581,19 +583,23 @@ static GstTensorFilterFramework NNS_support_vivante = { #endif .open = vivante_open, .close = vivante_close, + { + .v0 = { + .name = filter_subplugin_vivante, + .allow_in_place = FALSE, + .allocate_in_invoke = FALSE, + .run_without_model = FALSE, + .invoke_NN = vivante_invoke, + .getInputDimension = vivante_getInputDim, + .getOutputDimension = vivante_getOutputDim, + } + } }; /**@brief Initialize this object for tensor_filter subplugin runtime register */ void init_filter_vivante (void) { - NNS_support_vivante.name = filter_subplugin_vivante; - NNS_support_vivante.allow_in_place = FALSE; - NNS_support_vivante.allocate_in_invoke = FALSE; - NNS_support_vivante.run_without_model = FALSE; - NNS_support_vivante.invoke_NN = vivante_invoke; - NNS_support_vivante.getInputDimension = vivante_getInputDim; - NNS_support_vivante.getOutputDimension = vivante_getOutputDim; nnstreamer_filter_probe (&NNS_support_vivante); } @@ -601,5 +607,5 @@ init_filter_vivante (void) void fini_filter_vivante (void) { - nnstreamer_filter_exit (NNS_support_vivante.name); + nnstreamer_filter_exit (NNS_support_vivante.v0.name); } -- 2.7.4