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(); | ||||