annotate host/Processor.h @ 17:3cbd40805795 tip

Remove obsolete stuff from README
author Chris Cannam
date Tue, 03 Dec 2013 16:33:08 +0000
parents df33703ace3b
children
rev   line source
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