More updates to FxMixer - better handling of muted channels

This commit is contained in:
Vesa
2014-11-16 13:46:54 +02:00
parent ca06a10a42
commit 8ef10f4f81
3 changed files with 24 additions and 8 deletions

View File

@@ -69,6 +69,7 @@ class FxChannel : public ThreadableJob
QAtomicInt m_dependenciesMet;
void incrementDeps();
void processed();
private:
virtual void doProcessing( sampleFrame * _working_buffer );

View File

@@ -61,6 +61,11 @@ public:
{
m_state = Queued;
}
inline void done()
{
m_state = Done;
}
void process( sampleFrame* workingBuffer = NULL )
{

View File

@@ -85,6 +85,17 @@ FxChannel::~FxChannel()
}
inline void FxChannel::processed()
{
foreach( FxRoute * receiverRoute, m_sends )
{
if( receiverRoute->receiver()->m_muted == false )
{
receiverRoute->receiver()->incrementDeps();
}
}
}
void FxChannel::incrementDeps()
{
m_dependenciesMet.ref();
@@ -155,13 +166,7 @@ void FxChannel::doProcessing( sampleFrame * _buf )
}
// increment dependency counter of all receivers
foreach( FxRoute * receiverRoute, m_sends )
{
if( receiverRoute->receiver()->m_muteModel.value() == false )
{
receiverRoute->receiver()->incrementDeps();
}
}
processed();
}
@@ -489,7 +494,12 @@ void FxMixer::masterMix( sampleFrame * _buf )
foreach( FxChannel * ch, m_fxChannels )
{
ch->m_muted = ch->m_muteModel.value();
if( ch->m_receives.size() == 0 || ch->m_muted )
if( ch->m_muted ) // instantly "process" muted channels
{
ch->processed();
ch->done();
}
else if( ch->m_receives.size() == 0 )
{
ch->m_queued = true;
MixerWorkerThread::addJob( ch );