00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _LADSPAPLUGININSTANCE_H_
00022 #define _LADSPAPLUGININSTANCE_H_
00023
00024 #include <vector>
00025 #include <set>
00026 #include <QString>
00027
00028 #include "api/ladspa.h"
00029 #include "RealTimePluginInstance.h"
00030
00031
00032
00033
00034
00035 class LADSPAPluginInstance : public RealTimePluginInstance
00036 {
00037 public:
00038 virtual ~LADSPAPluginInstance();
00039
00040 virtual bool isOK() const { return m_instanceHandles.size() != 0; }
00041
00042 int getClientId() const { return m_client; }
00043 virtual QString getPluginIdentifier() const { return m_identifier; }
00044 int getPosition() const { return m_position; }
00045
00046 virtual std::string getIdentifier() const;
00047 virtual std::string getName() const;
00048 virtual std::string getDescription() const;
00049 virtual std::string getMaker() const;
00050 virtual int getPluginVersion() const;
00051 virtual std::string getCopyright() const;
00052
00053 virtual void run(const Vamp::RealTime &rt);
00054
00055 virtual unsigned int getParameterCount() const;
00056 virtual void setParameterValue(unsigned int parameter, float value);
00057 virtual float getParameterValue(unsigned int parameter) const;
00058 virtual float getParameterDefault(unsigned int parameter) const;
00059 virtual int getParameterDisplayHint(unsigned int parameter) const;
00060
00061 virtual ParameterList getParameterDescriptors() const;
00062 virtual float getParameter(std::string) const;
00063 virtual void setParameter(std::string, float);
00064
00065 virtual size_t getBufferSize() const { return m_blockSize; }
00066 virtual size_t getAudioInputCount() const { return m_instanceCount * m_audioPortsIn.size(); }
00067 virtual size_t getAudioOutputCount() const { return m_instanceCount * m_audioPortsOut.size(); }
00068 virtual sample_t **getAudioInputBuffers() { return m_inputBuffers; }
00069 virtual sample_t **getAudioOutputBuffers() { return m_outputBuffers; }
00070
00071 virtual size_t getControlOutputCount() const { return m_controlPortsOut.size(); }
00072 virtual float getControlOutputValue(size_t n) const;
00073
00074 virtual bool isBypassed() const { return m_bypassed; }
00075 virtual void setBypassed(bool bypassed) { m_bypassed = bypassed; }
00076
00077 virtual size_t getLatency();
00078
00079 virtual void silence();
00080 virtual void setIdealChannelCount(size_t channels);
00081
00082 virtual std::string getType() const { return "LADSPA Real-Time Plugin"; }
00083
00084 protected:
00085
00086 friend class LADSPAPluginFactory;
00087
00088
00089
00090 LADSPAPluginInstance(RealTimePluginFactory *factory,
00091 int client,
00092 QString identifier,
00093 int position,
00094 unsigned long sampleRate,
00095 size_t blockSize,
00096 int idealChannelCount,
00097 const LADSPA_Descriptor* descriptor);
00098
00099 void init(int idealChannelCount = 0);
00100 void instantiate(unsigned long sampleRate);
00101 void cleanup();
00102 void activate();
00103 void deactivate();
00104
00105
00106
00107 void connectPorts();
00108
00109 int m_client;
00110 int m_position;
00111 std::vector<LADSPA_Handle> m_instanceHandles;
00112 size_t m_instanceCount;
00113 const LADSPA_Descriptor *m_descriptor;
00114
00115 std::vector<std::pair<unsigned long, LADSPA_Data*> > m_controlPortsIn;
00116 std::vector<std::pair<unsigned long, LADSPA_Data*> > m_controlPortsOut;
00117
00118 std::vector<int> m_audioPortsIn;
00119 std::vector<int> m_audioPortsOut;
00120
00121 size_t m_blockSize;
00122 sample_t **m_inputBuffers;
00123 sample_t **m_outputBuffers;
00124 bool m_ownBuffers;
00125 size_t m_sampleRate;
00126 float *m_latencyPort;
00127 bool m_run;
00128
00129 bool m_bypassed;
00130 };
00131
00132 #endif // _LADSPAPLUGININSTANCE_H_
00133