iVS3D v2.0.9
Loading...
Searching...
No Matches
pluginthread.h
1#pragma once
2
3#include <QAtomicInteger>
4#include <QDir>
5#include <QHash>
6#include <QObject>
7#include <QThread>
8#include <memory>
9#include <queue>
10
11#include "pluginhandle.h"
12
13using RequestId = quint64;
14
16 RequestId id; // unique ID for this request
17 uint idx; // Index of the image in the sequence
18 cv::Mat img; // The image to create a preview for
19 QString pluginName; // The plugin to use for generating the preview
20};
21Q_DECLARE_METATYPE(PreviewRequest)
22
24 uint idx; // Index of the image in the sequence
25 VIS::VisualizationResult visualization; // The result of the visualization
26};
27Q_DECLARE_METATYPE(PreviewResult)
28
30 RequestId id; // unique ID for this request
31 uint imageIndex; // Index of the image in the sequence
32 cv::Mat image; // The image to create a mask for
33 QDir exportDir; // Directory where the generated mask will be saved
34 QString pluginName; // The plugin to use for mask generation
35 int maskRecordId; // ID of the MaskRecord for tracking
36};
37Q_DECLARE_METATYPE(MaskRequest)
38
40 RequestId id;
41 QString pluginName;
43};
44Q_DECLARE_METATYPE(SelectionRequest)
45
47 RequestId id;
48 QString pluginName;
49 bool success = false;
50 bool cancelled = false;
51 std::vector<uint> selectedIndices;
52 QString errorMessage;
53};
54Q_DECLARE_METATYPE(SelectionResultData)
55
57 uint imageIndex; // Index of the image in the sequence
58 cv::Mat mask; // The generated mask
59 int maskRecordId; // ID of the MaskRecord
60 bool success = true;
61 QString errorMessage;
62};
63Q_DECLARE_METATYPE(MaskGenerationResult)
64
65enum class PreviewState {
66 Idle,
67 Processing,
68};
69Q_DECLARE_METATYPE(PreviewState)
70
71
76class PluginRunner : public QObject {
77 Q_OBJECT
78 public:
79 PluginRunner(const QHash<QString, PluginHandle>& plugins,
80 QObject* parent = nullptr);
81
82 void setLatestRequestId(RequestId id) { m_latestRequest.storeRelaxed(id); }
83
84 bool setActivePlugin(const QString& pluginName);
85 void clearActivePlugin();
86 PLUG::ApplySettingsResult applyPluginSettings(
87 const QString& pluginName, const QMap<QString, QVariant>& settings);
88 QMap<QString, QVariant> getPluginSettings(const QString& pluginName) const;
89 QString getPluginSettingsString(const QString& pluginName) const;
90 void enableCuda(bool useCuda);
91 void onInputLoaded(Reader* reader);
92 void resetSelectionCancelFlag();
93 void cancelSelectionDirect();
94
95 public slots:
96 void onMetaDataLoaded(const PLUG::InputMetaData& inputMetaData);
97 void onIndexChanged(uint index);
98 void onSelectedImagesChanged(const std::vector<uint>& selectedImages);
99 void requestPreview(const PreviewRequest& request);
100 void requestMask(const MaskRequest& request);
101 void requestSelection(const SelectionRequest& request);
102 void cancelSelection();
103
104 signals:
105 void previewStarted(const RequestId& id);
106 void previewFinished(const PreviewResult& result);
107 void maskFinished(const MaskGenerationResult& result);
108 void selectionFinished(const SelectionResultData& result);
109 void activePluginUpdatePreview(bool clearOldPreview);
110 void activePluginUpdateProgress(int progress, const QString& message);
111 void activePluginUpdateSelectedImages(
112 const std::vector<uint>& selectedImages);
113
114 private:
115 const PluginHandle* findPlugin(const QString& pluginName) const;
116
117 QHash<QString, PluginHandle> m_plugins;
118 QString m_activePluginName;
119 volatile bool m_selectionCancelFlag = false;
120 QAtomicInteger<RequestId> m_latestRequest{0};
121};
122
123class PluginThread : public QObject {
124 Q_OBJECT
125
126 public:
127 PluginThread(const QHash<QString, PluginHandle>& pluginHandles,
128 QObject* parent = nullptr);
130
131 void requestPreview(const QString& pluginName, const PLUG::PreviewData& request);
132 void requestMask(const MaskRequest& request);
133 void requestSelection(const QString& pluginName, const PLUG::SelectionData& data);
134 void cancelSelection();
135
136 bool setActivePlugin(const QString& pluginName);
137 void clearActivePlugin();
138
139 PLUG::ApplySettingsResult applyPluginSettings(
140 const QString& pluginName, const QMap<QString, QVariant>& settings);
141 QMap<QString, QVariant> getPluginSettings(const QString& pluginName) const;
142 QString getPluginSettingsString(const QString& pluginName) const;
143
144 void enableCuda(bool useCuda);
145 void onInputLoaded(Reader* reader);
146
147 public slots:
148 void onMetaDataLoaded(const PLUG::InputMetaData& inputMetaData);
149 void onIndexChanged(uint index);
150 void onSelectedImagesChanged(const std::vector<uint>& selectedImages);
151
152 signals:
153 void previewFinished(const PreviewResult& result);
154 void previewStateChanged(const PreviewState& state);
155 void maskFinished(const MaskGenerationResult& result);
156 void selectionFinished(const SelectionResultData& result);
157 void activePluginUpdatePreview(bool clearOldPreview);
158 void activePluginUpdateProgress(int progress, const QString& message);
159 void activePluginUpdateSelectedImages(
160 const std::vector<uint>& selectedImages);
161 void notifyMetaDataLoaded(const PLUG::InputMetaData& inputMetaData);
162 void notifyIndexChanged(uint index);
163 void notifySelectedImagesChanged(const std::vector<uint>& selectedImages);
164
165 private:
166 std::unique_ptr<QThread> m_thread;
167 std::unique_ptr<PluginRunner> m_runner;
168 RequestId m_counter{0};
169 QHash<QString, PluginHandle> m_plugins;
170};
Definition pluginthread.h:76
Definition pluginthread.h:123
The Reader interface defines functions which are used for reading and parsing the import.
Definition reader.h:23
tl::expected< void, Error > ApplySettingsResult
Type alias for the result of applying settings to a plugin, which can be either a successful void res...
Definition ibase.h:51
Definition pluginthread.h:56
Definition pluginthread.h:29
Struct containing metadata context that has been loaded for the currently opened input.
Definition ibase.h:80
Struct containing data required to generate a preview. The image is resized to the working resolution...
Definition ipreview.h:16
Data available for image selection in ISelection plugins.
Definition iselection.h:31
Definition pluginhandle.h:14
Definition pluginthread.h:15
Definition pluginthread.h:23
Definition pluginthread.h:39
Definition pluginthread.h:46