diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C index 4f91840..cbc9e6d 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C @@ -14,85 +14,14 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ +*/ #include "LADSPAPlugin.h" #include "LADSPAPluginGUI.h" +#include "LADSPAInfo.h" #include #include #include #include "SpiralIcon.xpm" -#include "utils.h" -#include - -//////////////////////////////////////////// - -/* FIXME: No matter what, I can't let this as it!! */ -static LADSPAPlugin * lg = NULL; - -void describePluginLibrary(const char * pcFullFilename, - void * pvPluginHandle, - LADSPA_Descriptor_Function pfDescriptorFunction) -{ - const LADSPA_Descriptor * psDescriptor; - long lIndex; - unsigned long lPluginIndex; - unsigned long lPortIndex; - unsigned long lLength; - LADSPA_PortRangeHintDescriptor iHintDescriptor; - LADSPA_Data fBound; - -#define testcond(c,s) { \ - if (!(c)) { \ - cerr << (s); \ - failure = 1; \ - } \ -} - for (lIndex = 0; (psDescriptor = pfDescriptorFunction(lIndex)) != NULL; lIndex++) { - int failure = 0; - testcond(!LADSPA_IS_REALTIME(psDescriptor->Properties), "ERROR: PLUGIN MUST RUN REAL TIME.\n"); - testcond(psDescriptor->instantiate, "ERROR: PLUGIN HAS NO INSTANTIATE FUNCTION.\n"); - testcond(psDescriptor->connect_port, "ERROR: PLUGIN HAS NO CONNECT_PORT FUNCTION.\n"); - testcond(psDescriptor->run, "ERROR: PLUGIN HAS NO RUN FUNCTION.\n"); - testcond(!(psDescriptor->run_adding != 0 && psDescriptor->set_run_adding_gain == 0), - "ERROR: PLUGIN HAS RUN_ADDING FUNCTION BUT NOT SET_RUN_ADDING_GAIN.\n"); - testcond(!(psDescriptor->run_adding == 0 && psDescriptor->set_run_adding_gain != 0), - "ERROR: PLUGIN HAS SET_RUN_ADDING_GAIN FUNCTION BUT NOT RUN_ADDING.\n"); - testcond(psDescriptor->cleanup, "ERROR: PLUGIN HAS NO CLEANUP FUNCTION.\n"); - testcond(!LADSPA_IS_INPLACE_BROKEN(psDescriptor->Properties), - "ERROR: THIS PLUGIN CANNOT USE IN-PLACE PROCESSING.\n"); - testcond(psDescriptor->PortCount, "ERROR: PLUGIN HAS NO PORTS.\n"); - - if (!failure) { - LPluginInfo pi; - pi.Filename = pcFullFilename; - pi.Label = psDescriptor->Label; - pi.Name = psDescriptor->Name; - pi.InputPortCount = getPortCountByType(psDescriptor, LADSPA_PORT_INPUT); - - // ARGH! I really can't stand this ugly hack - lg->m_LADSPAList.push_back(pi); - } else { - cerr << "Plugin ignored...\n\n"; - } - } - - dlclose(pvPluginHandle); -} - -void LADSPAPlugin::LoadPluginList(void) -{ - m_LADSPAList.clear(); - - m_CurrentPlugin.Name = ""; - m_CurrentPlugin.Filename = ""; - m_CurrentPlugin.Label = ""; - - lg = this; - LADSPAPluginSearch(describePluginLibrary); - lg = NULL; - - sort(m_LADSPAList.begin(), m_LADSPAList.end(), LPluginInfoSortAsc()); -} //////////////////////////////////////////////////// @@ -121,7 +50,7 @@ PlugDesc(NULL), m_Gain(1.0f), m_Amped(false) { - m_Version=3; + m_Version=4; m_PluginInfo.Name="LADSPA"; m_PluginInfo.Width=600; @@ -130,18 +59,9 @@ m_Amped(false) m_PluginInfo.NumOutputs=1; m_PluginInfo.PortTips.push_back("Nuffink yet"); - m_MaxInputPortCount = 0; + m_MaxInputPortCount = m_LADSPAInfo.GetMaxInputPortCount(); m_InputPortCount = 0; - LoadPluginList(); - -// Examine plugin list and find highest input port count - for (vector::iterator i = m_LADSPAList.begin(); - i != m_LADSPAList.end(); i++) { - if ((*i).InputPortCount > m_MaxInputPortCount) - m_MaxInputPortCount = (*i).InputPortCount; - } - // For receiving from GUI m_AudioCH->Register("SetGain",&(m_InData.Gain)); m_AudioCH->Register("SetAmped",&(m_InData.Amped)); @@ -155,7 +75,7 @@ m_Amped(false) m_OutData.InputPortNames = (char *)malloc(256 * m_MaxInputPortCount); m_OutData.InputPortRanges = (PortRange *)malloc(sizeof(PortRange) * m_MaxInputPortCount); - m_OutData.InputPortValues = (float *)malloc(sizeof(float) * m_MaxInputPortCount); + m_OutData.InputPortValues = (float *)calloc(m_MaxInputPortCount, sizeof(float)); m_InData.InputPortRanges = (PortRange *)malloc(sizeof(PortRange) * m_MaxInputPortCount); if (m_OutData.InputPortNames && @@ -190,7 +110,7 @@ PluginInfo &LADSPAPlugin::Initialise(const HostInfo *Host) SpiralGUIType *LADSPAPlugin::CreateGUI() { return new LADSPAPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this, m_AudioCH, m_HostInfo, m_LADSPAList); + this, m_AudioCH, m_HostInfo, m_LADSPAInfo.GetPluginList()); } void LADSPAPlugin::Execute() @@ -262,9 +182,14 @@ void LADSPAPlugin::ExecuteCommands() { switch(m_AudioCH->GetCommand()) { - case (SETRANGES) : SetPortInfo(); break; - case (SELECTPLUGIN) : UpdatePlugin(m_InData.PluginIndex); break; - }; + case (SETRANGES) : + SetPortInfo(); + break; + case (SELECTPLUGIN) : + vector pe = m_LADSPAInfo.GetPluginList(); + UpdatePlugin(pe[m_InData.PluginIndex].UniqueID); + break; + } } } @@ -274,8 +199,34 @@ void LADSPAPlugin::StreamOut(ostream &s) switch (m_Version) { + case 4: + { + s<::iterator i=m_PortMin.begin(); + i!=m_PortMin.end(); i++) + { + s<<*i<<" "; + } + for (vector::iterator i=m_PortMax.begin(); + i!=m_PortMax.end(); i++) + { + s<<*i<<" "; + } + for (vector::iterator i=m_PortClamp.begin(); + i!=m_PortClamp.end(); i++) + { + s<<*i<<" "; + } + } + break; case 3: { +// Here for consistency - should never actually happen, as +// version is always 4! s<>m_Gain; + + unsigned long UniqueID; + s>>UniqueID; + int PortCount; + s>>PortCount; + float min,max; + bool clamp; + + for (int n=0; n>min; + m_PortMin.push_back(min); + } + + for (int n=0; n>max; + m_PortMax.push_back(max); + } + for (int n=0; n>clamp; + m_PortClamp.push_back(clamp); + } + + UpdatePlugin(UniqueID, false); + + m_CurrentPlugin.Ports.reserve(PortCount); + + for (int n=0; n>m_Gain; @@ -368,11 +358,13 @@ void LADSPAPlugin::StreamIn(istream &s) if (Filename!="None") { - UpdatePlugin(Filename.c_str(), Label.c_str(), false); + // Get Unique ID from filename and label + unsigned long id = m_LADSPAInfo.GetIDFromFilenameAndLabel(Filename, Label); + if (id) UpdatePlugin(id, false); } m_CurrentPlugin.Ports.reserve(PortCount); - + for (int n=0; n>m_Gain; - + string Filename,Label; s>>Filename>>Label; if (Filename!="None") { - UpdatePlugin(Filename.c_str(), Label.c_str()); + // Get Unique ID from filename and label + unsigned long id = m_LADSPAInfo.GetIDFromFilenameAndLabel(Filename, Label); + if (id) UpdatePlugin(id, false); } } break; } } -bool LADSPAPlugin::UpdatePlugin(int n) -{ - return UpdatePlugin(m_LADSPAList[n].Filename.c_str(),m_LADSPAList[n].Label.c_str()); -} - -bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool PortClampReset) +bool LADSPAPlugin::UpdatePlugin(unsigned long UniqueID, bool PortClampReset) { // first call with same info, to clear the ports UpdatePluginInfoWithHost(); - - if (PlugHandle) { + + if (PlugDesc) { if (PlugDesc->deactivate) PlugDesc->deactivate(PlugInstHandle); PlugDesc->cleanup(PlugInstHandle); - unloadLADSPAPluginLibrary(PlugHandle); - PlugHandle = 0; } - if ((PlugHandle = loadLADSPAPluginLibrary(filename))) { - if (!(PlugDesc = findLADSPAPluginDescriptor(PlugHandle, filename, label))) { - unloadLADSPAPluginLibrary(PlugHandle); - PlugHandle = 0; - } else { - /* Now we can instantiate the LADSPA Plugin and wire it to the datas bytes */ - if (!(PlugInstHandle = PlugDesc->instantiate(PlugDesc, m_HostInfo->SAMPLERATE))) { - cerr << "LADSPA Plugin error to instantiate...\n"; - unloadLADSPAPluginLibrary(PlugHandle); - PlugDesc = 0; - PlugHandle = 0; - return 0; - } + PlugDesc = m_LADSPAInfo.GetDescriptorByID(UniqueID, true); + + if (PlugDesc) { + // Create instance + if (!(PlugInstHandle = PlugDesc->instantiate(PlugDesc, m_HostInfo->SAMPLERATE))) { + cerr << "WARNING: Could not instantiate plugin " << UniqueID << endl; + m_LADSPAInfo.UnloadLibraryByID(UniqueID); + PlugDesc = 0; + return 0; + } - m_PluginInfo.NumInputs=getPortCountByType(PlugDesc, LADSPA_PORT_INPUT); - m_PluginInfo.NumOutputs=getPortCountByType(PlugDesc, LADSPA_PORT_OUTPUT); + // Find number of input and output ports + m_PluginInfo.NumInputs = m_PluginInfo.NumOutputs = 0; + for (unsigned long i = 0; i < PlugDesc->PortCount; i++) { + if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[i])) { + m_PluginInfo.NumInputs++; + } else if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[i])) { + m_PluginInfo.NumOutputs++; + } + } ///////////////////////////////// // LADSPA Buffers - for(vector::iterator i=m_LADSPABufVec.begin(); - i!=m_LADSPABufVec.end(); i++) - { - if (*i) delete[] (*i); - } - m_LADSPABufVec.clear(); + for(vector::iterator i=m_LADSPABufVec.begin(); + i!=m_LADSPABufVec.end(); i++) + { + if (*i) delete[] (*i); + } + m_LADSPABufVec.clear(); - unsigned long c=0; - for (unsigned int n=0; nPortCount; n++) + unsigned long c=0; + for (unsigned int n=0; nPortCount; n++) + { + if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[n])) { - if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[n])) - { - LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; - m_LADSPABufVec.push_back(NewPort); - PlugDesc->connect_port(PlugInstHandle, n, m_LADSPABufVec[c]); - m_PortID.push_back(n); - c++; - } + LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; + m_LADSPABufVec.push_back(NewPort); + PlugDesc->connect_port(PlugInstHandle, n, m_LADSPABufVec[c]); + m_PortID.push_back(n); + c++; } + } - for (unsigned int n=0; nPortCount; n++) + for (unsigned int n=0; nPortCount; n++) + { + if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[n])) { - if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[n])) - { - LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; - m_LADSPABufVec.push_back(NewPort); - PlugDesc->connect_port(PlugInstHandle, n, m_LADSPABufVec[c]); - m_PortID.push_back(n); - c++; - } + LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; + m_LADSPABufVec.push_back(NewPort); + PlugDesc->connect_port(PlugInstHandle, n, m_LADSPABufVec[c]); + m_PortID.push_back(n); + c++; } + } - // activate the plugin now - if (PlugDesc->activate) - PlugDesc->activate(PlugInstHandle); + // activate the plugin now + if (PlugDesc->activate) + PlugDesc->activate(PlugInstHandle); ///////////////////////////////// // SSM Buffers - // Clear i/o buffers - RemoveAllInputs(); - RemoveAllOutputs(); + // Clear i/o buffers + RemoveAllInputs(); + RemoveAllOutputs(); - // Reallocate the i/o buffers required - for (int n=0; nName; - m_CurrentPlugin.Maker=PlugDesc->Maker; - m_CurrentPlugin.Filename=filename; - m_CurrentPlugin.Label=label; + m_CurrentPlugin.UniqueID = PlugDesc->UniqueID; + m_CurrentPlugin.Name=PlugDesc->Name; + m_CurrentPlugin.Maker=PlugDesc->Maker; + + m_CurrentPlugin.Ports.clear(); - m_CurrentPlugin.Ports.clear(); - m_PluginInfo.PortTips.clear(); + m_PluginInfo.PortTips.clear(); - string desc; - c=0; - for (unsigned int i = 0; i < PlugDesc->PortCount; i++) + string desc; + c=0; + for (unsigned int i = 0; i < PlugDesc->PortCount; i++) + { + if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[i])) { - if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[i])) - { - desc = string(PlugDesc->PortNames[i]) + - (LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); - m_PluginInfo.PortTips.push_back(desc.c_str()); + desc = string(PlugDesc->PortNames[i]) + + (LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); + m_PluginInfo.PortTips.push_back(desc.c_str()); - LPluginInfo::LPortDetails PortDetails; - PortDetails.Name=m_PluginInfo.PortTips[c].c_str(); - m_CurrentPlugin.Ports.push_back(PortDetails); + LPluginInfo::LPortDetails PortDetails; + PortDetails.Name=m_PluginInfo.PortTips[c].c_str(); + m_CurrentPlugin.Ports.push_back(PortDetails); - c++; - } + c++; } + } - for (unsigned int i = 0; i < PlugDesc->PortCount; i++) - { - if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[i])) { + for (unsigned int i = 0; i < PlugDesc->PortCount; i++) + { + if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[i])) { - desc = string(PlugDesc->PortNames[i]) + - (LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); + desc = string(PlugDesc->PortNames[i]) + + (LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); - m_PluginInfo.PortTips.push_back(desc.c_str()); - } + m_PluginInfo.PortTips.push_back(desc.c_str()); } + } - UpdatePluginInfoWithHost(); + UpdatePluginInfoWithHost(); - if (PortClampReset) + if (PortClampReset) + { + m_PortMin.clear(); + m_PortMax.clear(); + m_PortClamp.clear(); + + for (int n=0; nPortRangeHints[Port].HintDescriptor; + if (LADSPA_IS_HINT_BOUNDED_BELOW(HintDesc)) { - float Max=1.0f, Min=-1.0f; - int Port=m_PortID[n]; - - // Get the bounding hints for the port - LADSPA_PortRangeHintDescriptor HintDesc=PlugDesc->PortRangeHints[Port].HintDescriptor; - if (LADSPA_IS_HINT_BOUNDED_BELOW(HintDesc)) + Min=PlugDesc->PortRangeHints[Port].LowerBound; + if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) { - Min=PlugDesc->PortRangeHints[Port].LowerBound; - if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) - { - Min*=m_HostInfo->SAMPLERATE; - } + Min*=m_HostInfo->SAMPLERATE; } - if (LADSPA_IS_HINT_BOUNDED_ABOVE(HintDesc)) + } + if (LADSPA_IS_HINT_BOUNDED_ABOVE(HintDesc)) + { + Max=PlugDesc->PortRangeHints[Port].UpperBound; + if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) { - Max=PlugDesc->PortRangeHints[Port].UpperBound; - if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) - { - Max*=m_HostInfo->SAMPLERATE; - } + Max*=m_HostInfo->SAMPLERATE; } + } - m_PortMin.push_back(Min); - m_PortMax.push_back(Max); + m_PortMin.push_back(Min); + m_PortMax.push_back(Max); // PortClamp defaults to true - m_PortClamp.push_back(true); + m_PortClamp.push_back(true); - m_CurrentPlugin.Ports[n].Min=Min; - m_CurrentPlugin.Ports[n].Max=Max; - m_CurrentPlugin.Ports[n].Clamped=true; - } + m_CurrentPlugin.Ports[n].Min=Min; + m_CurrentPlugin.Ports[n].Max=Max; + m_CurrentPlugin.Ports[n].Clamped=true; } + } - m_InputPortCount = m_PluginInfo.NumInputs; - int lbl_length; - char *lbl_start; - - lbl_length = m_CurrentPlugin.Name.size(); - lbl_length = lbl_length > 255 ? 255 : lbl_length; - strncpy(m_Name, m_CurrentPlugin.Name.substr(0, lbl_length).c_str(), lbl_length); - m_Name[lbl_length] = '\0'; + m_InputPortCount = m_PluginInfo.NumInputs; + int lbl_length; + char *lbl_start; - lbl_length = m_CurrentPlugin.Maker.size(); - lbl_length = lbl_length > 255 ? 255 : lbl_length; - strncpy(m_Maker, m_CurrentPlugin.Maker.substr(0, lbl_length).c_str(), lbl_length); - m_Maker[lbl_length] = '\0'; + lbl_length = m_CurrentPlugin.Name.size(); + lbl_length = lbl_length > 255 ? 255 : lbl_length; + strncpy(m_Name, m_CurrentPlugin.Name.substr(0, lbl_length).c_str(), lbl_length); + m_Name[lbl_length] = '\0'; - lbl_start = m_OutData.InputPortNames; - for (unsigned long n = 0; n < m_InputPortCount; n++) { - lbl_length = m_CurrentPlugin.Ports[n].Name.size(); - lbl_length = lbl_length > 255 ? 255 : lbl_length; - strncpy(lbl_start, m_CurrentPlugin.Ports[n].Name.substr(0, lbl_length).c_str(), lbl_length); - lbl_start[lbl_length] = '\0'; - lbl_start += 256; + lbl_length = m_CurrentPlugin.Maker.size(); + lbl_length = lbl_length > 255 ? 255 : lbl_length; + strncpy(m_Maker, m_CurrentPlugin.Maker.substr(0, lbl_length).c_str(), lbl_length); + m_Maker[lbl_length] = '\0'; - m_OutData.InputPortRanges[n].Min = m_CurrentPlugin.Ports[n].Min; - m_OutData.InputPortRanges[n].Max = m_CurrentPlugin.Ports[n].Max; - m_OutData.InputPortRanges[n].Clamp = m_CurrentPlugin.Ports[n].Clamped; - } + lbl_start = m_OutData.InputPortNames; + for (unsigned long n = 0; n < m_InputPortCount; n++) { + lbl_length = m_CurrentPlugin.Ports[n].Name.size(); + lbl_length = lbl_length > 255 ? 255 : lbl_length; + strncpy(lbl_start, m_CurrentPlugin.Ports[n].Name.substr(0, lbl_length).c_str(), lbl_length); + lbl_start[lbl_length] = '\0'; + lbl_start += 256; - return true; + m_OutData.InputPortRanges[n].Min = m_PortMin[n]; + m_OutData.InputPortRanges[n].Max = m_PortMax[n]; + m_OutData.InputPortRanges[n].Clamp = m_PortClamp[n]; } + + return true; } cerr << "Error loading LADSPA Plugin.\n"; diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h index b42ee66..2138f15 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h @@ -17,9 +17,9 @@ */ #include "../SpiralPlugin.h" +#include "LADSPAInfo.h" #include #include "ladspa.h" -#include "utils.h" #ifndef LADSPAPLUGIN #define LADSPAPLUGIN @@ -28,6 +28,7 @@ static const unsigned int NUM_PORTS = 8; class LPluginInfo { public: + unsigned long UniqueID; string Filename; string Label; string Name; @@ -96,8 +97,7 @@ public: private: void UpdatePortRange(void); - bool UpdatePlugin(int n); - bool UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true); + bool UpdatePlugin(unsigned long UniqueID, bool PortClampReset=true); void SetPortInfo(void); friend void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, LADSPA_Descriptor_Function pfDescriptorFunction); @@ -114,7 +114,11 @@ private: vector m_PortMax; vector m_PortClamp; + int m_Version; + // our database of ladspa plugins + LADSPAInfo m_LADSPAInfo; + vector m_LADSPAList; LPluginInfo m_CurrentPlugin; @@ -125,7 +129,6 @@ private: char m_Name[256]; char m_Maker[256]; - // Data sent to GUI struct OutputChannelData { diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C index f1b38d3..345bb28 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C @@ -18,6 +18,7 @@ */ #include "LADSPAPluginGUI.h" +#include "LADSPAInfo.h" #include #include #include "ladspa.h" @@ -25,18 +26,19 @@ #include #include #include -#include "utils.h" static const int GUI_COLOUR = 179; static const int GUIBG_COLOUR = 144; static const int GUIBG2_COLOUR = 145; -LADSPAPluginGUI::LADSPAPluginGUI(int w, int h,LADSPAPlugin *o, ChannelHandler *ch,const HostInfo *Info, const vector &PVec) : +LADSPAPluginGUI::LADSPAPluginGUI(int w, int h, + LADSPAPlugin *o, + ChannelHandler *ch, + const HostInfo *Info, + const vector &PVec) : SpiralPluginGUI(w,h,o,ch) { - PluginList=PVec; - - m_Filename="None"; + PluginList = PVec; int Width=20; int Height=100; @@ -44,10 +46,10 @@ SpiralPluginGUI(w,h,o,ch) m_Browser= new Fl_Hold_Browser(5,20,290,260,"LADSPA Plugins"); m_Browser->callback((Fl_Callback*)cb_Select); - for (vector::iterator i=PluginList.begin(); + for (vector::iterator i=PluginList.begin(); i!=PluginList.end(); i++) { - m_Browser->add((*i).Name.c_str()); + m_Browser->add(i->Name.c_str()); } // Get maximum input port count @@ -56,7 +58,7 @@ SpiralPluginGUI(w,h,o,ch) // Set up buffers for data transfer via ChannelHandler m_InData.InputPortNames = (char *)malloc(256 * m_InData.MaxInputPortCount); m_InData.InputPortRanges = (PortRange *)malloc(sizeof(PortRange) * m_InData.MaxInputPortCount); - m_InData.InputPortValues = (float *)malloc(sizeof(float) * m_InData.MaxInputPortCount); + m_InData.InputPortValues = (float *)calloc(m_InData.MaxInputPortCount, sizeof(float)); if (!(m_InData.InputPortNames && m_InData.InputPortRanges)) { cerr<<"Memory allocation error\n"<value()-1].Filename; - m_Label=PluginList[o->value()-1].Label; - m_GUICH->Set("SetPluginIndex",o->value()-1); m_GUICH->SetCommand(LADSPAPlugin::SELECTPLUGIN); diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h index c2625ea..a121196 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h @@ -34,6 +34,7 @@ #include #include "LADSPAPlugin.h" +#include "LADSPAInfo.h" #include "../SpiralPluginGUI.h" #ifndef LADSPAGUI @@ -47,7 +48,11 @@ class LADSPAPluginGUI : public SpiralPluginGUI { public: - LADSPAPluginGUI(int w, int h, LADSPAPlugin *o, ChannelHandler *ch, const HostInfo *Info, const vector &PVec); + LADSPAPluginGUI(int w, int h, + LADSPAPlugin *o, + ChannelHandler *ch, + const HostInfo *Info, + const std::vector &PVec); ~LADSPAPluginGUI(); virtual void UpdateValues(SpiralPlugin *o); @@ -62,11 +67,6 @@ public: void SetMinMax(int n, float min, float max, bool clamp); void GetMinMax(int n, float &min, float &max, bool &clamp); - string GetFilename(void) { return m_Filename; } - string GetLabel(void) { return m_Label; } - void SetFilename(string s) { m_Filename=s; } - void SetLabel(string s) { m_Label=s; } - private: LPluginInfo m_CurrentPlugin; @@ -79,22 +79,19 @@ private: Fl_Button *m_UpdateInputs; Fl_Button *m_UpdateMinMax; Fl_Button *m_PowerAmp; - vector m_PortOutput; - vector m_PortMin; - vector m_PortMax; - vector m_PortClamp; + std::vector m_PortOutput; + std::vector m_PortMin; + std::vector m_PortMax; + std::vector m_PortClamp; - vector PluginList; + std::vector PluginList; // this is needed as fltk seems to crash if you delete // the pack, is won't delete the children properly??? - vector m_PackVec; + std::vector m_PackVec; int inited; - string m_Filename; - string m_Label; - inline void cb_Select_i(Fl_Hold_Browser* o); static void cb_Select(Fl_Hold_Browser* o); inline void cb_Gain_i(Fl_Knob* o, void* v);