LCOV - code coverage report
Current view: top level - muse/framework/vst/internal - vstinstancesregister.cpp Coverage Total Hit
Test: filtered_coverage.info Lines: 0.0 % 95 0
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2021 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : 
      23              : #include "vstinstancesregister.h"
      24              : 
      25              : #include "global/containers.h"
      26              : 
      27              : #include "vstplugininstance.h"
      28              : 
      29              : #include "log.h"
      30              : 
      31              : using namespace muse::vst;
      32              : using namespace muse::audio;
      33              : 
      34            0 : IVstPluginInstancePtr VstInstancesRegister::makeAndRegisterInstrPlugin(const AudioResourceId& resourceId,
      35              :                                                                        const muse::audio::TrackId trackId)
      36              : {
      37            0 :     std::shared_ptr<VstPluginInstance> instance = std::make_shared<VstPluginInstance>(resourceId);
      38              : 
      39            0 :     registerInstrPlugin(trackId, instance);
      40              : 
      41            0 :     instance->load();
      42              : 
      43            0 :     return instance;
      44            0 : }
      45              : 
      46            0 : IVstPluginInstancePtr VstInstancesRegister::makeAndRegisterFxPlugin(const muse::audio::AudioResourceId& resourceId,
      47              :                                                                     const muse::audio::TrackId trackId,
      48              :                                                                     const muse::audio::AudioFxChainOrder chainOrder)
      49              : {
      50            0 :     std::shared_ptr<VstPluginInstance> instance = std::make_shared<VstPluginInstance>(resourceId);
      51              : 
      52            0 :     registerFxPlugin(trackId, chainOrder, instance);
      53              : 
      54            0 :     instance->load();
      55              : 
      56            0 :     return instance;
      57            0 : }
      58              : 
      59            0 : IVstPluginInstancePtr VstInstancesRegister::makeAndRegisterMasterFxPlugin(const muse::audio::AudioResourceId& resourceId,
      60              :                                                                           const muse::audio::AudioFxChainOrder chainOrder)
      61              : {
      62            0 :     std::shared_ptr<VstPluginInstance> instance = std::make_shared<VstPluginInstance>(resourceId);
      63              : 
      64            0 :     registerMasterFxPlugin(chainOrder, instance);
      65              : 
      66            0 :     instance->load();
      67              : 
      68            0 :     return instance;
      69            0 : }
      70              : 
      71            0 : void VstInstancesRegister::registerInstrPlugin(const muse::audio::TrackId trackId, IVstPluginInstancePtr instance)
      72              : {
      73            0 :     IF_ASSERT_FAILED(instance) {
      74            0 :         return;
      75              :     }
      76              : 
      77            0 :     std::lock_guard lock(m_mutex);
      78              : 
      79            0 :     m_instances.insert_or_assign({ Type::Instrument, instance->resourceId(), trackId, 0 }, instance);
      80            0 : }
      81              : 
      82            0 : void VstInstancesRegister::registerFxPlugin(const muse::audio::TrackId trackId,
      83              :                                             const AudioFxChainOrder chainOrder,
      84              :                                             IVstPluginInstancePtr instance)
      85              : {
      86            0 :     IF_ASSERT_FAILED(instance) {
      87            0 :         return;
      88              :     }
      89              : 
      90            0 :     std::lock_guard lock(m_mutex);
      91              : 
      92            0 :     m_instances.insert_or_assign({ Type::Effect, instance->resourceId(), trackId, chainOrder }, instance);
      93            0 : }
      94              : 
      95            0 : void VstInstancesRegister::registerMasterFxPlugin(const AudioFxChainOrder chainOrder, IVstPluginInstancePtr instance)
      96              : {
      97            0 :     registerFxPlugin(-1, chainOrder, instance);
      98            0 : }
      99              : 
     100            0 : IVstPluginInstancePtr VstInstancesRegister::instanceById(const VstPluginInstanceId id) const
     101              : {
     102            0 :     std::lock_guard lock(m_mutex);
     103            0 :     for (const auto& p : m_instances) {
     104            0 :         if (p.second->id() == id) {
     105            0 :             return p.second;
     106              :         }
     107              :     }
     108            0 :     return nullptr;
     109            0 : }
     110              : 
     111            0 : IVstPluginInstancePtr VstInstancesRegister::instrumentPlugin(const muse::audio::AudioResourceId& resourceId,
     112              :                                                              const muse::audio::TrackId trackId) const
     113              : {
     114            0 :     std::lock_guard lock(m_mutex);
     115              : 
     116            0 :     auto it = m_instances.find({ Type::Instrument, resourceId, trackId, 0 });
     117            0 :     if (it != m_instances.end()) {
     118            0 :         return it->second;
     119              :     }
     120              : 
     121            0 :     LOGE() << "Unable to find instrument plugin, trackId: " << trackId
     122            0 :            << " , resourceId: " << resourceId;
     123              : 
     124            0 :     return nullptr;
     125            0 : }
     126              : 
     127            0 : IVstPluginInstancePtr VstInstancesRegister::fxPlugin(const muse::audio::AudioResourceId& resourceId,
     128              :                                                      const muse::audio::TrackId trackId,
     129              :                                                      const AudioFxChainOrder chainOrder) const
     130              : {
     131            0 :     std::lock_guard lock(m_mutex);
     132              : 
     133            0 :     auto it = m_instances.find({ Type::Effect, resourceId, trackId, chainOrder });
     134            0 :     if (it != m_instances.end()) {
     135            0 :         return it->second;
     136              :     }
     137              : 
     138            0 :     LOGE() << "Unable to find fx plugin, trackId: " << trackId
     139            0 :            << ", resourceId: " << resourceId
     140            0 :            << ", chainOrder: " << chainOrder;
     141              : 
     142            0 :     return nullptr;
     143            0 : }
     144              : 
     145            0 : IVstPluginInstancePtr VstInstancesRegister::masterFxPlugin(const muse::audio::AudioResourceId& resourceId,
     146              :                                                            const AudioFxChainOrder chainOrder) const
     147              : {
     148            0 :     std::lock_guard lock(m_mutex);
     149              : 
     150            0 :     auto it = m_instances.find({ Type::Effect, resourceId, -1, chainOrder });
     151            0 :     if (it != m_instances.end()) {
     152            0 :         return it->second;
     153              :     }
     154              : 
     155            0 :     LOGE() << "Unable to find master fx plugin"
     156            0 :            << ", resourceId: " << resourceId
     157            0 :            << ", chainOrder: " << chainOrder;
     158              : 
     159            0 :     return nullptr;
     160            0 : }
     161              : 
     162            0 : void VstInstancesRegister::unregisterById(const VstPluginInstanceId id)
     163              : {
     164            0 :     std::lock_guard lock(m_mutex);
     165              : 
     166            0 :     muse::remove_if(m_instances, [id](const auto& p) {
     167            0 :         return p.second->id() == id;
     168              :     });
     169            0 : }
     170              : 
     171            0 : void VstInstancesRegister::unregisterInstrPlugin(const muse::audio::AudioResourceId& resourceId, const muse::audio::TrackId trackId)
     172              : {
     173            0 :     std::lock_guard lock(m_mutex);
     174              : 
     175            0 :     m_instances.erase({ Type::Instrument, resourceId, trackId, 0 });
     176            0 : }
     177              : 
     178            0 : void VstInstancesRegister::unregisterFxPlugin(const muse::audio::AudioResourceId& resourceId,
     179              :                                               const muse::audio::TrackId trackId,
     180              :                                               const AudioFxChainOrder chainOrder)
     181              : {
     182            0 :     std::lock_guard lock(m_mutex);
     183              : 
     184            0 :     m_instances.erase({ Type::Effect, resourceId, trackId, chainOrder });
     185            0 : }
     186              : 
     187            0 : void VstInstancesRegister::unregisterMasterFxPlugin(const muse::audio::AudioResourceId& resourceId, const AudioFxChainOrder chainOrder)
     188              : {
     189            0 :     unregisterFxPlugin(resourceId, -1, chainOrder);
     190            0 : }
     191              : 
     192            0 : void VstInstancesRegister::unregisterAllInstrPlugin()
     193              : {
     194            0 :     std::lock_guard lock(m_mutex);
     195              : 
     196            0 :     muse::remove_if(m_instances, [](const auto& p) {
     197            0 :         return p.first.type == Type::Instrument;
     198              :     });
     199            0 : }
     200              : 
     201            0 : void VstInstancesRegister::unregisterAllFx()
     202              : {
     203            0 :     std::lock_guard lock(m_mutex);
     204              : 
     205            0 :     muse::remove_if(m_instances, [](const auto& p) {
     206            0 :         return p.first.type == Type::Effect;
     207              :     });
     208            0 : }
        

Generated by: LCOV version 2.0-1