QObject *Factory::backend(bool createWhenNull) { if (globalFactory.isDestroyed()) { return 0; } if (createWhenNull && globalFactory->m_backendObject == 0) { globalFactory->createBackend(); // XXX: might create "reentrancy" problems: // a method calls this method and is called again because the // backendChanged signal is emitted emit globalFactory->backendChanged(); } return globalFactory->m_backendObject; }
void Factory::deregisterFrontendObject(MediaNodePrivate *bp) { // The Factory can already be cleaned up while there are other frontend objects still alive. // When those are deleted they'll call deregisterFrontendObject through ~BasePrivate if (!globalFactory.isDestroyed()) { globalFactory->mediaNodePrivateList.removeAll(bp); } }
bool Factory::isMimeTypeAvailable(const QString &mimeType) { #ifndef QT_NO_PHONON_PLATFORMPLUGIN PlatformPlugin *f = globalFactory->platformPlugin(); if (f) { return f->isMimeTypeAvailable(mimeType); } #else Q_UNUSED(mimeType); #endif //QT_NO_PHONON_PLATFORMPLUGIN return true; // the MIME type might be supported, let BackendCapabilities find out }
bool FactoryPrivate::createBackend() { Q_ASSERT(m_backendObject == 0); #ifndef QT_NO_PHONON_PLATFORMPLUGIN PlatformPlugin *f = globalFactory->platformPlugin(); if (f) { m_backendObject = f->createBackend(); } #endif //QT_NO_PHONON_PLATFORMPLUGIN if (!m_backendObject) { ensureLibraryPathSet(); // could not load a backend through the platform plugin. Falling back to the default // (finding the first loadable backend). const QLatin1String suffix("/phonon_backend/"); foreach (QString libPath, QCoreApplication::libraryPaths()) { libPath += suffix; const QDir dir(libPath); if (!dir.exists()) { pDebug() << Q_FUNC_INFO << dir.absolutePath() << "does not exist"; continue; } foreach (const QString &pluginName, dir.entryList(QDir::Files)) { QPluginLoader pluginLoader(libPath + pluginName); if (!pluginLoader.load()) { pDebug() << Q_FUNC_INFO << " load failed:" << pluginLoader.errorString(); continue; } pDebug() << pluginLoader.instance(); m_backendObject = pluginLoader.instance(); if (m_backendObject) { break; } // no backend found, don't leave an unused plugin in memory pluginLoader.unload(); } if (m_backendObject) { break; } }
PlatformPlugin *Factory::platformPlugin() { return globalFactory->platformPlugin(); }
bool FactoryPrivate::createBackend() { #ifndef QT_NO_LIBRARY Q_ASSERT(m_backendObject == 0); #ifndef QT_NO_PHONON_PLATFORMPLUGIN PlatformPlugin *f = globalFactory->platformPlugin(); if (f) { m_backendObject = f->createBackend(); } #endif //QT_NO_PHONON_PLATFORMPLUGIN if (!m_backendObject) { ensureLibraryPathSet(); // could not load a backend through the platform plugin. Falling back to the default // (finding the first loadable backend). const QLatin1String suffix("/phonon_backend/"); const QStringList paths = QCoreApplication::libraryPaths(); for (int i = 0; i < paths.count(); ++i) { const QString libPath = paths.at(i) + suffix; const QDir dir(libPath); if (!dir.exists()) { pDebug() << Q_FUNC_INFO << dir.absolutePath() << "does not exist"; continue; } QStringList plugins(dir.entryList(QDir::Files)); #ifdef Q_OS_SYMBIAN /* On Symbian OS we might have two plugins, one which uses Symbian * MMF framework("mmf"), and one which uses Real Networks's * Helix("hxphonon"). We prefer the latter because it's more * sophisticated, so we make sure the Helix backend is attempted * to be loaded first, and the MMF backend is used for backup. */ { const int helix = plugins.indexOf(QLatin1String("hxphonon")); if (helix != -1) plugins.move(helix, 0); } #endif const QStringList files = dir.entryList(QDir::Files); for (int i = 0; i < files.count(); ++i) { QPluginLoader pluginLoader(libPath + files.at(i)); if (!pluginLoader.load()) { pDebug() << Q_FUNC_INFO << " load failed:" << pluginLoader.errorString(); continue; } pDebug() << pluginLoader.instance(); m_backendObject = pluginLoader.instance(); if (m_backendObject) { break; } // no backend found, don't leave an unused plugin in memory pluginLoader.unload(); } if (m_backendObject) { break; } } if (!m_backendObject) { pWarning() << Q_FUNC_INFO << "phonon backend plugin could not be loaded"; return false; } } connect(m_backendObject, SIGNAL(objectDescriptionChanged(ObjectDescriptionType)), SLOT(objectDescriptionChanged(ObjectDescriptionType))); return true; #else //QT_NO_LIBRARY pWarning() << Q_FUNC_INFO << "Trying to use Phonon with QT_NO_LIBRARY defined. " "That is currently not supported"; return false; #endif }