diff --git a/include/FxMixer.h b/include/FxMixer.h index c473e07d9..88b5a0997 100644 --- a/include/FxMixer.h +++ b/include/FxMixer.h @@ -69,6 +69,7 @@ class FxChannel : public ThreadableJob QAtomicInt m_dependenciesMet; void incrementDeps(); + void processed(); private: virtual void doProcessing( sampleFrame * _working_buffer ); diff --git a/include/ThreadableJob.h b/include/ThreadableJob.h index 0a7655c51..c3da4c547 100644 --- a/include/ThreadableJob.h +++ b/include/ThreadableJob.h @@ -61,6 +61,11 @@ public: { m_state = Queued; } + + inline void done() + { + m_state = Done; + } void process( sampleFrame* workingBuffer = NULL ) { diff --git a/src/core/FxMixer.cpp b/src/core/FxMixer.cpp index 2edcc4565..a83e84da8 100644 --- a/src/core/FxMixer.cpp +++ b/src/core/FxMixer.cpp @@ -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 );