annotate plugin/RealTimePluginFactory.cpp @ 282:d9319859a4cf tip

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