#pragma once #include #include #include #include "node.h" namespace rk3588 { class PluginLoader { public: explicit PluginLoader(std::string plugin_dir); ~PluginLoader(); std::unique_ptr Create(const std::string& type, std::string& err); private: struct PluginHandle { void* handle = nullptr; CreateNodeFn create = nullptr; GetTypeFn get_type = nullptr; GetAbiFn get_abi = nullptr; }; std::string BuildLibraryPath(const std::string& type) const; bool LoadPlugin(const std::string& type, PluginHandle& out, std::string& err); std::string plugin_dir_; std::map cache_; }; } // namespace rk3588