Create Instance of Plugin Class
------------------------
-Inference Engine plugin library must export only one function creating a plugin instance:
+Inference Engine plugin library must export only one function creating a plugin instance using IE_DEFINE_PLUGIN_CREATE_FUNCTION macro:
@snippet src/template_plugin.cpp plugin:create_plugin_engine
// ! [plugin:get_metric]
// ! [plugin:create_plugin_engine]
-INFERENCE_PLUGIN_API(StatusCode) CreatePluginEngine(IInferencePlugin *&plugin, ResponseDesc *resp) noexcept {
- try {
- plugin = make_ie_compatible_plugin({2, 1, CI_BUILD_NUMBER, "templatePlugin"},
- std::make_shared<Plugin>());
- return OK;
- }
- catch (std::exception &ex) {
- return DescriptionBuffer(GENERAL_ERROR, resp) << ex.what();
- }
-}
+static const Version version = {{2, 1}, CI_BUILD_NUMBER, "templatePlugin"};
+IE_DEFINE_PLUGIN_CREATE_FUNCTION(Plugin, version)
// ! [plugin:create_plugin_engine]
}; // namespace CLDNNPlugin
-INFERENCE_PLUGIN_API(StatusCode) CreatePluginEngine(IInferencePlugin*& plugin, ResponseDesc* resp) noexcept {
- try {
- plugin = make_ie_compatible_plugin(
- { 2, 1,
- CI_BUILD_NUMBER,
- "clDNNPlugin" }, std::make_shared<CLDNNPlugin::clDNNEngine>());
- return OK;
- }
- catch (std::exception & ex) {
- return DescriptionBuffer(GENERAL_ERROR, resp) << ex.what();
- }
-}
-
+static const Version version = { {2, 1}, CI_BUILD_NUMBER, "clDNNPlugin" };
+IE_DEFINE_PLUGIN_CREATE_FUNCTION(CLDNNPlugin::clDNNEngine, version)
"GNAPlugin"
};
-INFERENCE_PLUGIN_API(StatusCode) CreatePluginEngine(IInferencePlugin *&plugin, ResponseDesc *resp) noexcept {
- try {
- plugin = make_ie_compatible_plugin(gnaPluginDescription, make_shared<GNAPluginInternal>());
- return OK;
- }
- catch (std::exception &ex) {
- return DescriptionBuffer(GENERAL_ERROR, resp) << ex.what();
- }
-}
+IE_DEFINE_PLUGIN_CREATE_FUNCTION(GNAPluginInternal, gnaPluginDescription)
}
}
-INFERENCE_PLUGIN_API(InferenceEngine::StatusCode) CreatePluginEngine(
- InferenceEngine::IInferencePlugin *&plugin,
- InferenceEngine::ResponseDesc *resp) noexcept {
- try {
- plugin = make_ie_compatible_plugin({{2, 1}, CI_BUILD_NUMBER, "heteroPlugin"},
- std::make_shared<Engine>());
- return OK;
- }
- catch (std::exception &ex) {
- return DescriptionBuffer(GENERAL_ERROR, resp) << ex.what();
- }
-}
+static const Version version = {{2, 1}, CI_BUILD_NUMBER, "heteroPlugin"};
+IE_DEFINE_PLUGIN_CREATE_FUNCTION(Engine, version)
}
}
-INFERENCE_PLUGIN_API(StatusCode) CreatePluginEngine(IInferencePlugin*& plugin, ResponseDesc *resp) noexcept {
- try {
- plugin = make_ie_compatible_plugin(
- {{2, 1},
- CI_BUILD_NUMBER,
- "MKLDNNPlugin"}, std::make_shared<Engine>());
- return OK;
- }
- catch (std::exception &ex) {
- return DescriptionBuffer(GENERAL_ERROR, resp) << ex.what();
- }
-}
+static const Version version = {{2, 1}, CI_BUILD_NUMBER, "MKLDNNPlugin"};
+IE_DEFINE_PLUGIN_CREATE_FUNCTION(Engine, version)
}
}
-INFERENCE_PLUGIN_API(InferenceEngine::StatusCode) CreatePluginEngine(
- InferenceEngine::IInferencePlugin *&plugin,
- InferenceEngine::ResponseDesc *resp) noexcept {
- try {
- plugin = make_ie_compatible_plugin(
- {{2, 1},
- CI_BUILD_NUMBER,
- "MultiDevicePlugin"}, std::make_shared<MultiDeviceInferencePlugin>());
- return OK;
- }
- catch (std::exception &ex) {
- return DescriptionBuffer(GENERAL_ERROR, resp) << ex.what();
- }
-}
+static const Version version = {{2, 1}, CI_BUILD_NUMBER, "MultiDevicePlugin"};
+IE_DEFINE_PLUGIN_CREATE_FUNCTION(MultiDeviceInferencePlugin, version)
MultiDeviceInferencePlugin::MultiDeviceInferencePlugin() {
_pluginName = "MULTI";
#include <ie_parameter.hpp>
#include <ie_iexecutable_network.hpp>
#include <ie_remote_context.hpp>
+#include <cpp_interfaces/base/ie_plugin_base.hpp>
#include <blob_factory.hpp>
};
} // namespace InferenceEngine
+
+/**
+ * @def IE_DEFINE_PLUGIN_CREATE_FUNCTION(PluginType, version)
+ * @brief Defines the exported `CreatePluginEngine` function which is used to create a plugin instance
+ * @ingroup ie_dev_api_plugin_api
+ */
+#define IE_DEFINE_PLUGIN_CREATE_FUNCTION(PluginType, version, ...) \
+ INFERENCE_PLUGIN_API(InferenceEngine::StatusCode) CreatePluginEngine( \
+ InferenceEngine::IInferencePlugin *&plugin, \
+ InferenceEngine::ResponseDesc *resp) noexcept { \
+ try { \
+ InferenceEngine::Version _version = version; \
+ plugin = make_ie_compatible_plugin(_version, std::make_shared<PluginType>(__VA_ARGS__)); \
+ return OK; \
+ } \
+ catch (std::exception &ex) { \
+ return InferenceEngine::DescriptionBuffer(GENERAL_ERROR, resp) << ex.what(); \
+ } \
+ }
~IInferencePlugin() override;
};
-/**
- * @brief Creates the default instance of the interface (per plugin)
- *
- * @param plugin Pointer to the plugin
- * @param resp Pointer to the response message that holds a description of an error if any occurred
- * @return Status code of the operation. InferenceEngine::OK if succeeded
- */
-INFERENCE_PLUGIN_API(StatusCode) CreatePluginEngine(IInferencePlugin*& plugin, ResponseDesc* resp) noexcept;
-
} // namespace InferenceEngine
using namespace InferenceEngine;
using namespace vpu::MyriadPlugin;
-IE_SUPPRESS_DEPRECATED_START
-
-INFERENCE_PLUGIN_API(StatusCode) CreatePluginEngine(IInferencePlugin *&plugin, ResponseDesc *resp) noexcept {
- try {
- auto mvnc = std::make_shared<Mvnc>();
- plugin = make_ie_compatible_plugin({{2, 1}, CI_BUILD_NUMBER, "myriadPlugin"}, std::make_shared<Engine>(mvnc));
- return OK;
- }
- catch (std::exception &ex) {
- return DescriptionBuffer(GENERAL_ERROR, resp) << ex.what();
- }
-}
+static const Version version = {{2, 1}, CI_BUILD_NUMBER, "myriadPlugin"};
+IE_DEFINE_PLUGIN_CREATE_FUNCTION(Engine, version, std::make_shared<Mvnc>())