OrangePi3588Media/include/plugin_loader.h

41 lines
1017 B
C++

#pragma once
#include <map>
#include <memory>
#include <string>
#include "node.h"
namespace rk3588 {
class PluginLoader {
public:
explicit PluginLoader(std::string plugin_dir);
~PluginLoader();
PluginLoader(const PluginLoader&) = delete;
PluginLoader& operator=(const PluginLoader&) = delete;
std::unique_ptr<INode> Create(const std::string& type, std::string& err);
// Switch plugin directory. This will unload any cached plugins.
void SetPluginDir(std::string plugin_dir);
const std::string& PluginDir() const { return plugin_dir_; }
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<std::string, PluginHandle> cache_;
};
} // namespace rk3588