diff options
author | xerus2000 <27jf@pm.me> | 2020-07-30 13:54:19 +0200 |
---|---|---|
committer | xerus2000 <27jf@pm.me> | 2020-07-31 11:43:29 +0200 |
commit | bcc3123b506174f2c42a59a1d78759ed37cd983a (patch) | |
tree | 4e2dd012e65a29685766e7f5ba5f9cae058df4ba /src/mixer | |
parent | 16950549cff6aad58fab58c1317e6a3eb40e9b87 (diff) |
PlayerManager: Identify players by ChannelHandle
Diffstat (limited to 'src/mixer')
-rw-r--r-- | src/mixer/basetrackplayer.cpp | 13 | ||||
-rw-r--r-- | src/mixer/basetrackplayer.h | 2 | ||||
-rw-r--r-- | src/mixer/deck.cpp | 11 | ||||
-rw-r--r-- | src/mixer/deck.h | 12 | ||||
-rw-r--r-- | src/mixer/playermanager.cpp | 71 | ||||
-rw-r--r-- | src/mixer/playermanager.h | 15 | ||||
-rw-r--r-- | src/mixer/previewdeck.cpp | 11 | ||||
-rw-r--r-- | src/mixer/previewdeck.h | 12 | ||||
-rw-r--r-- | src/mixer/sampler.cpp | 11 | ||||
-rw-r--r-- | src/mixer/sampler.h | 2 |
10 files changed, 102 insertions, 58 deletions
diff --git a/src/mixer/basetrackplayer.cpp b/src/mixer/basetrackplayer.cpp index 17978ca7bb..cd80b2c666 100644 --- a/src/mixer/basetrackplayer.cpp +++ b/src/mixer/basetrackplayer.cpp @@ -41,19 +41,22 @@ BaseTrackPlayerImpl::BaseTrackPlayerImpl( EffectsManager* pEffectsManager, VisualsManager* pVisualsManager, EngineChannel::ChannelOrientation defaultOrientation, - const QString& group, + const ChannelHandleAndGroup& handle_group, bool defaultMaster, bool defaultHeadphones, bool primaryDeck) - : BaseTrackPlayer(pParent, group), + : BaseTrackPlayer(pParent, handle_group.name()), m_pConfig(pConfig), m_pEngineMaster(pMixingEngine), m_pLoadedTrack(), m_replaygainPending(false), m_pChannelToCloneFrom(nullptr) { - ChannelHandleAndGroup channelGroup = - pMixingEngine->registerChannelGroup(group); - m_pChannel = new EngineDeck(channelGroup, pConfig, pMixingEngine, pEffectsManager, defaultOrientation, primaryDeck); + m_pChannel = new EngineDeck(handle_group, + pConfig, + pMixingEngine, + pEffectsManager, + defaultOrientation, + primaryDeck); m_pInputConfigured = make_parented<ControlProxy>(getGroup(), "input_configured", this); #ifdef __VINYLCONTROL__ diff --git a/src/mixer/basetrackplayer.h b/src/mixer/basetrackplayer.h index d5220ca7da..2308dac8fd 100644 --- a/src/mixer/basetrackplayer.h +++ b/src/mixer/basetrackplayer.h @@ -58,7 +58,7 @@ class BaseTrackPlayerImpl : public BaseTrackPlayer { EffectsManager* pEffectsManager, VisualsManager* pVisualsManager, EngineChannel::ChannelOrientation defaultOrientation, - const QString& group, + const ChannelHandleAndGroup& handle_group, bool defaultMaster, bool defaultHeadphones, bool primaryDeck); diff --git a/src/mixer/deck.cpp b/src/mixer/deck.cpp index 121bef0f22..09575e7e7e 100644 --- a/src/mixer/deck.cpp +++ b/src/mixer/deck.cpp @@ -6,8 +6,15 @@ Deck::Deck(QObject* pParent, EffectsManager* pEffectsManager, VisualsManager* pVisualsManager, EngineChannel::ChannelOrientation defaultOrientation, - const QString& group) - : BaseTrackPlayerImpl(pParent, pConfig, pMixingEngine, pEffectsManager, pVisualsManager, defaultOrientation, group, /*defaultMaster*/ true, + const ChannelHandleAndGroup& handle_group) + : BaseTrackPlayerImpl(pParent, + pConfig, + pMixingEngine, + pEffectsManager, + pVisualsManager, + defaultOrientation, + handle_group, + /*defaultMaster*/ true, /*defaultHeadphones*/ false, /*primaryDeck*/ true) { } diff --git a/src/mixer/deck.h b/src/mixer/deck.h index 62e4cf964b..76e8ae9d24 100644 --- a/src/mixer/deck.h +++ b/src/mixer/deck.h @@ -8,11 +8,11 @@ class Deck : public BaseTrackPlayerImpl { Q_OBJECT public: Deck(QObject* pParent, - UserSettingsPointer pConfig, - EngineMaster* pMixingEngine, - EffectsManager* pEffectsManager, - VisualsManager* pVisualsManager, - EngineChannel::ChannelOrientation defaultOrientation, - const QString& group); + UserSettingsPointer pConfig, + EngineMaster* pMixingEngine, + EffectsManager* pEffectsManager, + VisualsManager* pVisualsManager, + EngineChannel::ChannelOrientation defaultOrientation, + const ChannelHandleAndGroup& handle_group); ~Deck() override = default; }; diff --git a/src/mixer/playermanager.cpp b/src/mixer/playermanager.cpp index b7d9aebf0b..cb99809f70 100644 --- a/src/mixer/playermanager.cpp +++ b/src/mixer/playermanager.cpp @@ -147,7 +147,7 @@ void PlayerManager::bindToLibrary(Library* pLibrary) { // Connect the player to the analyzer queue so that loaded tracks are // analyzed. - foreach(PreviewDeck* pPreviewDeck, m_preview_decks) { + foreach (PreviewDeck* pPreviewDeck, m_previewDecks) { connect(pPreviewDeck, SIGNAL(newTrackLoaded(TrackPointer)), this, SLOT(slotAnalyzeTrack(TrackPointer))); } @@ -307,15 +307,15 @@ void PlayerManager::slotChangeNumSamplers(double v) { void PlayerManager::slotChangeNumPreviewDecks(double v) { QMutexLocker locker(&m_mutex); int num = (int)v; - if (num < m_preview_decks.size()) { + if (num < m_previewDecks.size()) { // The request was invalid -- don't set the value. kLogger.debug() << "Ignoring request to reduce the number of preview decks to" << num; return; } - while (m_preview_decks.size() < num) { + while (m_previewDecks.size() < num) { addPreviewDeckInner(); } - m_pCONumPreviewDecks->setAndConfirm(m_preview_decks.size()); + m_pCONumPreviewDecks->setAndConfirm(m_previewDecks.size()); } void PlayerManager::slotChangeNumMicrophones(double v) { @@ -358,8 +358,9 @@ void PlayerManager::addConfiguredDecks() { void PlayerManager::addDeckInner() { // Do not lock m_mutex here. - QString group = groupForDeck(m_decks.count()); - VERIFY_OR_DEBUG_ASSERT(!m_players.contains(group)) { + ChannelHandleAndGroup handle_group = + m_pEngine->registerChannelGroup(groupForDeck(m_decks.count())); + VERIFY_OR_DEBUG_ASSERT(!m_players.contains(handle_group.handle())) { return; } @@ -371,7 +372,7 @@ void PlayerManager::addDeckInner() { m_pEffectsManager, m_pVisualsManager, deckIndex % 2 == 1 ? EngineChannel::RIGHT : EngineChannel::LEFT, - group); + handle_group); connect(pDeck->getEngineDeck(), &EngineDeck::noPassthroughInputConfigured, this, @@ -388,7 +389,7 @@ void PlayerManager::addDeckInner() { &PlayerManager::slotAnalyzeTrack); } - m_players[group] = pDeck; + m_players[handle_group.handle()] = pDeck; m_decks.append(pDeck); // Register the deck output with SoundManager. @@ -405,7 +406,7 @@ void PlayerManager::addDeckInner() { VERIFY_OR_DEBUG_ASSERT(pEqRack) { return; } - pEqRack->setupForGroup(group); + pEqRack->setupForGroup(handle_group.name()); // BaseTrackPlayer needs to delay until we have setup the equalizer rack for // this deck to fetch the legacy EQ controls. @@ -418,7 +419,7 @@ void PlayerManager::addDeckInner() { VERIFY_OR_DEBUG_ASSERT(pQuickEffectRack) { return; } - pQuickEffectRack->setupForGroup(group); + pQuickEffectRack->setupForGroup(handle_group.name()); } void PlayerManager::loadSamplers() { @@ -434,17 +435,22 @@ void PlayerManager::addSampler() { void PlayerManager::addSamplerInner() { // Do not lock m_mutex here. - QString group = groupForSampler(m_samplers.count()); - - VERIFY_OR_DEBUG_ASSERT(!m_players.contains(group)) { + ChannelHandleAndGroup handle_group = + m_pEngine->registerChannelGroup(groupForSampler(m_samplers.count())); + VERIFY_OR_DEBUG_ASSERT(!m_players.contains(handle_group.handle())) { return; } // All samplers are in the center EngineChannel::ChannelOrientation orientation = EngineChannel::CENTER; - Sampler* pSampler = new Sampler(this, m_pConfig, m_pEngine, - m_pEffectsManager, m_pVisualsManager, orientation, group); + Sampler* pSampler = new Sampler(this, + m_pConfig, + m_pEngine, + m_pEffectsManager, + m_pVisualsManager, + orientation, + handle_group); if (m_pTrackAnalysisScheduler) { connect(pSampler, &Sampler::newTrackLoaded, @@ -452,7 +458,7 @@ void PlayerManager::addSamplerInner() { &PlayerManager::slotAnalyzeTrack); } - m_players[group] = pSampler; + m_players[handle_group.handle()] = pSampler; m_samplers.append(pSampler); } @@ -463,16 +469,22 @@ void PlayerManager::addPreviewDeck() { void PlayerManager::addPreviewDeckInner() { // Do not lock m_mutex here. - QString group = groupForPreviewDeck(m_preview_decks.count()); - VERIFY_OR_DEBUG_ASSERT(!m_players.contains(group)) { + ChannelHandleAndGroup handle_group = m_pEngine->registerChannelGroup( + groupForPreviewDeck(m_previewDecks.count())); + VERIFY_OR_DEBUG_ASSERT(!m_players.contains(handle_group.handle())) { return; } // All preview decks are in the center EngineChannel::ChannelOrientation orientation = EngineChannel::CENTER; - PreviewDeck* pPreviewDeck = new PreviewDeck(this, m_pConfig, m_pEngine, - m_pEffectsManager, m_pVisualsManager, orientation, group); + PreviewDeck* pPreviewDeck = new PreviewDeck(this, + m_pConfig, + m_pEngine, + m_pEffectsManager, + m_pVisualsManager, + orientation, + handle_group); if (m_pTrackAnalysisScheduler) { connect(pPreviewDeck, &PreviewDeck::newTrackLoaded, @@ -480,8 +492,8 @@ void PlayerManager::addPreviewDeckInner() { &PlayerManager::slotAnalyzeTrack); } - m_players[group] = pPreviewDeck; - m_preview_decks.append(pPreviewDeck); + m_players[handle_group.handle()] = pPreviewDeck; + m_previewDecks.append(pPreviewDeck); } void PlayerManager::addMicrophone() { @@ -524,12 +536,17 @@ void PlayerManager::addAuxiliaryInner() { m_auxiliaries.append(pAuxiliary); } -BaseTrackPlayer* PlayerManager::getPlayer(QString group) const { +BaseTrackPlayer* PlayerManager::getPlayer(const QString& group) const { + return getPlayer(m_pEngine->registerChannelGroup(group).handle()); +} + +BaseTrackPlayer* PlayerManager::getPlayer(const ChannelHandle& handle) const { QMutexLocker locker(&m_mutex); - if (m_players.contains(group)) { - return m_players[group]; + + if (m_players.contains(handle)) { + return m_players[handle]; } - return NULL; + return nullptr; } Deck* PlayerManager::getDeck(unsigned int deck) const { @@ -548,7 +565,7 @@ PreviewDeck* PlayerManager::getPreviewDeck(unsigned int libPreviewPlayer) const << libPreviewPlayer; return NULL; } - return m_preview_decks[libPreviewPlayer - 1]; + return m_previewDecks[libPreviewPlayer - 1]; } Sampler* PlayerManager::getSampler(unsigned int sampler) const { diff --git a/src/mixer/playermanager.h b/src/mixer/playermanager.h index 82a4666fd6..0af951fc84 100644 --- a/src/mixer/playermanager.h +++ b/src/mixer/playermanager.h @@ -6,6 +6,7 @@ #include <QObject> #include "analyzer/trackanalysisscheduler.h" +#include "engine/channelhandle.h" #include "preferences/usersettings.h" #include "track/track.h" #include "util/parented_ptr.h" @@ -30,8 +31,8 @@ class PlayerManagerInterface { public: virtual ~PlayerManagerInterface() = default; - // Get a BaseTrackPlayer (i.e. a Deck or a Sampler) by its group - virtual BaseTrackPlayer* getPlayer(QString group) const = 0; + virtual BaseTrackPlayer* getPlayer(const QString& group) const = 0; + virtual BaseTrackPlayer* getPlayer(const ChannelHandle& channelHandle) const = 0; // Get the deck by its deck number. Decks are numbered starting with 1. virtual Deck* getDeck(unsigned int player) const = 0; @@ -84,7 +85,7 @@ class PlayerManager : public QObject, public PlayerManagerInterface { // Returns true if the group is a deck group. If index is non-NULL, // populates it with the deck number (1-indexed). - static bool isDeckGroup(const QString& group, int* number=NULL); + static bool isDeckGroup(const QString& group, int* number = nullptr); // Returns true if the group is a sampler group. If index is non-NULL, // populates it with the deck number (1-indexed). @@ -92,11 +93,13 @@ class PlayerManager : public QObject, public PlayerManagerInterface { // Returns true if the group is a preview deck group. If index is non-NULL, // populates it with the deck number (1-indexed). - static bool isPreviewDeckGroup(const QString& group, int* number=NULL); + static bool isPreviewDeckGroup(const QString& group, int* number = nullptr); // Get a BaseTrackPlayer (Deck, Sampler or PreviewDeck) by its group. // Auxiliaries and microphones are not players. BaseTrackPlayer* getPlayer(const QString& group) const override; + // Get a BaseTrackPlayer (Deck, Sampler or PreviewDeck) by its handle. + BaseTrackPlayer* getPlayer(const ChannelHandle& handle) const override; // Get the deck by its deck number. Decks are numbered starting with 1. Deck* getDeck(unsigned int player) const override; @@ -263,8 +266,8 @@ class PlayerManager : public QObject, public PlayerManagerInterface { QList<Deck*> m_decks; QList<Sampler*> m_samplers; - QList<PreviewDeck*> m_preview_decks; + QList<PreviewDeck*> m_previewDecks; QList<Microphone*> m_microphones; QList<Auxiliary*> m_auxiliaries; - QMap<QString, BaseTrackPlayer*> m_players; + QMap<ChannelHandle, BaseTrackPlayer*> m_players; }; diff --git a/src/mixer/previewdeck.cpp b/src/mixer/previewdeck.cpp index c414bbb3bc..9fc8f881a9 100644 --- a/src/mixer/previewdeck.cpp +++ b/src/mixer/previewdeck.cpp @@ -6,8 +6,15 @@ PreviewDeck::PreviewDeck(QObject* pParent, EffectsManager* pEffectsManager, VisualsManager* pVisualsManager, EngineChannel::ChannelOrientation defaultOrientation, - QString group) - : BaseTrackPlayerImpl(pParent, pConfig, pMixingEngine, pEffectsManager, pVisualsManager, defaultOrientation, group, /*defaultMaster*/ false, + const ChannelHandleAndGroup& handle_group) + : BaseTrackPlayerImpl(pParent, + pConfig, + pMixingEngine, + pEffectsManager, + pVisualsManager, + defaultOrientation, + handle_group, + /*defaultMaster*/ false, /*defaultHeadphones*/ true, /*primaryDeck*/ false) { } diff --git a/src/mixer/previewdeck.h b/src/mixer/previewdeck.h index d1414af654..67885ec936 100644 --- a/src/mixer/previewdeck.h +++ b/src/mixer/previewdeck.h @@ -7,12 +7,12 @@ class PreviewDeck : public BaseTrackPlayerImpl { Q_OBJECT public: PreviewDeck(QObject* pParent, - UserSettingsPointer pConfig, - EngineMaster* pMixingEngine, - EffectsManager* pEffectsManager, - VisualsManager* pVisualsManager, - EngineChannel::ChannelOrientation defaultOrientation, - QString group); + UserSettingsPointer pConfig, + EngineMaster* pMixingEngine, + EffectsManager* pEffectsManager, + VisualsManager* pVisualsManager, + EngineChannel::ChannelOrientation defaultOrientation, + const ChannelHandleAndGroup& handle_group); ~PreviewDeck() override = default; }; diff --git a/src/mixer/sampler.cpp b/src/mixer/sampler.cpp index b829d1b4c1..de03f37b71 100644 --- a/src/mixer/sampler.cpp +++ b/src/mixer/sampler.cpp @@ -8,8 +8,15 @@ Sampler::Sampler(QObject* pParent, EffectsManager* pEffectsManager, VisualsManager* pVisualsManager, EngineChannel::ChannelOrientation defaultOrientation, - QString group) - : BaseTrackPlayerImpl(pParent, pConfig, pMixingEngine, pEffectsManager, pVisualsManager, defaultOrientation, group, /*defaultMaster*/ true, + const ChannelHandleAndGroup& handle_group) + : BaseTrackPlayerImpl(pParent, + pConfig, + pMixingEngine, + pEffectsManager, + pVisualsManager, + defaultOrientation, + handle_group, + /*defaultMaster*/ true, /*defaultHeadphones*/ false, /*primaryDeck*/ false) { } diff --git a/src/mixer/sampler.h b/src/mixer/sampler.h index b8e2114de8..d22b0419aa 100644 --- a/src/mixer/sampler.h +++ b/src/mixer/sampler.h @@ -11,6 +11,6 @@ class Sampler : public BaseTrackPlayerImpl { EffectsManager* pEffectsManager, VisualsManager* pVisualsManager, EngineChannel::ChannelOrientation defaultOrientation, - QString group); + const ChannelHandleAndGroup& handle_group); ~Sampler() override = default; }; |