fixed scope and meter accordingly to properly update data and size.master
| @@ -214,7 +214,7 @@ void ChannelHandler::GetData(const string &ID, void *data) | |||||
| pthread_mutex_unlock(m_Mutex); | pthread_mutex_unlock(m_Mutex); | ||||
| } | } | ||||
| void ChannelHandler::UpdateDataSize(const std::string &ID, int size) | |||||
| void ChannelHandler::ReplaceData(const std::string &ID, void *pData, int size) | |||||
| { | { | ||||
| map<string,Channel*>::iterator i=m_ChannelMap.find(ID); | map<string,Channel*>::iterator i=m_ChannelMap.find(ID); | ||||
| if (i==m_ChannelMap.end()) | if (i==m_ChannelMap.end()) | ||||
| @@ -224,6 +224,7 @@ void ChannelHandler::UpdateDataSize(const std::string &ID, int size) | |||||
| } | } | ||||
| pthread_mutex_lock(m_Mutex); | pthread_mutex_lock(m_Mutex); | ||||
| i->second->data = pData; | |||||
| i->second->size = size; | i->second->size = size; | ||||
| free(i->second->data_buf); | free(i->second->data_buf); | ||||
| i->second->data_buf = malloc(size); | i->second->data_buf = malloc(size); | ||||
| @@ -79,7 +79,7 @@ public: | |||||
| void Set(const std::string &ID, const float& s) { SetData(ID,(void*)&s); } | void Set(const std::string &ID, const float& s) { SetData(ID,(void*)&s); } | ||||
| void Set(const std::string &ID, const double& s) { SetData(ID,(void*)&s); } | void Set(const std::string &ID, const double& s) { SetData(ID,(void*)&s); } | ||||
| void UpdateDataSize(const std::string &ID, int size); | |||||
| void ReplaceData(const std::string &ID, void *pData, int size); | |||||
| void SetCommand(char command); | void SetCommand(char command); | ||||
| @@ -36,6 +36,7 @@ string SpiralPlugin_GetGroupName() { return "InputOutput"; } | |||||
| MeterPlugin::MeterPlugin(): | MeterPlugin::MeterPlugin(): | ||||
| m_Data (NULL), | m_Data (NULL), | ||||
| m_DataSize (0), | |||||
| m_DataReady (false), | m_DataReady (false), | ||||
| m_VUMode (true) | m_VUMode (true) | ||||
| { | { | ||||
| @@ -48,6 +49,7 @@ m_VUMode (true) | |||||
| m_PluginInfo.PortTips.push_back ("Output"); | m_PluginInfo.PortTips.push_back ("Output"); | ||||
| m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT); | m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT); | ||||
| m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT); | m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT); | ||||
| m_AudioCH->Register ("DataSize", &m_DataSize, ChannelHandler::OUTPUT); | |||||
| m_Version = 1; | m_Version = 1; | ||||
| } | } | ||||
| @@ -58,8 +60,9 @@ MeterPlugin::~MeterPlugin() { | |||||
| PluginInfo &MeterPlugin::Initialise (const HostInfo *Host) { | PluginInfo &MeterPlugin::Initialise (const HostInfo *Host) { | ||||
| PluginInfo& Info = SpiralPlugin::Initialise (Host); | PluginInfo& Info = SpiralPlugin::Initialise (Host); | ||||
| m_Data = new float[Host->BUFSIZE]; | |||||
| m_AudioCH->RegisterData ("AudioData", ChannelHandler::OUTPUT, m_Data, Host->BUFSIZE * sizeof (float)); | |||||
| m_DataSize = Host->BUFSIZE; | |||||
| m_Data = new float[m_DataSize]; | |||||
| m_AudioCH->RegisterData ("AudioData", ChannelHandler::OUTPUT, m_Data, m_DataSize * sizeof (float)); | |||||
| return Info; | return Info; | ||||
| } | } | ||||
| @@ -72,7 +75,8 @@ void MeterPlugin::Reset() | |||||
| ResetPorts(); | ResetPorts(); | ||||
| m_DataReady = false; | m_DataReady = false; | ||||
| delete m_Data; | delete m_Data; | ||||
| m_Data = new float[m_HostInfo->BUFSIZE]; | |||||
| m_DataSize = m_HostInfo->BUFSIZE; | |||||
| m_Data = new float[m_DataSize]; | |||||
| m_DataSizeChanged = true; | m_DataSizeChanged = true; | ||||
| } | } | ||||
| @@ -82,7 +86,7 @@ void MeterPlugin::Execute() { | |||||
| if (GetOutputBuf (0)) GetOutputBuf (0)->Zero(); | if (GetOutputBuf (0)) GetOutputBuf (0)->Zero(); | ||||
| if (m_DataReady) { | if (m_DataReady) { | ||||
| GetOutputBuf (0)->Mix (*GetInput(0), 0); | GetOutputBuf (0)->Mix (*GetInput(0), 0); | ||||
| memcpy (m_Data, GetInput (0)->GetBuffer (), m_HostInfo->BUFSIZE * sizeof (float)); | |||||
| memcpy (m_Data, GetInput (0)->GetBuffer (), m_DataSize * sizeof (float)); | |||||
| } | } | ||||
| } | } | ||||
| @@ -91,7 +95,7 @@ void MeterPlugin::ExecuteCommands () { | |||||
| switch (m_AudioCH->GetCommand()) { | switch (m_AudioCH->GetCommand()) { | ||||
| case UPDATEDATASIZE : | case UPDATEDATASIZE : | ||||
| { | { | ||||
| m_AudioCH->UpdateDataSize("AudioData",m_HostInfo->BUFSIZE*sizeof(float)); | |||||
| m_AudioCH->ReplaceData("AudioData", m_Data, m_DataSize*sizeof(float)); | |||||
| m_DataSizeChanged = false; | m_DataSizeChanged = false; | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -36,6 +36,7 @@ class MeterPlugin : public SpiralPlugin { | |||||
| enum GUICommands {NONE, SETVU, SETMM, UPDATEDATASIZE}; | enum GUICommands {NONE, SETVU, SETMM, UPDATEDATASIZE}; | ||||
| private: | private: | ||||
| float *m_Data; | float *m_Data; | ||||
| int m_DataSize; | |||||
| // m_VUMode isn't USED for anything, it's here so we can save/load it | // m_VUMode isn't USED for anything, it's here so we can save/load it | ||||
| bool m_DataReady, m_VUMode, m_DataSizeChanged; | bool m_DataReady, m_VUMode, m_DataSizeChanged; | ||||
| }; | }; | ||||
| @@ -98,7 +98,12 @@ void MeterPluginGUI::draw() { | |||||
| { | { | ||||
| m_GUICH->SetCommand (MeterPlugin::UPDATEDATASIZE); | m_GUICH->SetCommand (MeterPlugin::UPDATEDATASIZE); | ||||
| m_GUICH->Wait(); | m_GUICH->Wait(); | ||||
| m_BufSize = m_GUICH->GetInt("DataSize"); | |||||
| delete[] m_Data; | |||||
| m_Data = new float[m_BufSize]; | |||||
| } | } | ||||
| if (m_GUICH->GetBool ("DataReady")) m_GUICH->GetData ("AudioData", m_Data); | if (m_GUICH->GetBool ("DataReady")) m_GUICH->GetData ("AudioData", m_Data); | ||||
| else memset (m_Data, 0, m_BufSize * sizeof (float)); | else memset (m_Data, 0, m_BufSize * sizeof (float)); | ||||
| // The min and max values are based on the whole buffer | // The min and max values are based on the whole buffer | ||||
| @@ -36,7 +36,8 @@ string SpiralPlugin_GetGroupName() { return "InputOutput"; } | |||||
| /////////////////////////////////////////////////////// | /////////////////////////////////////////////////////// | ||||
| ScopePlugin::ScopePlugin(): | ScopePlugin::ScopePlugin(): | ||||
| m_DataReady(false) | |||||
| m_DataReady(false), | |||||
| m_DataSize(0) | |||||
| { | { | ||||
| m_PluginInfo.Name = "Scope"; | m_PluginInfo.Name = "Scope"; | ||||
| m_PluginInfo.Width = 260; | m_PluginInfo.Width = 260; | ||||
| @@ -47,6 +48,7 @@ m_DataReady(false) | |||||
| m_PluginInfo.PortTips.push_back("Output"); | m_PluginInfo.PortTips.push_back("Output"); | ||||
| m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT); | m_AudioCH->Register ("DataReady", &m_DataReady, ChannelHandler::OUTPUT); | ||||
| m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT); | m_AudioCH->Register ("DataSizeChanged", &m_DataSizeChanged, ChannelHandler::OUTPUT); | ||||
| m_AudioCH->Register ("DataSize", &m_DataSize, ChannelHandler::OUTPUT); | |||||
| } | } | ||||
| ScopePlugin::~ScopePlugin() | ScopePlugin::~ScopePlugin() | ||||
| @@ -56,8 +58,9 @@ ScopePlugin::~ScopePlugin() | |||||
| PluginInfo &ScopePlugin::Initialise(const HostInfo *Host) | PluginInfo &ScopePlugin::Initialise(const HostInfo *Host) | ||||
| { | { | ||||
| PluginInfo& Info = SpiralPlugin::Initialise(Host); | PluginInfo& Info = SpiralPlugin::Initialise(Host); | ||||
| m_Data = new float[Host->BUFSIZE]; | |||||
| m_AudioCH->RegisterData("AudioData",ChannelHandler::OUTPUT,m_Data,Host->BUFSIZE*sizeof(float)); | |||||
| m_DataSize = m_HostInfo->BUFSIZE; | |||||
| m_Data = new float[m_DataSize]; | |||||
| m_AudioCH->RegisterData("AudioData",ChannelHandler::OUTPUT,m_Data,m_DataSize*sizeof(float)); | |||||
| return Info; | return Info; | ||||
| } | } | ||||
| @@ -71,7 +74,8 @@ void ScopePlugin::Reset() | |||||
| ResetPorts(); | ResetPorts(); | ||||
| m_DataReady = false; | m_DataReady = false; | ||||
| delete m_Data; | delete m_Data; | ||||
| m_Data = new float[m_HostInfo->BUFSIZE]; | |||||
| m_DataSize = m_HostInfo->BUFSIZE; | |||||
| m_Data = new float[m_DataSize]; | |||||
| m_DataSizeChanged = true; | m_DataSizeChanged = true; | ||||
| } | } | ||||
| @@ -81,7 +85,7 @@ void ScopePlugin::Execute() { | |||||
| if (GetOutputBuf (0)) GetOutputBuf (0)->Zero(); | if (GetOutputBuf (0)) GetOutputBuf (0)->Zero(); | ||||
| if (m_DataReady) { | if (m_DataReady) { | ||||
| GetOutputBuf (0)->Mix (*GetInput(0), 0); | GetOutputBuf (0)->Mix (*GetInput(0), 0); | ||||
| memcpy (m_Data, GetInput (0)->GetBuffer (), m_HostInfo->BUFSIZE * sizeof (float)); | |||||
| memcpy (m_Data, GetInput (0)->GetBuffer (), m_DataSize * sizeof (float)); | |||||
| } | } | ||||
| } | } | ||||
| @@ -92,7 +96,7 @@ void ScopePlugin::ExecuteCommands() | |||||
| switch (m_AudioCH->GetCommand()) { | switch (m_AudioCH->GetCommand()) { | ||||
| case UPDATEDATASIZE : | case UPDATEDATASIZE : | ||||
| { | { | ||||
| m_AudioCH->UpdateDataSize("AudioData",m_HostInfo->BUFSIZE*sizeof(float)); | |||||
| m_AudioCH->ReplaceData("AudioData", m_Data, m_DataSize*sizeof(float)); | |||||
| m_DataSizeChanged = false; | m_DataSizeChanged = false; | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -38,6 +38,7 @@ class ScopePlugin : public SpiralPlugin { | |||||
| private: | private: | ||||
| float *m_Data; | float *m_Data; | ||||
| bool m_DataReady; | bool m_DataReady; | ||||
| int m_DataSize; | |||||
| bool m_DataSizeChanged; | bool m_DataSizeChanged; | ||||
| }; | }; | ||||
| @@ -106,9 +106,14 @@ void ScopePluginGUI::draw() | |||||
| //cerr<<"getting and drawing..."<<endl; | //cerr<<"getting and drawing..."<<endl; | ||||
| if (m_GUICH->GetBool ("DataSizeChanged")) | if (m_GUICH->GetBool ("DataSizeChanged")) | ||||
| { | { | ||||
| m_GUICH->SetCommand (ScopePlugin::UPDATEDATASIZE); | |||||
| m_GUICH->SetCommand(ScopePlugin::UPDATEDATASIZE); | |||||
| m_GUICH->Wait(); | m_GUICH->Wait(); | ||||
| m_BufSize = m_GUICH->GetInt("DataSize"); | |||||
| delete[] m_Scope->m_Data; | |||||
| m_Scope->m_Data = new float[m_BufSize]; | |||||
| } | } | ||||
| if (m_GUICH->GetBool ("DataReady")) m_GUICH->GetData ("AudioData", (void*)m_Scope->m_Data); | if (m_GUICH->GetBool ("DataReady")) m_GUICH->GetData ("AudioData", (void*)m_Scope->m_Data); | ||||
| else memset ((void*)m_Scope->m_Data, 0, m_BufSize * sizeof (float)); | else memset ((void*)m_Scope->m_Data, 0, m_BufSize * sizeof (float)); | ||||
| if (!m_Bypass) m_Scope->redraw(); | if (!m_Bypass) m_Scope->redraw(); | ||||