OrangePi3588Media/include/plugin_loader.h

34 lines
727 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();
std::unique_ptr<INode> 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<std::string, PluginHandle> cache_;
};
} // namespace rk3588