/* This file is part of the KDE project. Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). This library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 2.1 or 3 of the License. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "backend.h" #include #include #include #include #include "backendheader.h" #include "videowidget.h" #include "audiooutput.h" #include "mediaobject.h" #include "videoeffect.h" #include "medianode.h" #include "audiodevice.h" #include "audiomixer.h" #include "backendinfo.h" #include "quicktimeaudioplayer.h" #include "audiograph.h" #include "audiomixer.h" #include "audiooutput.h" #include "audiosplitter.h" #include "audioeffects.h" QT_BEGIN_NAMESPACE namespace Phonon { namespace QT7 { Backend::Backend() { IMPLEMENTED << "Creating backend QT7"; } Backend::Backend(QObject *parent, const QStringList &) : QObject(parent) { IMPLEMENTED << "Creating backend QT7"; setProperty("identifier", QLatin1String("Mac OS X/QuickTime7")); setProperty("backendName", QLatin1String("Mac OS X/QuickTime7")); setProperty("backendComment", QLatin1String("Developed by Trolltech")); setProperty("backendVersion", QLatin1String("0.1")); setProperty("backendIcon", QLatin1String("")); setProperty("backendWebsite", QLatin1String("http://qt.nokia.com/")); } Backend::~Backend() { } bool Backend::quickTime7Available() { static bool ok = BackendInfo::isQuickTimeVersionAvailable(0x0700); if (!ok){ static bool messageWritten = false; if (!messageWritten && qgetenv("PHONON_DEBUG") == "1"){ messageWritten = true; QString str("WARNING: Phonon backend plugin need QuickTime 7 or newer to work."); str += " This computer has version " + BackendInfo::quickTimeVersionString() + " installed."; qWarning(str.toAscii().data()); } return false; } return true; } QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const QList &args) { if (!quickTime7Available()) return 0; switch (c) { case MediaObjectClass: IMPLEMENTED << "Creating new MediaObjectClass."; return new MediaObject(parent); break; case VolumeFaderEffectClass: IMPLEMENTED << "Creating new VolumeFaderEffectClass."; return new AudioMixer(parent); break; case AudioOutputClass: IMPLEMENTED << "Creating new AudioOutputClass."; return new AudioOutput(parent); break; case AudioDataOutputClass: NOT_IMPLEMENTED << "Creating new AudioDataOutputClass."; break; case VisualizationClass: NOT_IMPLEMENTED << "Creating new VisualizationClass."; break; case VideoDataOutputClass: NOT_IMPLEMENTED << "Creating new VideoDataOutputClass."; break; case EffectClass: IMPLEMENTED << "Creating new EffectClass."; return new AudioEffect(args[0].toInt()); break; case VideoWidgetClass: IMPLEMENTED << "Creating new VideoWidget."; return new VideoWidget(parent); break; default: return 0; } return 0; } bool Backend::startConnectionChange(QSet objects) { IMPLEMENTED; QList notifiedGraphs; for (int i=0; i(objects.values()[i]); if (node && node->m_audioGraph && !notifiedGraphs.contains(node->m_audioGraph)){ MediaNodeEvent event(MediaNodeEvent::StartConnectionChange); node->m_audioGraph->notify(&event); notifiedGraphs << node->m_audioGraph; } } return true; } bool Backend::endConnectionChange(QSet objects) { IMPLEMENTED; QList notifiedGraphs; for (int i=0; i(objects.values()[i]); if (node && node->m_audioGraph && !notifiedGraphs.contains(node->m_audioGraph)){ MediaNodeEvent event(MediaNodeEvent::EndConnectionChange); node->m_audioGraph->notify(&event); notifiedGraphs << node->m_audioGraph; } } return true; } bool Backend::connectNodes(QObject *aSource, QObject *aSink) { IMPLEMENTED; MediaNode *source = qobject_cast(aSource); if (!source) return false; MediaNode *sink = qobject_cast(aSink); if (!sink) return false; return source->connectToSink(sink); } bool Backend::disconnectNodes(QObject *aSource, QObject *aSink) { IMPLEMENTED; MediaNode *source = qobject_cast(aSource); if (!source) return false; MediaNode *sink = qobject_cast(aSink); if (!sink) return false; return source->disconnectToSink(sink); } QStringList Backend::availableMimeTypes() const { IMPLEMENTED; return BackendInfo::quickTimeMimeTypes(BackendInfo::In); } /** * Returns a set of indexes that acts as identifiers for the various properties * this backend supports for the given ObjectDescriptionType. * More information for a given property/index can be * looked up in Backend::objectDescriptionProperties(...). */ QList Backend::objectDescriptionIndexes(ObjectDescriptionType type) const { QList ret; switch (type){ case AudioOutputDeviceType:{ IMPLEMENTED_SILENT << "Creating index set for type: AudioOutputDeviceType"; QList devices = AudioDevice::devices(AudioDevice::Out); for (int i=0; i devices = AudioDevice::devices(AudioDevice::In).keys(); for (int i=0; i filters = objc_getCiFilterInfo()->filterDisplayNames; for (int i=0; i Backend::objectDescriptionProperties(ObjectDescriptionType type, int index) const { QHash ret; switch (type){ case AudioOutputDeviceType:{ IMPLEMENTED_SILENT << "Creating description hash for type: AudioOutputDeviceType"; ret.insert("name", AudioDevice::deviceSourceNameElseDeviceName(index)); ret.insert("description", AudioDevice::deviceNameElseDeviceSourceName(index)); break; } case EffectType:{ AudioEffect e(index); ret.insert("name", e.name()); ret.insert("description", e.description()); break; } #if 0 // will be awailable in a later version of phonon. case VideoEffectType:{ // Get list of effects, pick out filter at index, and return its name: IMPLEMENTED_SILENT << "Creating description hash for type: VideoEffectType"; QList filters = objc_getCiFilterInfo()->filterDisplayNames; ret.insert("name", filters[index]); case AudioCaptureDeviceType:{ IMPLEMENTED_SILENT << "Creating description hash for type: AudioCaptureDeviceType"; QMap devices = AudioDevice::devices(AudioDevice::In); ret.insert("name", devices.value(index)); break; } #endif default: NOT_IMPLEMENTED; break; } return ret; } Q_EXPORT_PLUGIN2(phonon_qt7, Backend) }} QT_END_NAMESPACE #include "moc_backend.cpp"