From 10bb4b05c16584682a654d593334a7655f85d9d3 Mon Sep 17 00:00:00 2001 From: MyungJoo Ham Date: Tue, 29 Jan 2019 18:33:47 +0900 Subject: [PATCH] [Filter:*] Migrate subplugins to ext Filter subplugins that have external dependencies are fully detached from Filter:main now. Signed-off-by: MyungJoo Ham --- debian/nnstreamer-dev.install | 2 +- debian/nnstreamer.install | 2 +- ext/nnstreamer/tensor_filter/meson.build | 52 +++++++++++++++++++ .../tensor_filter/tensor_filter_tensorflow.c | 0 .../tensor_filter/tensor_filter_tensorflow_core.cc | 0 .../tensor_filter/tensor_filter_tensorflow_core.h | 0 .../tensor_filter/tensor_filter_tensorflow_lite.c | 0 .../tensor_filter_tensorflow_lite_core.cc | 0 .../tensor_filter_tensorflow_lite_core.h | 0 gst/nnstreamer/nnstreamer_subplugin.c | 18 +++++-- gst/nnstreamer/nnstreamer_subplugin.h | 3 +- gst/nnstreamer/tensor_filter/meson.build | 60 ---------------------- meson.build | 3 ++ packaging/nnstreamer.spec | 3 +- 14 files changed, 76 insertions(+), 67 deletions(-) create mode 100644 ext/nnstreamer/tensor_filter/meson.build rename {gst => ext}/nnstreamer/tensor_filter/tensor_filter_tensorflow.c (100%) rename {gst => ext}/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.cc (100%) rename {gst => ext}/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.h (100%) rename {gst => ext}/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.c (100%) rename {gst => ext}/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.cc (100%) rename {gst => ext}/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.h (100%) diff --git a/debian/nnstreamer-dev.install b/debian/nnstreamer-dev.install index a1d0db6..d27b4ab 100644 --- a/debian/nnstreamer-dev.install +++ b/debian/nnstreamer-dev.install @@ -1,5 +1,5 @@ /usr/include/nnstreamer/*.h /usr/lib/*/pkgconfig/*.pc /usr/lib/*/libnnstreamer.a -/usr/lib/*/libtensor_filter*.a +/usr/lib/*/libnnstreamer_filter*.a /usr/lib/*/libnnstreamer_plugin_api.a diff --git a/debian/nnstreamer.install b/debian/nnstreamer.install index dc12a8c..2b52fbd 100644 --- a/debian/nnstreamer.install +++ b/debian/nnstreamer.install @@ -1,4 +1,4 @@ -/usr/lib/*/libtensor_filter_*.so +/usr/lib/nnstreamer/filters/libnnstreamer_filter_*.so /usr/lib/*/gstreamer-1.0/*.so /usr/lib/*/libnnstreamer_plugin_api.so /etc/nnstreamer.ini diff --git a/ext/nnstreamer/tensor_filter/meson.build b/ext/nnstreamer/tensor_filter/meson.build new file mode 100644 index 0000000..616251b --- /dev/null +++ b/ext/nnstreamer/tensor_filter/meson.build @@ -0,0 +1,52 @@ + +if have_tensorflow + tensor_filter_tfcore_lib_shared = shared_library('nnstreamer_filter_tensorflow', + [ + 'tensor_filter_tensorflow_core.cc', + 'tensor_filter_tensorflow.c' + ], + cpp_args: ['-Wno-sign-compare'], + dependencies: [tf_dep, protobuf_dep, nnstreamer_dep], + include_directories: nnstreamer_inc, + install: true, + install_dir: join_paths(subplugin_install_prefix, 'filters') + ) + + tensor_filter_tfcore_lib_static = static_library('nnstreamer_filter_tensorflow', + [ + 'tensor_filter_tensorflow_core.cc', + 'tensor_filter_tensorflow.c' + ], + cpp_args: ['-Wno-sign-compare'], + dependencies: [tf_dep, protobuf_dep, nnstreamer_dep], + include_directories: nnstreamer_inc, + install: true, + install_dir: nnstreamer_libdir + ) +endif + +if have_tensorflow_lite + tensor_filter_tflitecore_lib_shared = shared_library('nnstreamer_filter_tensorflow-lite', + [ + 'tensor_filter_tensorflow_lite_core.cc', + 'tensor_filter_tensorflow_lite.c' + ], + cpp_args: ['-Wno-sign-compare'], + dependencies: [tflite_dep, nnstreamer_dep], + include_directories: nnstreamer_inc, + install: true, + install_dir: join_paths(subplugin_install_prefix, 'filters') + ) + + tensor_filter_tflitecore_lib_static = static_library('nnstreamer_filter_tensorflow-lite', + [ + 'tensor_filter_tensorflow_lite_core.cc', + 'tensor_filter_tensorflow_lite.c' + ], + cpp_args: ['-Wno-sign-compare'], + dependencies: [tflite_dep, nnstreamer_dep], + include_directories: nnstreamer_inc, + install: true, + install_dir: nnstreamer_libdir + ) +endif diff --git a/gst/nnstreamer/tensor_filter/tensor_filter_tensorflow.c b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow.c similarity index 100% rename from gst/nnstreamer/tensor_filter/tensor_filter_tensorflow.c rename to ext/nnstreamer/tensor_filter/tensor_filter_tensorflow.c diff --git a/gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.cc b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.cc similarity index 100% rename from gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.cc rename to ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.cc diff --git a/gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.h b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.h similarity index 100% rename from gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.h rename to ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_core.h diff --git a/gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.c b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.c similarity index 100% rename from gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.c rename to ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.c diff --git a/gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.cc b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.cc similarity index 100% rename from gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.cc rename to ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.cc diff --git a/gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.h b/ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.h similarity index 100% rename from gst/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.h rename to ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite_core.h diff --git a/gst/nnstreamer/nnstreamer_subplugin.c b/gst/nnstreamer/nnstreamer_subplugin.c index f1943e6..a3e1abe 100644 --- a/gst/nnstreamer/nnstreamer_subplugin.c +++ b/gst/nnstreamer/nnstreamer_subplugin.c @@ -65,13 +65,19 @@ _heldsp_destroy (gpointer _data) * @brief API to notify subplugin-manager that this subplugin is handled already. */ void -hold_register_subplugin (subpluginType type, const char *name, void *data) +hold_register_subplugin (subpluginType type, const char *name, const void *data) { + holdplugins *ptr; + if (held_subplugins[type] == NULL) held_subplugins[type] = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, _heldsp_destroy); - g_hash_table_insert (held_subplugins[type], g_strdup (name), data); + + ptr = g_new (holdplugins, 1); + ptr->name = g_strdup (name); + ptr->data = data; + g_hash_table_insert (held_subplugins[type], g_strdup (name), ptr); } /** @@ -80,9 +86,15 @@ hold_register_subplugin (subpluginType type, const char *name, void *data) static const void * check_held_subplugin (subpluginType type, const char *name) { + holdplugins *ptr; + if (held_subplugins[type] == NULL) return NULL; - return g_hash_table_lookup (held_subplugins[type], name); + ptr = g_hash_table_lookup (held_subplugins[type], name); + + if (ptr) + return ptr->data; + return NULL; } /** @brief Private function for g_hash_table data destructor, GDestroyNotify */ diff --git a/gst/nnstreamer/nnstreamer_subplugin.h b/gst/nnstreamer/nnstreamer_subplugin.h index 0ee8e72..e82825f 100644 --- a/gst/nnstreamer/nnstreamer_subplugin.h +++ b/gst/nnstreamer/nnstreamer_subplugin.h @@ -90,6 +90,7 @@ unregister_subplugin (subpluginType type, const char *name); /** * @brief Call this at subplugin probe to avoid duplicated registration */ -extern void hold_register_subplugin (subpluginType type, const char *name, void *data); +extern void +hold_register_subplugin (subpluginType type, const char *name, const void *data); #endif /* __GST_NNSTREAMER_SUBPLUGIN_H__ */ diff --git a/gst/nnstreamer/tensor_filter/meson.build b/gst/nnstreamer/tensor_filter/meson.build index 5e3a8cd..03ee8d7 100644 --- a/gst/nnstreamer/tensor_filter/meson.build +++ b/gst/nnstreamer/tensor_filter/meson.build @@ -3,66 +3,6 @@ tensor_filter_sources = [ 'tensor_filter_custom.c' ] -if have_tensorflow - tensor_filter_sources += ['tensor_filter_tensorflow.c'] - - tensor_filter_tfcore_lib_shared = shared_library('tensor_filter_tensorflow', - ['tensor_filter_tensorflow_core.cc'], - cpp_args: ['-Wno-sign-compare'], - dependencies: [tf_dep, protobuf_dep, glib_dep, gst_dep], - include_directories: nnstreamer_inc, - install: true, - install_dir: subplugins_install_dir - ) - - tensor_filter_tfcore_lib_static = static_library('tensor_filter_tensorflow', - ['tensor_filter_tensorflow_core.cc'], - cpp_args: ['-Wno-sign-compare'], - dependencies: [tf_dep, protobuf_dep, glib_dep, gst_dep], - include_directories: nnstreamer_inc, - install: true, - install_dir: subplugins_install_dir - ) - - tensor_filter_tfcore_lib = tensor_filter_tfcore_lib_shared - if get_option('default_library') == 'static' - tensor_filter_tfcore_lib = tensor_filter_tfcore_lib_static - endif - - tensor_filter_tfcore_dep = declare_dependency(link_with: tensor_filter_tfcore_lib) - nnstreamer_extra_deps += tensor_filter_tfcore_dep -endif - -if have_tensorflow_lite - tensor_filter_sources += ['tensor_filter_tensorflow_lite.c'] - - tensor_filter_tflitecore_lib_shared = shared_library('tensor_filter_tensorflow-lite', - ['tensor_filter_tensorflow_lite_core.cc'], - cpp_args: ['-Wno-sign-compare'], - dependencies: [tflite_dep, thread_dep, libdl_dep, glib_dep, gst_dep], - include_directories: nnstreamer_inc, - install: true, - install_dir: subplugins_install_dir - ) - - tensor_filter_tflitecore_lib_static = static_library('tensor_filter_tensorflow-lite', - ['tensor_filter_tensorflow_lite_core.cc'], - cpp_args: ['-Wno-sign-compare'], - dependencies: [tflite_dep, thread_dep, libdl_dep, glib_dep, gst_dep], - include_directories: nnstreamer_inc, - install: true, - install_dir: subplugins_install_dir - ) - - tensor_filter_tflitecore_lib = tensor_filter_tflitecore_lib_shared - if get_option('default_library') == 'static' - tensor_filter_tflitecore_lib = tensor_filter_tflitecore_lib_static - endif - - tensor_filter_tflitecore_dep = declare_dependency(link_with: tensor_filter_tflitecore_lib) - nnstreamer_extra_deps += tensor_filter_tflitecore_dep -endif - foreach s : tensor_filter_sources nnstreamer_sources += join_paths(meson.current_source_dir(), s) endforeach diff --git a/meson.build b/meson.build index ace3779..1123e8a 100644 --- a/meson.build +++ b/meson.build @@ -106,6 +106,9 @@ endif # Build nnstreamer (common, plugins) subdir('gst') +# Build ext subplugins (filter-subplugins) +subdir('ext/nnstreamer/tensor_filter') + # Build nnstreamer examples if get_option('enable-test') or get_option('install-example') subdir('nnstreamer_example') diff --git a/packaging/nnstreamer.spec b/packaging/nnstreamer.spec index b799131..e06a239 100644 --- a/packaging/nnstreamer.spec +++ b/packaging/nnstreamer.spec @@ -110,6 +110,7 @@ ninja -C build %{?_smp_mflags} ./tests/unittest_sink --gst-plugin-path=. ./tests/unittest_plugins --gst-plugin-path=. popd + export NNSTREAMER_FILTERS=$(pwd)/build/ext/nnstreamer/tensor_filter pushd tests ssat -n popd @@ -160,7 +161,7 @@ cp -r result %{buildroot}%{_datadir}/nnstreamer/unittest/ %manifest nnstreamer.manifest %defattr(-,root,root,-) %license LICENSE -%{_libdir}/libtensor_filter_*.so +%{_prefix}/lib/nnstreamer/filters/libnnstreamer_filter_*.so %{gstlibdir}/*.so %{_libdir}/libnnstreamer_plugin_api.so %{_sysconfdir}/nnstreamer.ini -- 2.7.4