| /* This file is part of the KDE project |
| Copyright (C) 2006-2007 Matthias Kretz <kretz@kde.org> |
| |
| 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 of the License, or (at your option) version 3, or any |
| later version accepted by the membership of KDE e.V. (or its |
| successor approved by the membership of KDE e.V.), Nokia Corporation |
| (or its successors, if any) and the KDE Free Qt Foundation, which shall |
| act as a proxy defined in Section 6 of version 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 <http://www.gnu.org/licenses/>. |
| |
| */ |
| |
| #ifndef PHONON_BACKENDINTERFACE_H |
| #define PHONON_BACKENDINTERFACE_H |
| |
| #include "phonon_export.h" |
| #include "objectdescription.h" |
| |
| #include <QtCore/QtGlobal> |
| #include <QtCore/QSet> |
| |
| QT_BEGIN_HEADER |
| QT_BEGIN_NAMESPACE |
| |
| class QVariant; |
| |
| namespace Phonon |
| { |
| |
| /** \class BackendInterface backendinterface.h Phonon/BackendInterface |
| * \short Main Backend class interface |
| * |
| * This interface defines the main factory of the backend. The createObject function creates all the |
| * objects needed by the frontend. |
| * |
| * The objectDescriptionIndexes and objectDescriptionProperties functions return information about |
| * available devices, effects and codecs. |
| * |
| * An implementation could look like this: |
| * \code |
| * QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const QList<QVariant> &args) |
| * { |
| * switch (c) { |
| * case MediaObjectClass: |
| * return new MediaObject(parent); |
| * case VolumeFaderEffectClass: |
| * return new VolumeFaderEffect(parent); |
| * case AudioOutputClass: |
| * return new AudioOutput(parent); |
| * case AudioDataOutputClass: |
| * return new AudioDataOutput(parent); |
| * case VisualizationClass: |
| * return new Visualization(parent); |
| * case VideoDataOutputClass: |
| * return new VideoDataOutput(parent); |
| * case EffectClass: |
| * return new Effect(args[0].toInt(), parent); |
| * case VideoWidgetClass: |
| * return new VideoWidget(qobject_cast<QWidget *>(parent)); |
| * } |
| * return 0; |
| * } |
| * |
| * QSet<int> Backend::objectDescriptionIndexes(ObjectDescriptionType type) const |
| * { |
| * QSet<int> set; |
| * switch(type) |
| * { |
| * case Phonon::AudioOutputDeviceType: |
| * // use AudioDeviceEnumerator to list ALSA and OSS devices |
| * set << 10000 << 10001; |
| * break; |
| * case Phonon::AudioCaptureDeviceType: |
| * set << 20000 << 20001; |
| * break; |
| * case Phonon::VideoOutputDeviceType: |
| * break; |
| * case Phonon::VideoCaptureDeviceType: |
| * set << 30000 << 30001; |
| * break; |
| * case Phonon::VisualizationType: |
| * case Phonon::AudioCodecType: |
| * case Phonon::VideoCodecType: |
| * case Phonon::ContainerFormatType: |
| * break; |
| * case Phonon::EffectType: |
| * set << 0x7F000001; |
| * break; |
| * } |
| * return set; |
| * } |
| * |
| * QHash<QByteArray, QVariant> Backend::objectDescriptionProperties(ObjectDescriptionType type, int index) const |
| * { |
| * QHash<QByteArray, QVariant> ret; |
| * switch (type) { |
| * case Phonon::AudioOutputDeviceType: |
| * switch (index) { |
| * case 10000: |
| * ret.insert("name", QLatin1String("internal Soundcard")); |
| * break; |
| * case 10001: |
| * ret.insert("name", QLatin1String("USB Headset")); |
| * ret.insert("icon", KIcon("usb-headset")); |
| * ret.insert("available", false); |
| * break; |
| * } |
| * break; |
| * case Phonon::AudioCaptureDeviceType: |
| * switch (index) { |
| * case 20000: |
| * ret.insert("name", QLatin1String("Soundcard")); |
| * ret.insert("description", QLatin1String("first description")); |
| * break; |
| * case 20001: |
| * ret.insert("name", QLatin1String("DV")); |
| * ret.insert("description", QLatin1String("second description")); |
| * break; |
| * } |
| * break; |
| * case Phonon::VideoOutputDeviceType: |
| * break; |
| * case Phonon::VideoCaptureDeviceType: |
| * switch (index) { |
| * case 30000: |
| * ret.insert("name", QLatin1String("USB Webcam")); |
| * ret.insert("description", QLatin1String("first description")); |
| * break; |
| * case 30001: |
| * ret.insert("name", QLatin1String("DV")); |
| * ret.insert("description", QLatin1String("second description")); |
| * break; |
| * } |
| * break; |
| * case Phonon::VisualizationType: |
| * break; |
| * case Phonon::AudioCodecType: |
| * break; |
| * case Phonon::VideoCodecType: |
| * break; |
| * case Phonon::ContainerFormatType: |
| * break; |
| * case Phonon::EffectType: |
| * switch (index) { |
| * case 0x7F000001: |
| * ret.insert("name", QLatin1String("Delay")); |
| * ret.insert("description", QLatin1String("Simple delay effect with time, feedback and level controls.")); |
| * break; |
| * } |
| * break; |
| * } |
| * return ret; |
| * } |
| * \endcode |
| * |
| * \author Matthias Kretz <kretz@kde.org> |
| */ |
| class BackendInterface |
| { |
| public: |
| /** |
| * \internal |
| * |
| * Silence gcc's warning. |
| */ |
| virtual ~BackendInterface() {} |
| |
| /** |
| * Classes that the createObject function has to handle. |
| */ |
| enum Class { |
| /** |
| * Request to return a %MediaObject object. |
| */ |
| MediaObjectClass, |
| /** |
| * Request to return a %VolumeFaderEffect object. |
| */ |
| VolumeFaderEffectClass, |
| /** |
| * Request to return a %AudioOutput object. |
| */ |
| AudioOutputClass, |
| /** |
| * Request to return a %AudioDataOutput object. |
| */ |
| AudioDataOutputClass, |
| /** |
| * Request to return a %Visualization object. |
| */ |
| VisualizationClass, |
| /** |
| * Request to return a %VideoDataOutput object. |
| */ |
| VideoDataOutputClass, |
| /** |
| * Request to return a %Effect object. |
| * |
| * Takes an additional int that specifies the effect Id. |
| */ |
| EffectClass, |
| /** |
| * Request to return a %VideoWidget object. |
| */ |
| VideoWidgetClass |
| }; |
| |
| /** |
| * Returns a new instance of the requested class. |
| * |
| * \param c The requested class. |
| * \param parent The parent object. |
| * \param args Additional arguments (documented in \ref Class). |
| */ |
| virtual QObject *createObject(Class c, QObject *parent, const QList<QVariant> &args = QList<QVariant>()) = 0; |
| |
| /** |
| * Returns the unique identifiers for the devices/effects/codecs of the given \p type. |
| * |
| * \param type see \ref ObjectDescriptionType |
| */ |
| virtual QList<int> objectDescriptionIndexes(ObjectDescriptionType type) const = 0; |
| |
| /** |
| * Given a unique identifier that was returned from objectDescriptionIndexes this function |
| * returns a hash mapping property names to values. |
| * |
| * The property "name" must always be present. All other properties are optional. |
| * |
| * List of possible properties: |
| * \li \c \b name: The name of the device/effect/codec/... |
| * \li \c \b description: A text explaining what this device/effect/codec/... is/can do |
| * \li \c \b icon: An icon name (using the freedesktop naming scheme) or a QIcon for this |
| * device/effect/codec/... |
| * \li \c \b available: A bool telling whether the device is present or unplugged. |
| * |
| * \param type see \ref ObjectDescriptionType |
| * \param index The unique identifier that is returned from objectDescriptionIndexes |
| */ |
| virtual QHash<QByteArray, QVariant> objectDescriptionProperties(ObjectDescriptionType type, int index) const = 0; |
| |
| /** |
| * When this function is called the nodes given in the parameter list should not lose any |
| * signal data when connections are changed. |
| */ |
| virtual bool startConnectionChange(QSet<QObject *>) = 0; |
| |
| /** |
| * Defines a signal connection between the two given nodes. |
| */ |
| virtual bool connectNodes(QObject *, QObject *) = 0; |
| |
| /** |
| * Cuts a signal connection between the two given nodes. |
| */ |
| virtual bool disconnectNodes(QObject *, QObject *) = 0; |
| |
| /** |
| * When this function is called the nodes given in the parameter list may lose |
| * signal data when a port is not connected. |
| */ |
| virtual bool endConnectionChange(QSet<QObject *>) = 0; |
| |
| /** |
| * gets all available mime types |
| */ |
| virtual QStringList availableMimeTypes() const = 0; |
| |
| }; |
| } // namespace Phonon |
| |
| Q_DECLARE_INTERFACE(Phonon::BackendInterface, "BackendInterface3.phonon.kde.org") |
| |
| QT_END_NAMESPACE |
| QT_END_HEADER |
| |
| #endif // PHONON_BACKENDINTERFACE_H |