summaryrefslogtreecommitdiffhomepage
path: root/api/plugin-support.hpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2019-03-18 15:20:09 +0100
committerStanislaw Halik <sthalik@misaki.pl>2019-03-18 15:20:09 +0100
commit5023b54ba76325bb0b5598d59714bdad2d55d81e (patch)
tree15cc639eff7dbfa12eeccaa52d7fd251f18969e6 /api/plugin-support.hpp
parent3aababf6fd53a7b0312c2c1492bab6b43584b613 (diff)
video: add support for camera modules
Issue: #910
Diffstat (limited to 'api/plugin-support.hpp')
-rw-r--r--api/plugin-support.hpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/api/plugin-support.hpp b/api/plugin-support.hpp
index df1344bf..65b8e10d 100644
--- a/api/plugin-support.hpp
+++ b/api/plugin-support.hpp
@@ -35,10 +35,11 @@ struct dylib final
Tracker = 0xcafebeef,
Protocol = 0xdeadf00d,
Extension = 0xcafebabe,
+ Video = 0xbadf00d,
Invalid = (unsigned)-1,
};
- dylib(const QString& filename_, Type t) :
+ dylib(const QString& filename_, Type t, bool load = true) :
full_filename(filename_),
module_name(trim_filename(filename_))
{
@@ -57,19 +58,25 @@ struct dylib final
if (check(!handle.load()))
return;
- if (check((Dialog = (module_ctor_t) handle.resolve("GetDialog"), !Dialog)))
- return;
+ if (load)
+ {
+ if (check((Dialog = (module_ctor_t) handle.resolve("GetDialog"), !Dialog)))
+ return;
- if (check((Constructor = (module_ctor_t) handle.resolve("GetConstructor"), !Constructor)))
- return;
+ if (check((Constructor = (module_ctor_t) handle.resolve("GetConstructor"), !Constructor)))
+ return;
- if (check((Meta = (module_metadata_t) handle.resolve("GetMetadata"), !Meta)))
- return;
+ if (check((Meta = (module_metadata_t) handle.resolve("GetMetadata"), !Meta)))
+ return;
+
+ std::unique_ptr<Metadata_> m{Meta()};
- std::unique_ptr<Metadata_> m{Meta()};
+ if (check(!m))
+ return;
- icon = m->icon();
- name = m->name();
+ icon = m->icon();
+ name = m->name();
+ }
type = t;
#ifdef __clang__
@@ -88,18 +95,20 @@ struct dylib final
const struct filter_ {
Type type{Invalid};
QString glob;
+ bool load = true;
} filters[] = {
{ Filter, QStringLiteral(OPENTRACK_LIBRARY_PREFIX "opentrack-filter-*." OPENTRACK_LIBRARY_EXTENSION), },
{ Tracker, QStringLiteral(OPENTRACK_LIBRARY_PREFIX "opentrack-tracker-*." OPENTRACK_LIBRARY_EXTENSION), },
{ Protocol, QStringLiteral(OPENTRACK_LIBRARY_PREFIX "opentrack-proto-*." OPENTRACK_LIBRARY_EXTENSION), },
{ Extension, QStringLiteral(OPENTRACK_LIBRARY_PREFIX "opentrack-ext-*." OPENTRACK_LIBRARY_EXTENSION), },
+ { Video, QStringLiteral(OPENTRACK_LIBRARY_PREFIX "opentrack-video-*." OPENTRACK_LIBRARY_EXTENSION), false, },
};
for (const filter_& filter : filters)
{
for (const QString& filename : module_directory.entryList({ filter.glob }, QDir::Files, QDir::Name))
{
- auto lib = std::make_shared<dylib>(QStringLiteral("%1/%2").arg(library_path, filename), filter.type);
+ auto lib = std::make_shared<dylib>(QStringLiteral("%1/%2").arg(library_path, filename), filter.type, filter.load);
if (lib->type == Invalid)
continue;
@@ -159,6 +168,7 @@ private:
OPENTRACK_LIBRARY_PREFIX "opentrack-proto-",
OPENTRACK_LIBRARY_PREFIX "opentrack-filter-",
OPENTRACK_LIBRARY_PREFIX "opentrack-ext-",
+ OPENTRACK_LIBRARY_PREFIX "opentrack-video-",
};
for (auto name : names)
@@ -198,7 +208,8 @@ struct Modules final
filter_modules(filter(dylib::Filter)),
tracker_modules(filter(dylib::Tracker)),
protocol_modules(filter(dylib::Protocol)),
- extension_modules(filter(dylib::Extension))
+ extension_modules(filter(dylib::Extension)),
+ video_modules(filter(dylib::Video))
{}
dylib_list& filters() { return filter_modules; }
dylib_list& trackers() { return tracker_modules; }
@@ -211,6 +222,7 @@ private:
dylib_list tracker_modules;
dylib_list protocol_modules;
dylib_list extension_modules;
+ dylib_list video_modules;
static dylib_list& sorted(dylib_list& xs)
{