QList<EffectDescription> BackendCapabilities::availableAudioEffects() { BackendInterface *backendIface = qobject_cast<BackendInterface *>(Factory::backend()); QList<EffectDescription> ret; if (backendIface) { const QList<int> deviceIndexes = backendIface->objectDescriptionIndexes(Phonon::EffectType); for (int i = 0; i < deviceIndexes.count(); ++i) { ret.append(EffectDescription::fromIndex(deviceIndexes.at(i))); } } return ret; }
void BackendBuilder::fillPlugins (BackendInterface & b) const { for (auto const & plugin : toAdd) { b.addPlugin (plugin); } }
ObjectDescriptionData *ObjectDescriptionData::fromIndex(ObjectDescriptionType type, int index) { bool is_audio_device = (AudioOutputDeviceType == type || AudioCaptureDeviceType == type); PulseSupport *pulse = PulseSupport::getInstance(); if (is_audio_device && pulse->isActive()) { QList<int> indexes = pulse->objectDescriptionIndexes(type); if (indexes.contains(index)) { QHash<QByteArray, QVariant> properties = pulse->objectDescriptionProperties(type, index); return new ObjectDescriptionData(index, properties); } } else { BackendInterface *iface = qobject_cast<BackendInterface *>(Factory::backend()); // prefer to get the ObjectDescriptionData from the platform plugin for audio devices #ifndef QT_NO_PHONON_PLATFORMPLUGIN if (is_audio_device) { PlatformPlugin *platformPlugin = Factory::platformPlugin(); if (platformPlugin) { QList<int> indexes = platformPlugin->objectDescriptionIndexes(type); if (indexes.contains(index)) { QHash<QByteArray, QVariant> properties = platformPlugin->objectDescriptionProperties(type, index); return new ObjectDescriptionData(index, properties); } } } #endif //QT_NO_PHONON_PLATFORMPLUGIN if (iface) { QList<int> indexes = iface->objectDescriptionIndexes(type); if (indexes.contains(index)) { QHash<QByteArray, QVariant> properties = iface->objectDescriptionProperties(type, index); return new ObjectDescriptionData(index, properties); } } } return new ObjectDescriptionData(0); // invalid }
foreach (const QString &dir, dirsToCheck) { QVector<KPluginMetaData> metadataList = KPluginLoader::findPlugins(dir, [=](const KPluginMetaData &data) { return data.serviceTypes().contains("artikulate/libsound/backend"); }); foreach (const auto &metadata, metadataList) { loader.setFileName(metadata.fileName()); qCDebug(LIBSOUND_LOG) << "Load Plugin: " << metadata.name(); if (!loader.load()) { qCCritical(LIBSOUND_LOG) << "Error while loading plugin: " << metadata.name(); } KPluginFactory *factory = KPluginLoader(loader.fileName()).factory(); if (!factory) { qCCritical(LIBSOUND_LOG) << "Could not load plugin:" << metadata.name(); continue; } BackendInterface *plugin = factory->create<BackendInterface>(parent, QList< QVariant >()); if (plugin->outputBackend()) { m_backendList.append(plugin->outputBackend()); } }