EngineBuffer* EngineControl::pickSyncTarget() { EngineMaster* pMaster = getEngineMaster(); if (!pMaster) { return NULL; } QString group = getGroup(); EngineBuffer* pFirstNonplayingDeck = NULL; for (int i = 0; i < m_numDecks.get(); ++i) { QString deckGroup = PlayerManager::groupForDeck(i); if (deckGroup == group) { continue; } EngineChannel* pChannel = pMaster->getChannel(deckGroup); // Only consider channels that have a track loaded and are in the master // mix. if (pChannel && pChannel->isActive() && pChannel->isMaster()) { EngineBuffer* pBuffer = pChannel->getEngineBuffer(); if (pBuffer && pBuffer->getBpm() > 0) { // If the deck is playing then go with it immediately. if (fabs(pBuffer->getSpeed()) > 0) { return pBuffer; } // Otherwise hold out for a deck that might be playing but // remember the first deck that matched our criteria. if (pFirstNonplayingDeck == NULL) { pFirstNonplayingDeck = pBuffer; } } } } // No playing decks have a BPM. Go with the first deck that was stopped but // had a BPM. return pFirstNonplayingDeck; }
EngineBuffer* EngineControl::pickSyncTarget() { EngineMaster* pMaster = getEngineMaster(); if (!pMaster) { return NULL; } EngineSync* pEngineSync = pMaster->getEngineSync(); if (pEngineSync == NULL) { return NULL; } // TODO(rryan): Remove. This is a linear search over groups in // EngineMaster. We should pass the EngineChannel into EngineControl. EngineChannel* pThisChannel = pMaster->getChannel(getGroup()); EngineChannel* pChannel = pEngineSync->pickNonSyncSyncTarget(pThisChannel); return pChannel ? pChannel->getEngineBuffer() : NULL; }