cannam@0
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
cannam@0
|
2
|
cannam@0
|
3 #ifndef _PROCESSOR_H_
|
cannam@0
|
4 #define _PROCESSOR_H_
|
cannam@0
|
5
|
cannam@0
|
6 #include <QThread>
|
cannam@0
|
7 #include <QString>
|
cannam@0
|
8 #include <QMutex>
|
cannam@0
|
9
|
cannam@0
|
10 #include "audioio/BufferingAudioCallbackRecordTarget.h"
|
cannam@0
|
11
|
Chris@15
|
12 #include <vamp-hostsdk/Plugin.h>
|
cannam@0
|
13
|
cannam@4
|
14 #include "Rule.h"
|
cannam@4
|
15
|
cannam@1
|
16 #include <map>
|
cannam@1
|
17 #include <set>
|
cannam@1
|
18
|
cannam@0
|
19 class Processor : public QThread
|
cannam@0
|
20 {
|
cannam@6
|
21 Q_OBJECT
|
cannam@6
|
22
|
cannam@0
|
23 public:
|
cannam@0
|
24 Processor(BufferingAudioCallbackRecordTarget *audioRecordTarget);
|
cannam@0
|
25 virtual ~Processor();
|
cannam@0
|
26
|
cannam@0
|
27 int addPlugin(QString pluginId); // returns reference number, 0 for failure
|
cannam@0
|
28 void removePlugin(int number);
|
cannam@0
|
29
|
cannam@7
|
30 void addRule(Rule *rule); // I take ownership of rule
|
cannam@6
|
31
|
cannam@0
|
32 protected:
|
cannam@0
|
33 virtual void run();
|
cannam@1
|
34 bool runPlugins();
|
cannam@4
|
35 bool processRules();
|
cannam@0
|
36
|
cannam@0
|
37 bool m_exiting;
|
cannam@0
|
38 BufferingAudioCallbackRecordTarget *m_audioRecordTarget;
|
cannam@0
|
39
|
cannam@1
|
40 // Plugins indexed by plugin number
|
cannam@0
|
41 typedef std::map<int, Vamp::Plugin *> PluginMap;
|
cannam@0
|
42 PluginMap m_plugins;
|
cannam@0
|
43 int m_nextNumber;
|
cannam@0
|
44
|
cannam@4
|
45 // Map back from plugin to index
|
cannam@4
|
46 typedef std::map<Vamp::Plugin *, int> PluginRMap;
|
cannam@4
|
47 PluginRMap m_pluginRMap;
|
cannam@4
|
48
|
cannam@1
|
49 // The same plugins, indexed by step and block sizes
|
cannam@1
|
50 typedef std::set<Vamp::Plugin *> PluginSet;
|
cannam@1
|
51 typedef std::map<size_t, PluginSet> BlockSizePluginMap;
|
cannam@1
|
52 typedef std::map<size_t, BlockSizePluginMap> StepSizePluginMap;
|
cannam@1
|
53 StepSizePluginMap m_processingMap;
|
cannam@0
|
54
|
cannam@1
|
55 // A map from step size to ring buffer reader number
|
cannam@1
|
56 typedef std::map<size_t, int> StepSizeReaderMap;
|
cannam@5
|
57 typedef std::set<int> ReaderSet;
|
cannam@1
|
58 StepSizeReaderMap m_stepSizeReaderMap;
|
cannam@5
|
59 ReaderSet m_unusedReaders;
|
cannam@1
|
60
|
cannam@7
|
61 typedef std::multiset<Rule *> RuleSet;
|
cannam@7
|
62 RuleSet m_rules;
|
cannam@4
|
63
|
cannam@4
|
64 class OutputState {
|
cannam@4
|
65 public:
|
cannam@4
|
66 OutputState() :
|
cannam@14
|
67 present(false), silentInput(true), changed(false), value(0.f) { }
|
cannam@14
|
68 OutputState(bool p, bool si, bool c, float v, Vamp::RealTime s, Vamp::RealTime g) :
|
cannam@14
|
69 present(p), silentInput(si), changed(c), value(v), laststamp(s), gap(g) { }
|
cannam@4
|
70 bool present;
|
cannam@14
|
71 bool silentInput;
|
cannam@4
|
72 bool changed;
|
cannam@4
|
73 float value;
|
cannam@4
|
74 Vamp::RealTime laststamp;
|
cannam@4
|
75 Vamp::RealTime gap;
|
cannam@4
|
76 };
|
cannam@4
|
77
|
cannam@4
|
78 // Map from plugin index to output index to state
|
cannam@5
|
79 typedef std::map<int, OutputState> OutputStateMap;
|
cannam@5
|
80 typedef std::map<int, OutputStateMap> PluginStateMap;
|
cannam@4
|
81 PluginStateMap m_pluginStates;
|
cannam@4
|
82
|
cannam@1
|
83 bool m_havePlugins;
|
cannam@1
|
84 size_t m_minBlockSize;
|
cannam@1
|
85 size_t m_maxBlockSize;
|
cannam@0
|
86 QMutex m_mutex;
|
cannam@0
|
87 };
|
cannam@0
|
88
|
cannam@0
|
89 #endif
|
cannam@0
|
90
|