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