Chris@49: // -*- c-basic-offset: 4 indent-tabs-mode: nil -*- Chris@0: Chris@0: /* Chris@0: Rosegarden-4 Chris@0: A sequencer and musical notation editor. Chris@0: Chris@17: This program is Copyright 2000-2006 Chris@0: Guillaume Laurent , Chris@0: Chris Cannam , Chris@0: Richard Bown Chris@0: Chris@0: The moral right of the authors to claim authorship of this work Chris@0: has been asserted. Chris@0: Chris@0: This program is free software; you can redistribute it and/or Chris@0: modify it under the terms of the GNU General Public License as Chris@0: published by the Free Software Foundation; either version 2 of the Chris@0: License, or (at your option) any later version. See the file Chris@0: COPYING included with this distribution for more information. Chris@0: */ Chris@0: Chris@0: #include "RealTimePluginFactory.h" Chris@0: #include "PluginIdentifier.h" Chris@0: Chris@0: #include "LADSPAPluginFactory.h" Chris@0: #include "DSSIPluginFactory.h" Chris@0: Chris@303: #include "system/System.h" Chris@408: #include "base/Profiler.h" Chris@303: Chris@0: #include Chris@0: Chris@1040: sv_samplerate_t RealTimePluginFactory::m_sampleRate = 48000; Chris@0: Chris@0: static LADSPAPluginFactory *_ladspaInstance = 0; Chris@0: static LADSPAPluginFactory *_dssiInstance = 0; Chris@0: Chris@259: RealTimePluginFactory::~RealTimePluginFactory() Chris@259: { Chris@259: } Chris@259: Chris@0: RealTimePluginFactory * Chris@0: RealTimePluginFactory::instance(QString pluginType) Chris@0: { Chris@0: if (pluginType == "ladspa") { Chris@1429: if (!_ladspaInstance) { Chris@1429: // SVDEBUG << "RealTimePluginFactory::instance(" << pluginType// << "): creating new LADSPAPluginFactory" << endl; Chris@1429: _ladspaInstance = new LADSPAPluginFactory(); Chris@1429: _ladspaInstance->discoverPlugins(); Chris@1429: } Chris@1429: return _ladspaInstance; Chris@0: } else if (pluginType == "dssi") { Chris@1429: if (!_dssiInstance) { Chris@1429: // SVDEBUG << "RealTimePluginFactory::instance(" << pluginType// << "): creating new DSSIPluginFactory" << endl; Chris@1429: _dssiInstance = new DSSIPluginFactory(); Chris@1429: _dssiInstance->discoverPlugins(); Chris@1429: } Chris@1429: return _dssiInstance; Chris@0: } Chris@1429: Chris@0: else return 0; Chris@0: } Chris@0: Chris@0: RealTimePluginFactory * Chris@0: RealTimePluginFactory::instanceFor(QString identifier) Chris@0: { Chris@0: QString type, soName, label; Chris@0: PluginIdentifier::parseIdentifier(identifier, type, soName, label); Chris@0: return instance(type); Chris@0: } Chris@0: Chris@0: std::vector Chris@0: RealTimePluginFactory::getAllPluginIdentifiers() Chris@0: { Chris@408: Profiler profiler("RealTimePluginFactory::getAllPluginIdentifiers"); Chris@408: Chris@0: RealTimePluginFactory *factory; Chris@0: std::vector rv; Chris@0: Chris@0: // Query DSSI plugins before LADSPA ones. Chris@0: // This is to provide for the interesting possibility of plugins Chris@0: // providing either DSSI or LADSPA versions of themselves, Chris@0: // returning both versions if the LADSPA identifiers are queried Chris@0: // first but only the DSSI version if the DSSI identifiers are Chris@0: // queried first. Chris@0: Chris@0: factory = instance("dssi"); Chris@0: if (factory) { Chris@1429: const std::vector &tmp = factory->getPluginIdentifiers(); Chris@1429: for (size_t i = 0; i < tmp.size(); ++i) { Chris@1429: rv.push_back(tmp[i]); Chris@1429: } Chris@0: } Chris@0: Chris@0: factory = instance("ladspa"); Chris@0: if (factory) { Chris@1429: const std::vector &tmp = factory->getPluginIdentifiers(); Chris@1429: for (size_t i = 0; i < tmp.size(); ++i) { Chris@1429: rv.push_back(tmp[i]); Chris@1429: } Chris@0: } Chris@0: Chris@0: // Plugins can change the locale, revert it to default. Chris@303: RestoreStartupLocale(); Chris@303: Chris@0: return rv; Chris@0: } Chris@0: Chris@0: void Chris@0: RealTimePluginFactory::enumerateAllPlugins(std::vector &list) Chris@0: { Chris@408: Profiler profiler("RealTimePluginFactory::enumerateAllPlugins"); Chris@408: Chris@0: RealTimePluginFactory *factory; Chris@0: Chris@0: // Query DSSI plugins before LADSPA ones. Chris@0: // This is to provide for the interesting possibility of plugins Chris@0: // providing either DSSI or LADSPA versions of themselves, Chris@0: // returning both versions if the LADSPA identifiers are queried Chris@0: // first but only the DSSI version if the DSSI identifiers are Chris@0: // queried first. Chris@0: Chris@0: factory = instance("dssi"); Chris@0: if (factory) factory->enumeratePlugins(list); Chris@0: Chris@0: factory = instance("ladspa"); Chris@0: if (factory) factory->enumeratePlugins(list); Chris@0: Chris@0: // Plugins can change the locale, revert it to default. Chris@608: RestoreStartupLocale(); Chris@0: } Chris@0: