| Chris@49 | 1 // -*- c-basic-offset: 4 indent-tabs-mode: nil -*- | 
| Chris@0 | 2 | 
| Chris@0 | 3 /* | 
| Chris@0 | 4     Rosegarden-4 | 
| Chris@0 | 5     A sequencer and musical notation editor. | 
| Chris@0 | 6 | 
| Chris@17 | 7     This program is Copyright 2000-2006 | 
| Chris@0 | 8         Guillaume Laurent   <glaurent@telegraph-road.org>, | 
| Chris@0 | 9         Chris Cannam        <cannam@all-day-breakfast.com>, | 
| Chris@0 | 10         Richard Bown        <bownie@bownie.com> | 
| Chris@0 | 11 | 
| Chris@0 | 12     The moral right of the authors to claim authorship of this work | 
| Chris@0 | 13     has been asserted. | 
| Chris@0 | 14 | 
| Chris@0 | 15     This program is free software; you can redistribute it and/or | 
| Chris@0 | 16     modify it under the terms of the GNU General Public License as | 
| Chris@0 | 17     published by the Free Software Foundation; either version 2 of the | 
| Chris@0 | 18     License, or (at your option) any later version.  See the file | 
| Chris@0 | 19     COPYING included with this distribution for more information. | 
| Chris@0 | 20 */ | 
| Chris@0 | 21 | 
| Chris@0 | 22 #include "RealTimePluginFactory.h" | 
| Chris@0 | 23 #include "PluginIdentifier.h" | 
| Chris@0 | 24 | 
| Chris@0 | 25 #include "LADSPAPluginFactory.h" | 
| Chris@0 | 26 #include "DSSIPluginFactory.h" | 
| Chris@0 | 27 | 
| Chris@303 | 28 #include "system/System.h" | 
| Chris@408 | 29 #include "base/Profiler.h" | 
| Chris@303 | 30 | 
| Chris@0 | 31 #include <iostream> | 
| Chris@0 | 32 | 
| Chris@1040 | 33 sv_samplerate_t RealTimePluginFactory::m_sampleRate = 48000; | 
| Chris@0 | 34 | 
| Chris@0 | 35 static LADSPAPluginFactory *_ladspaInstance = 0; | 
| Chris@0 | 36 static LADSPAPluginFactory *_dssiInstance = 0; | 
| Chris@0 | 37 | 
| Chris@259 | 38 RealTimePluginFactory::~RealTimePluginFactory() | 
| Chris@259 | 39 { | 
| Chris@259 | 40 } | 
| Chris@259 | 41 | 
| Chris@0 | 42 RealTimePluginFactory * | 
| Chris@0 | 43 RealTimePluginFactory::instance(QString pluginType) | 
| Chris@0 | 44 { | 
| Chris@0 | 45     if (pluginType == "ladspa") { | 
| Chris@1429 | 46         if (!_ladspaInstance) { | 
| Chris@1429 | 47 //            SVDEBUG << "RealTimePluginFactory::instance(" << pluginType//                      << "): creating new LADSPAPluginFactory" << endl; | 
| Chris@1429 | 48             _ladspaInstance = new LADSPAPluginFactory(); | 
| Chris@1429 | 49             _ladspaInstance->discoverPlugins(); | 
| Chris@1429 | 50         } | 
| Chris@1429 | 51         return _ladspaInstance; | 
| Chris@0 | 52     } else if (pluginType == "dssi") { | 
| Chris@1429 | 53         if (!_dssiInstance) { | 
| Chris@1429 | 54 //            SVDEBUG << "RealTimePluginFactory::instance(" << pluginType//                      << "): creating new DSSIPluginFactory" << endl; | 
| Chris@1429 | 55             _dssiInstance = new DSSIPluginFactory(); | 
| Chris@1429 | 56             _dssiInstance->discoverPlugins(); | 
| Chris@1429 | 57         } | 
| Chris@1429 | 58         return _dssiInstance; | 
| Chris@0 | 59     } | 
| Chris@1429 | 60 | 
| Chris@0 | 61     else return 0; | 
| Chris@0 | 62 } | 
| Chris@0 | 63 | 
| Chris@0 | 64 RealTimePluginFactory * | 
| Chris@0 | 65 RealTimePluginFactory::instanceFor(QString identifier) | 
| Chris@0 | 66 { | 
| Chris@0 | 67     QString type, soName, label; | 
| Chris@0 | 68     PluginIdentifier::parseIdentifier(identifier, type, soName, label); | 
| Chris@0 | 69     return instance(type); | 
| Chris@0 | 70 } | 
| Chris@0 | 71 | 
| Chris@0 | 72 std::vector<QString> | 
| Chris@0 | 73 RealTimePluginFactory::getAllPluginIdentifiers() | 
| Chris@0 | 74 { | 
| Chris@408 | 75     Profiler profiler("RealTimePluginFactory::getAllPluginIdentifiers"); | 
| Chris@408 | 76 | 
| Chris@0 | 77     RealTimePluginFactory *factory; | 
| Chris@0 | 78     std::vector<QString> rv; | 
| Chris@0 | 79 | 
| Chris@0 | 80     // Query DSSI plugins before LADSPA ones. | 
| Chris@0 | 81     // This is to provide for the interesting possibility of plugins | 
| Chris@0 | 82     // providing either DSSI or LADSPA versions of themselves, | 
| Chris@0 | 83     // returning both versions if the LADSPA identifiers are queried | 
| Chris@0 | 84     // first but only the DSSI version if the DSSI identifiers are | 
| Chris@0 | 85     // queried first. | 
| Chris@0 | 86 | 
| Chris@0 | 87     factory = instance("dssi"); | 
| Chris@0 | 88     if (factory) { | 
| Chris@1429 | 89         const std::vector<QString> &tmp = factory->getPluginIdentifiers(); | 
| Chris@1429 | 90         for (size_t i = 0; i < tmp.size(); ++i) { | 
| Chris@1429 | 91             rv.push_back(tmp[i]); | 
| Chris@1429 | 92         } | 
| Chris@0 | 93     } | 
| Chris@0 | 94 | 
| Chris@0 | 95     factory = instance("ladspa"); | 
| Chris@0 | 96     if (factory) { | 
| Chris@1429 | 97         const std::vector<QString> &tmp = factory->getPluginIdentifiers(); | 
| Chris@1429 | 98         for (size_t i = 0; i < tmp.size(); ++i) { | 
| Chris@1429 | 99             rv.push_back(tmp[i]); | 
| Chris@1429 | 100         } | 
| Chris@0 | 101     } | 
| Chris@0 | 102 | 
| Chris@0 | 103     // Plugins can change the locale, revert it to default. | 
| Chris@303 | 104     RestoreStartupLocale(); | 
| Chris@303 | 105 | 
| Chris@0 | 106     return rv; | 
| Chris@0 | 107 } | 
| Chris@0 | 108 | 
| Chris@0 | 109 void | 
| Chris@0 | 110 RealTimePluginFactory::enumerateAllPlugins(std::vector<QString> &list) | 
| Chris@0 | 111 { | 
| Chris@408 | 112     Profiler profiler("RealTimePluginFactory::enumerateAllPlugins"); | 
| Chris@408 | 113 | 
| Chris@0 | 114     RealTimePluginFactory *factory; | 
| Chris@0 | 115 | 
| Chris@0 | 116     // Query DSSI plugins before LADSPA ones. | 
| Chris@0 | 117     // This is to provide for the interesting possibility of plugins | 
| Chris@0 | 118     // providing either DSSI or LADSPA versions of themselves, | 
| Chris@0 | 119     // returning both versions if the LADSPA identifiers are queried | 
| Chris@0 | 120     // first but only the DSSI version if the DSSI identifiers are | 
| Chris@0 | 121     // queried first. | 
| Chris@0 | 122 | 
| Chris@0 | 123     factory = instance("dssi"); | 
| Chris@0 | 124     if (factory) factory->enumeratePlugins(list); | 
| Chris@0 | 125 | 
| Chris@0 | 126     factory = instance("ladspa"); | 
| Chris@0 | 127     if (factory) factory->enumeratePlugins(list); | 
| Chris@0 | 128 | 
| Chris@0 | 129     // Plugins can change the locale, revert it to default. | 
| Chris@608 | 130     RestoreStartupLocale(); | 
| Chris@0 | 131 } | 
| Chris@0 | 132 |