| @@ -115,7 +115,6 @@ LADSPAInfo::RescanPlugins(void) | |||||
| stringstream s; | stringstream s; | ||||
| s << n; | s << n; | ||||
| i->Name = name + " (" + s.str() + ")"; | i->Name = name + " (" + s.str() + ")"; | ||||
| cerr << " " << n << endl; | |||||
| n++; | n++; | ||||
| i++; | i++; | ||||
| } | } | ||||
| @@ -52,7 +52,7 @@ LADSPAPlugin::LADSPAPlugin() | |||||
| ClearPlugin(); | ClearPlugin(); | ||||
| m_Version=5; | |||||
| m_Version=6; | |||||
| m_PluginInfo.Name="LADSPA"; | m_PluginInfo.Name="LADSPA"; | ||||
| m_PluginInfo.Width=500; | m_PluginInfo.Width=500; | ||||
| @@ -76,15 +76,21 @@ LADSPAPlugin::LADSPAPlugin() | |||||
| m_OutData.InputPortNames = (char *)malloc(256 * m_MaxInputPortCount); | m_OutData.InputPortNames = (char *)malloc(256 * m_MaxInputPortCount); | ||||
| m_OutData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount); | m_OutData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount); | ||||
| m_OutData.InputPortValues = (PortValues *)calloc(m_MaxInputPortCount, sizeof(PortValues)); | m_OutData.InputPortValues = (PortValues *)calloc(m_MaxInputPortCount, sizeof(PortValues)); | ||||
| m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount); | |||||
| m_OutData.InputPortDefaults = (float *)calloc(m_MaxInputPortCount, sizeof(float)); | |||||
| m_InData.InputPortSettings = (PortSettings *)calloc(m_MaxInputPortCount, sizeof(PortSettings)); | |||||
| m_InData.InputPortDefaults = (float *)calloc(m_MaxInputPortCount, sizeof(float)); | |||||
| if (m_OutData.InputPortNames && | if (m_OutData.InputPortNames && | ||||
| m_OutData.InputPortDefaults && | |||||
| m_OutData.InputPortSettings && | m_OutData.InputPortSettings && | ||||
| m_InData.InputPortSettings) { | |||||
| m_InData.InputPortSettings && | |||||
| m_InData.InputPortDefaults) { | |||||
| m_AudioCH->RegisterData("GetInputPortNames", ChannelHandler::OUTPUT, m_OutData.InputPortNames, 256 * m_MaxInputPortCount); | m_AudioCH->RegisterData("GetInputPortNames", ChannelHandler::OUTPUT, m_OutData.InputPortNames, 256 * m_MaxInputPortCount); | ||||
| m_AudioCH->RegisterData("GetInputPortSettings", ChannelHandler::OUTPUT, m_OutData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount); | m_AudioCH->RegisterData("GetInputPortSettings", ChannelHandler::OUTPUT, m_OutData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount); | ||||
| m_AudioCH->RegisterData("GetInputPortValues", ChannelHandler::OUTPUT, m_OutData.InputPortValues, sizeof(PortValues) * m_MaxInputPortCount); | m_AudioCH->RegisterData("GetInputPortValues", ChannelHandler::OUTPUT, m_OutData.InputPortValues, sizeof(PortValues) * m_MaxInputPortCount); | ||||
| m_AudioCH->RegisterData("GetInputPortDefaults", ChannelHandler::OUTPUT, m_OutData.InputPortDefaults, sizeof(float) * m_MaxInputPortCount); | |||||
| m_AudioCH->RegisterData("SetInputPortSettings", ChannelHandler::INPUT, m_InData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount); | m_AudioCH->RegisterData("SetInputPortSettings", ChannelHandler::INPUT, m_InData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount); | ||||
| m_AudioCH->RegisterData("SetInputPortDefaults", ChannelHandler::INPUT, m_InData.InputPortDefaults, sizeof(float) * m_MaxInputPortCount); | |||||
| } else { | } else { | ||||
| cerr<<"Memory allocation error"<<endl; | cerr<<"Memory allocation error"<<endl; | ||||
| } | } | ||||
| @@ -145,16 +151,22 @@ void LADSPAPlugin::Execute() | |||||
| } | } | ||||
| } | } | ||||
| m_OutData.InputPortValues[n].Connected = true; | m_OutData.InputPortValues[n].Connected = true; | ||||
| m_PortDefault[n] = m_OutData.InputPortValues[n].Value; | |||||
| } | } | ||||
| else // Use default | else // Use default | ||||
| { | { | ||||
| for (int i=0; i<m_HostInfo->BUFSIZE; i++) { | for (int i=0; i<m_HostInfo->BUFSIZE; i++) { | ||||
| m_LADSPABufVec[n][i]=m_PortDefault[n]; | m_LADSPABufVec[n][i]=m_PortDefault[n]; | ||||
| } | } | ||||
| m_OutData.InputPortValues[n].Connected = false; | |||||
| if (m_OutData.InputPortValues[n].Connected) { | |||||
| m_OutData.InputPortValues[n].Connected = false; | |||||
| m_PortDefault[n] = m_OutData.InputPortValues[n].Value; | |||||
| } | |||||
| } | } | ||||
| // Copy values into OutData value buffer for display in GUI | // Copy values into OutData value buffer for display in GUI | ||||
| m_OutData.InputPortValues[n].Value = m_LADSPABufVec[n][0]; | m_OutData.InputPortValues[n].Value = m_LADSPABufVec[n][0]; | ||||
| // Ditto for default, which may have been set to value | |||||
| m_OutData.InputPortDefaults[n] = m_PortDefault[n]; | |||||
| } | } | ||||
| // run plugin | // run plugin | ||||
| @@ -386,6 +398,7 @@ void LADSPAPlugin::StreamIn(istream &s) | |||||
| ClearPlugin(); | ClearPlugin(); | ||||
| } | } | ||||
| } | } | ||||
| break; | |||||
| case 5: | case 5: | ||||
| { | { | ||||
| ClearPlugin(); | ClearPlugin(); | ||||
| @@ -714,6 +727,7 @@ void LADSPAPlugin::ClearPlugin(void) | |||||
| PlugDesc = NULL; | PlugDesc = NULL; | ||||
| } | } | ||||
| m_UniqueID = 0; | |||||
| m_PluginIndex = 0; | m_PluginIndex = 0; | ||||
| m_InputPortCount = 0; | m_InputPortCount = 0; | ||||
| strncpy(m_Name, "None\0", 5); | strncpy(m_Name, "None\0", 5); | ||||
| @@ -881,7 +895,7 @@ void LADSPAPlugin::SetGUIExports(void) | |||||
| m_OutData.InputPortSettings[n].Min = m_PortMin[n]; | m_OutData.InputPortSettings[n].Min = m_PortMin[n]; | ||||
| m_OutData.InputPortSettings[n].Max = m_PortMax[n]; | m_OutData.InputPortSettings[n].Max = m_PortMax[n]; | ||||
| m_OutData.InputPortSettings[n].Clamp = m_PortClamp[n]; | m_OutData.InputPortSettings[n].Clamp = m_PortClamp[n]; | ||||
| m_OutData.InputPortSettings[n].Default = m_PortDefault[n]; | |||||
| m_OutData.InputPortDefaults[n] = m_PortDefault[n]; | |||||
| } | } | ||||
| } | } | ||||
| @@ -891,6 +905,6 @@ void LADSPAPlugin::SetPortSettings(void) | |||||
| m_PortMin[n] = m_InData.InputPortSettings[n].Min; | m_PortMin[n] = m_InData.InputPortSettings[n].Min; | ||||
| m_PortMax[n] = m_InData.InputPortSettings[n].Max; | m_PortMax[n] = m_InData.InputPortSettings[n].Max; | ||||
| m_PortClamp[n] = m_InData.InputPortSettings[n].Clamp; | m_PortClamp[n] = m_InData.InputPortSettings[n].Clamp; | ||||
| m_PortDefault[n] = m_InData.InputPortSettings[n].Default; | |||||
| m_PortDefault[n] = m_InData.InputPortDefaults[n]; | |||||
| } | } | ||||
| } | } | ||||
| @@ -32,7 +32,6 @@ struct PortSettings | |||||
| float Min; | float Min; | ||||
| float Max; | float Max; | ||||
| bool Clamp; | bool Clamp; | ||||
| float Default; | |||||
| }; | }; | ||||
| struct PortValues | struct PortValues | ||||
| { | { | ||||
| @@ -66,9 +65,12 @@ public: | |||||
| settings.Min = m_PortMin[p]; | settings.Min = m_PortMin[p]; | ||||
| settings.Max = m_PortMax[p]; | settings.Max = m_PortMax[p]; | ||||
| settings.Clamp = m_PortClamp[p]; | settings.Clamp = m_PortClamp[p]; | ||||
| settings.Default = m_PortDefault[p]; | |||||
| return settings; | return settings; | ||||
| } | } | ||||
| float GetPortDefault(unsigned long p) | |||||
| { | |||||
| return m_PortDefault[p]; | |||||
| } | |||||
| enum GUICommands{NONE,SETPORTSETTINGS,SELECTPLUGIN,CLEARPLUGIN}; | enum GUICommands{NONE,SETPORTSETTINGS,SELECTPLUGIN,CLEARPLUGIN}; | ||||
| @@ -113,6 +115,7 @@ private: | |||||
| char *InputPortNames; | char *InputPortNames; | ||||
| PortSettings *InputPortSettings; | PortSettings *InputPortSettings; | ||||
| PortValues *InputPortValues; | PortValues *InputPortValues; | ||||
| float *InputPortDefaults; | |||||
| }; | }; | ||||
| // Data received from GUI | // Data received from GUI | ||||
| @@ -120,6 +123,7 @@ private: | |||||
| { | { | ||||
| unsigned long PluginIndex; | unsigned long PluginIndex; | ||||
| PortSettings *InputPortSettings; | PortSettings *InputPortSettings; | ||||
| float *InputPortDefaults; | |||||
| }; | }; | ||||
| OutputChannelData m_OutData; | OutputChannelData m_OutData; | ||||
| @@ -51,8 +51,10 @@ SpiralPluginGUI(w,h,o,ch) | |||||
| m_InData.InputPortNames = (char *)malloc(256 * m_InData.MaxInputPortCount); | m_InData.InputPortNames = (char *)malloc(256 * m_InData.MaxInputPortCount); | ||||
| m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_InData.MaxInputPortCount); | m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_InData.MaxInputPortCount); | ||||
| m_InData.InputPortValues = (PortValues *)calloc(m_InData.MaxInputPortCount, sizeof(PortValues)); | m_InData.InputPortValues = (PortValues *)calloc(m_InData.MaxInputPortCount, sizeof(PortValues)); | ||||
| m_InData.InputPortDefaults = (float *)calloc(m_InData.MaxInputPortCount, sizeof(float)); | |||||
| if (!(m_InData.InputPortNames && m_InData.InputPortSettings)) { | |||||
| if (!(m_InData.InputPortNames && m_InData.InputPortSettings && | |||||
| m_InData.InputPortValues && m_InData.InputPortDefaults)) { | |||||
| cerr<<"Memory allocation error\n"<<endl; | cerr<<"Memory allocation error\n"<<endl; | ||||
| } | } | ||||
| @@ -129,32 +131,11 @@ LADSPAPluginGUI::~LADSPAPluginGUI(void) | |||||
| { | { | ||||
| if (m_InData.InputPortNames) free(m_InData.InputPortNames); | if (m_InData.InputPortNames) free(m_InData.InputPortNames); | ||||
| if (m_InData.InputPortSettings) free(m_InData.InputPortSettings); | if (m_InData.InputPortSettings) free(m_InData.InputPortSettings); | ||||
| if (m_InData.InputPortValues) free(m_InData.InputPortValues); | |||||
| if (m_InData.InputPortDefaults) free(m_InData.InputPortDefaults); | |||||
| Fl::check(); | Fl::check(); | ||||
| } | } | ||||
| void LADSPAPluginGUI::UpdatePortDisplay(int n, PortValues pv) | |||||
| { | |||||
| // Need to show that a connection is present | |||||
| // regardless of Refresh being set | |||||
| if (pv.Connected) { | |||||
| // Disable | |||||
| m_PortDefault[n]->readonly(1); | |||||
| m_PortDefault[n]->color(FL_BACKGROUND_COLOR); | |||||
| } else { | |||||
| // Enable | |||||
| m_PortDefault[n]->readonly(0); | |||||
| m_PortDefault[n]->color(FL_BACKGROUND2_COLOR); | |||||
| } | |||||
| m_PortDefault[n]->redraw(); | |||||
| // Only update values if Refresh is set | |||||
| if (!m_UpdateInputs->value()) return; | |||||
| char temp[256]; | |||||
| sprintf(temp,"%.4f",pv.Value); | |||||
| m_PortOutput[n]->value(temp); | |||||
| } | |||||
| void LADSPAPluginGUI::SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt) | void LADSPAPluginGUI::SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt) | ||||
| { | { | ||||
| char temp[256]; | char temp[256]; | ||||
| @@ -257,6 +238,40 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info) | |||||
| m_InputScroll->redraw(); | m_InputScroll->redraw(); | ||||
| } | } | ||||
| void LADSPAPluginGUI::UpdatePortDisplay(int n, PortValues pv, float defolt) | |||||
| { | |||||
| char temp[256]; | |||||
| // Need to show that a connection is present | |||||
| // regardless of Refresh being set | |||||
| if (!(pv.Connected && m_PortDefault[n]->readonly())) { | |||||
| if (pv.Connected) { | |||||
| // Disable | |||||
| m_PortDefault[n]->readonly(1); | |||||
| m_PortDefault[n]->color(FL_BACKGROUND_COLOR); | |||||
| sprintf(temp,"%.4f",defolt); | |||||
| m_PortDefault[n]->value(temp); | |||||
| } else { | |||||
| // Enable | |||||
| m_PortDefault[n]->readonly(0); | |||||
| m_PortDefault[n]->color(FL_BACKGROUND2_COLOR); | |||||
| } | |||||
| m_PortDefault[n]->redraw(); | |||||
| } | |||||
| // Only update values if Refresh is set | |||||
| if (!m_UpdateInputs->value()) return; | |||||
| sprintf(temp,"%.4f",pv.Value); | |||||
| m_PortOutput[n]->value(temp); | |||||
| if (pv.Connected) { | |||||
| sprintf(temp,"%.4f",defolt); | |||||
| m_PortDefault[n]->value(temp); | |||||
| } | |||||
| } | |||||
| void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) | void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) | ||||
| { | { | ||||
| LADSPAPlugin* Plugin = (LADSPAPlugin*)o; | LADSPAPlugin* Plugin = (LADSPAPlugin*)o; | ||||
| @@ -266,12 +281,14 @@ void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) | |||||
| unsigned long n = Plugin->GetInputPortCount(); | unsigned long n = Plugin->GetInputPortCount(); | ||||
| const char *name; | const char *name; | ||||
| PortSettings settings; | PortSettings settings; | ||||
| float defolt; | |||||
| for (unsigned long p = 0; p < n; p++) { | for (unsigned long p = 0; p < n; p++) { | ||||
| name = Plugin->GetPortName(p); | name = Plugin->GetPortName(p); | ||||
| settings = Plugin->GetPortSettings(p); | settings = Plugin->GetPortSettings(p); | ||||
| defolt = Plugin->GetPortDefault(p); | |||||
| AddPortInfo(name); | AddPortInfo(name); | ||||
| SetPortSettings(p, settings.Min, settings.Max, settings.Clamp, settings.Default); | |||||
| SetPortSettings(p, settings.Min, settings.Max, settings.Clamp, defolt); | |||||
| } | } | ||||
| } | } | ||||
| @@ -280,11 +297,12 @@ void LADSPAPluginGUI::Update(void) | |||||
| m_GUICH->GetData("GetPluginIndex", &(m_InData.PluginIndex)); | m_GUICH->GetData("GetPluginIndex", &(m_InData.PluginIndex)); | ||||
| m_GUICH->GetData("GetInputPortCount", &(m_InData.InputPortCount)); | m_GUICH->GetData("GetInputPortCount", &(m_InData.InputPortCount)); | ||||
| m_GUICH->GetData("GetInputPortValues", m_InData.InputPortValues); | m_GUICH->GetData("GetInputPortValues", m_InData.InputPortValues); | ||||
| m_GUICH->GetData("GetInputPortDefaults", m_InData.InputPortDefaults); | |||||
| m_Browser->value(m_InData.PluginIndex); | m_Browser->value(m_InData.PluginIndex); | ||||
| for (unsigned long n=0; n < m_InData.InputPortCount; n++) { | for (unsigned long n=0; n < m_InData.InputPortCount; n++) { | ||||
| UpdatePortDisplay(n, m_InData.InputPortValues[n]); | |||||
| UpdatePortDisplay(n, m_InData.InputPortValues[n], m_InData.InputPortDefaults[n]); | |||||
| } | } | ||||
| } | } | ||||
| @@ -308,6 +326,7 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) | |||||
| m_GUICH->GetData("GetInputPortCount", &(m_InData.InputPortCount)); | m_GUICH->GetData("GetInputPortCount", &(m_InData.InputPortCount)); | ||||
| m_GUICH->GetData("GetInputPortNames", m_InData.InputPortNames); | m_GUICH->GetData("GetInputPortNames", m_InData.InputPortNames); | ||||
| m_GUICH->GetData("GetInputPortSettings", m_InData.InputPortSettings); | m_GUICH->GetData("GetInputPortSettings", m_InData.InputPortSettings); | ||||
| m_GUICH->GetData("GetInputPortDefaults", m_InData.InputPortDefaults); | |||||
| SetName((const char *)m_InData.Name); | SetName((const char *)m_InData.Name); | ||||
| SetMaker((const char *)m_InData.Maker); | SetMaker((const char *)m_InData.Maker); | ||||
| @@ -320,7 +339,7 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) | |||||
| SetPortSettings(n, m_InData.InputPortSettings[n].Min, | SetPortSettings(n, m_InData.InputPortSettings[n].Min, | ||||
| m_InData.InputPortSettings[n].Max, | m_InData.InputPortSettings[n].Max, | ||||
| m_InData.InputPortSettings[n].Clamp, | m_InData.InputPortSettings[n].Clamp, | ||||
| m_InData.InputPortSettings[n].Default); | |||||
| m_InData.InputPortDefaults[n]); | |||||
| } | } | ||||
| redraw(); | redraw(); | ||||
| @@ -357,11 +376,12 @@ inline void LADSPAPluginGUI::cb_PortSettings_i(Fl_Button* o, void* v) | |||||
| for (vector<Fl_Input*>::iterator i=m_PortDefault.begin(); | for (vector<Fl_Input*>::iterator i=m_PortDefault.begin(); | ||||
| i!=m_PortDefault.end(); i++) | i!=m_PortDefault.end(); i++) | ||||
| { | { | ||||
| m_InData.InputPortSettings[n].Default = atof((*i)->value()); | |||||
| m_InData.InputPortDefaults[n] = atof((*i)->value()); | |||||
| n++; | n++; | ||||
| } | } | ||||
| m_GUICH->SetData("SetInputPortSettings", m_InData.InputPortSettings); | m_GUICH->SetData("SetInputPortSettings", m_InData.InputPortSettings); | ||||
| m_GUICH->SetData("SetInputPortDefaults", m_InData.InputPortDefaults); | |||||
| m_GUICH->SetCommand(LADSPAPlugin::SETPORTSETTINGS); | m_GUICH->SetCommand(LADSPAPlugin::SETPORTSETTINGS); | ||||
| } | } | ||||
| void LADSPAPluginGUI::cb_PortSettings(Fl_Button* o, void* v) | void LADSPAPluginGUI::cb_PortSettings(Fl_Button* o, void* v) | ||||
| @@ -61,7 +61,7 @@ public: | |||||
| void ClearPortInfo(); | void ClearPortInfo(); | ||||
| void AddPortInfo(const char *Info); | void AddPortInfo(const char *Info); | ||||
| void UpdatePortDisplay(int n, PortValues pv); | |||||
| void UpdatePortDisplay(int n, PortValues pv, float defolt); | |||||
| void SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt); | void SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt); | ||||
| private: | private: | ||||
| @@ -105,6 +105,7 @@ private: | |||||
| char *InputPortNames; | char *InputPortNames; | ||||
| PortSettings *InputPortSettings; | PortSettings *InputPortSettings; | ||||
| PortValues *InputPortValues; | PortValues *InputPortValues; | ||||
| float *InputPortDefaults; | |||||
| }; | }; | ||||
| InChannelData m_InData; | InChannelData m_InData; | ||||