Chris@0: // -*- c-basic-offset: 4 -*- 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@0: #include Chris@0: Chris@0: int RealTimePluginFactory::m_sampleRate = 48000; Chris@0: Chris@0: static LADSPAPluginFactory *_ladspaInstance = 0; Chris@0: static LADSPAPluginFactory *_dssiInstance = 0; Chris@0: Chris@0: RealTimePluginFactory * Chris@0: RealTimePluginFactory::instance(QString pluginType) Chris@0: { Chris@0: if (pluginType == "ladspa") { Chris@0: if (!_ladspaInstance) { Chris@0: std::cerr << "RealTimePluginFactory::instance(" << pluginType.toStdString() Chris@0: << "): creating new LADSPAPluginFactory" << std::endl; Chris@0: _ladspaInstance = new LADSPAPluginFactory(); Chris@0: _ladspaInstance->discoverPlugins(); Chris@0: } Chris@0: return _ladspaInstance; Chris@0: } else if (pluginType == "dssi") { Chris@0: if (!_dssiInstance) { Chris@0: std::cerr << "RealTimePluginFactory::instance(" << pluginType.toStdString() Chris@0: << "): creating new DSSIPluginFactory" << std::endl; Chris@0: _dssiInstance = new DSSIPluginFactory(); Chris@0: _dssiInstance->discoverPlugins(); Chris@0: } Chris@0: return _dssiInstance; Chris@0: } Chris@0: 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@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@0: const std::vector &tmp = factory->getPluginIdentifiers(); Chris@0: for (size_t i = 0; i < tmp.size(); ++i) { Chris@0: rv.push_back(tmp[i]); Chris@0: } Chris@0: } Chris@0: Chris@0: factory = instance("ladspa"); Chris@0: if (factory) { Chris@0: const std::vector &tmp = factory->getPluginIdentifiers(); Chris@0: for (size_t i = 0; i < tmp.size(); ++i) { Chris@0: rv.push_back(tmp[i]); Chris@0: } Chris@0: } Chris@0: Chris@0: // Plugins can change the locale, revert it to default. Chris@0: setlocale(LC_ALL, "C"); Chris@0: return rv; Chris@0: } Chris@0: Chris@0: void Chris@0: RealTimePluginFactory::enumerateAllPlugins(std::vector &list) Chris@0: { 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@0: setlocale(LC_ALL, "C"); Chris@0: } Chris@0: