diff --git a/modules/videoio/src/backend_plugin.cpp b/modules/videoio/src/backend_plugin.cpp index ab6960f398..e1d8f3835b 100644 --- a/modules/videoio/src/backend_plugin.cpp +++ b/modules/videoio/src/backend_plugin.cpp @@ -167,6 +167,14 @@ public: CV_LOG_INFO(NULL, "Video I/O: plugin is incompatible: " << lib->getName()); return; } + if (plugin_api_->api_header.opencv_version_major != CV_VERSION_MAJOR || + plugin_api_->api_header.opencv_version_minor != CV_VERSION_MINOR) + { + CV_LOG_ERROR(NULL, "Video I/O: wrong OpenCV version used by plugin '" << plugin_api_->api_header.api_description << "': " << + cv::format("%d.%d, OpenCV version is '" CV_VERSION "'", plugin_api_->api_header.opencv_version_major, plugin_api_->api_header.opencv_version_minor)) + plugin_api_ = NULL; + return; + } // TODO Preview: add compatibility API/ABI checks CV_LOG_INFO(NULL, "Video I/O: loaded plugin '" << plugin_api_->api_header.api_description << "'"); } @@ -264,8 +272,17 @@ void PluginBackendFactory::loadPlugin() Ptr pluginBackend = makePtr(lib); if (pluginBackend && pluginBackend->plugin_api_) { - backend = pluginBackend; - return; + if (pluginBackend->plugin_api_->captureAPI != id_) + { + CV_LOG_ERROR(NULL, "Video I/O: plugin '" << pluginBackend->plugin_api_->api_header.api_description << + "': unexpected backend ID: " << + pluginBackend->plugin_api_->captureAPI << " vs " << (int)id_ << " (expected)"); + } + else + { + backend = pluginBackend; + return; + } } } catch (...)