summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/phonon/phonon/objectdescription.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/phonon/phonon/objectdescription.h')
-rw-r--r--src/3rdparty/phonon/phonon/objectdescription.h342
1 files changed, 342 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/phonon/objectdescription.h b/src/3rdparty/phonon/phonon/objectdescription.h
new file mode 100644
index 0000000000..108f02c9fa
--- /dev/null
+++ b/src/3rdparty/phonon/phonon/objectdescription.h
@@ -0,0 +1,342 @@
+/* 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.), Trolltech ASA
+ (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_OBJECTDESCRIPTION_H
+#define PHONON_OBJECTDESCRIPTION_H
+
+#include "phonon_export.h"
+
+#include <QtCore/QExplicitlySharedDataPointer>
+#include <QtCore/QtDebug>
+#include <QtCore/QList>
+#include <QtCore/QSharedData>
+#include <QtCore/QString>
+#include <QtCore/QVariant>
+
+QT_BEGIN_HEADER
+QT_BEGIN_NAMESPACE
+
+namespace Phonon
+{
+ class ObjectDescriptionPrivate;
+
+ /**
+ * Defines the type of information that is contained in a ObjectDescription
+ * object.
+ *
+ * \ingroup Backend
+ */
+ enum ObjectDescriptionType
+ {
+ /**
+ * Audio output devices. This can be soundcards (with different drivers), soundservers or
+ * other virtual outputs like playback on a different computer on the
+ * network.
+ *
+ * For Hardware devices the backend should use libkaudiodevicelist
+ * (AudioDevice and AudioDeviceEnumerator) which will list removable
+ * devices even when they are unplugged and provide a unique identifier
+ * that can make backends use the same identifiers.
+ */
+ AudioOutputDeviceType,
+
+ /**
+ * Lists all processing effects the backend supports.
+ */
+ EffectType,
+ AudioChannelType,
+ SubtitleType,
+
+ /**
+ * Audio capture devices. This can be soundcards (with different drivers), soundservers or
+ * other virtual inputs like capture on a different computer on the
+ * network.
+ *
+ * For Hardware devices the backend should use libkaudiodevicelist
+ * (AudioDevice and AudioDeviceEnumerator) which will list removable
+ * devices even when they are unplugged and provide a unique identifier
+ * that can make backends use the same identifiers.
+ */
+ AudioCaptureDeviceType
+
+ //VideoOutputDeviceType,
+ //VideoCaptureDeviceType,
+ //AudioCodecType,
+ //VideoCodecType,
+ //ContainerFormatType,
+ //VisualizationType,
+ };
+
+/** \internal
+ * \class ObjectDescriptionData objectdescription.h Phonon/ObjectDescription
+ * \brief Data class for objects describing devices or features of the backend.
+ *
+ * \author Matthias Kretz <kretz@kde.org>
+ * \see BackendCapabilities
+ */
+class PHONON_EXPORT ObjectDescriptionData : public QSharedData //krazy:exclude=dpointer (it's protected, which should be fine for this type of class)
+{
+ public:
+ /**
+ * Returns \c true if this ObjectDescription describes the same
+ * as \p otherDescription; otherwise returns \c false.
+ */
+ bool operator==(const ObjectDescriptionData &otherDescription) const;
+
+ /**
+ * Returns the name of the capture source.
+ *
+ * \return A string that should be presented to the user to
+ * choose the capture source.
+ */
+ QString name() const;
+
+ /**
+ * Returns a description of the capture source. This text should
+ * make clear what sound source this is, which is sometimes hard
+ * to describe or understand from just the name.
+ *
+ * \return A string describing the capture source.
+ */
+ QString description() const;
+
+ /**
+ * Returns a named property.
+ *
+ * If the property is not set an invalid value is returned.
+ *
+ * \see propertyNames()
+ */
+ QVariant property(const char *name) const;
+
+ /**
+ * Returns all names that return valid data when property() is called.
+ *
+ * \see property()
+ */
+ QList<QByteArray> propertyNames() const;
+
+ /**
+ * Returns \c true if the Tuple is valid (index != -1); otherwise returns
+ * \c false.
+ */
+ bool isValid() const;
+
+ /**
+ * A unique identifier for this device/. Used internally
+ * to distinguish between the devices/.
+ *
+ * \return An integer that uniquely identifies every device/
+ */
+ int index() const;
+
+ static ObjectDescriptionData *fromIndex(ObjectDescriptionType type, int index);
+
+ ~ObjectDescriptionData();
+
+ ObjectDescriptionData(ObjectDescriptionPrivate * = 0);
+ ObjectDescriptionData(int index, const QHash<QByteArray, QVariant> &properties);
+
+ protected:
+ ObjectDescriptionPrivate *const d;
+
+ private:
+ ObjectDescriptionData &operator=(const ObjectDescriptionData &rhs);
+};
+
+template<ObjectDescriptionType T> class ObjectDescriptionModel;
+
+/** \class ObjectDescription objectdescription.h Phonon/ObjectDescription
+ * \short Provides a tuple of enduser visible name and description.
+ *
+ * Some parts give the enduser choices, e.g. what source to capture audio from.
+ * These choices are described by the name and description methods of this class
+ * and identified with the id method. Subclasses then define additional
+ * information like which audio and video choices belong together.
+ *
+ * \ingroup Frontend
+ * \author Matthias Kretz <kretz@kde.org>
+ */
+template<ObjectDescriptionType T>
+class ObjectDescription
+{
+ public:
+ /**
+ * Returns a new description object that describes the
+ * device/effect/codec/... with the given \p index.
+ */
+ static inline ObjectDescription<T> fromIndex(int index) { //krazy:exclude=inline
+ return ObjectDescription<T>(QExplicitlySharedDataPointer<ObjectDescriptionData>(ObjectDescriptionData::fromIndex(T, index)));
+ }
+
+ /**
+ * Returns \c true if this ObjectDescription describes the same
+ * as \p otherDescription; otherwise returns \c false.
+ */
+ inline bool operator==(const ObjectDescription &otherDescription) const { //krazy:exclude=inline
+ return *d == *otherDescription.d;
+ }
+
+ /**
+ * Returns \c false if this ObjectDescription describes the same
+ * as \p otherDescription; otherwise returns \c true.
+ */
+ inline bool operator!=(const ObjectDescription &otherDescription) const { //krazy:exclude=inline
+ return !operator==(otherDescription);
+ }
+
+ /**
+ * Returns the name of the capture source.
+ *
+ * \return A string that should be presented to the user to
+ * choose the capture source.
+ */
+ inline QString name() const { return d->name(); } //krazy:exclude=inline
+
+ /**
+ * Returns a description of the capture source. This text should
+ * make clear what sound source this is, which is sometimes hard
+ * to describe or understand from just the name.
+ *
+ * \return A string describing the capture source.
+ */
+ inline QString description() const { return d->description(); } //krazy:exclude=inline
+
+ /**
+ * Returns a named property.
+ *
+ * If the property is not set an invalid value is returned.
+ *
+ * \see propertyNames()
+ */
+ inline QVariant property(const char *name) const { return d->property(name); } //krazy:exclude=inline
+
+ /**
+ * Returns all names that return valid data when property() is called.
+ *
+ * \see property()
+ */
+ inline QList<QByteArray> propertyNames() const { return d->propertyNames(); } //krazy:exclude=inline
+
+ /**
+ * Returns \c true if the Tuple is valid (index != -1); otherwise returns
+ * \c false.
+ */
+ inline bool isValid() const { return d->isValid(); } //krazy:exclude=inline
+
+ /**
+ * A unique identifier for this device/. Used internally
+ * to distinguish between the devices/.
+ *
+ * \return An integer that uniquely identifies every device/
+ */
+ inline int index() const { return d->index(); } //krazy:exclude=inline
+
+ ObjectDescription() : d(new ObjectDescriptionData(0)) {}
+ ObjectDescription(int index, const QHash<QByteArray, QVariant> &properties) : d(new ObjectDescriptionData(index, properties)) {}
+
+ protected:
+ friend class ObjectDescriptionModel<T>;
+ ObjectDescription(const QExplicitlySharedDataPointer<ObjectDescriptionData> &dd) : d(dd) {}
+ QExplicitlySharedDataPointer<ObjectDescriptionData> d;
+};
+
+template<ObjectDescriptionType T>
+inline QDebug operator<<(QDebug s, const ObjectDescription<T> &o) //krazy:exclude=inline
+{
+ return s << o.name();
+}
+
+/**
+ * \ingroup BackendInformation
+ */
+typedef ObjectDescription<AudioOutputDeviceType> AudioOutputDevice;
+/**
+ * \ingroup BackendInformation
+ */
+#ifndef QT_NO_PHONON_AUDIOCAPTURE
+typedef ObjectDescription<AudioCaptureDeviceType> AudioCaptureDevice;
+#endif //QT_NO_PHONON_AUDIOCAPTURE
+/**
+ * \ingroup BackendInformation
+ */
+//typedef ObjectDescription<VideoOutputDeviceType> VideoOutputDevice;
+/**
+ * \ingroup BackendInformation
+ */
+//typedef ObjectDescription<VideoCaptureDeviceType> VideoCaptureDevice;
+/**
+ * \ingroup BackendInformation
+ */
+#ifndef QT_NO_PHONON_EFFECT
+typedef ObjectDescription<EffectType> EffectDescription;
+#endif //QT_NO_PHONON_EFFECT
+
+/**
+ * \ingroup BackendInformation
+ */
+//typedef ObjectDescription<AudioCodecType> AudioCodecDescription;
+/**
+ * \ingroup BackendInformation
+ */
+//typedef ObjectDescription<VideoCodecType> VideoCodecDescription;
+/**
+ * \ingroup BackendInformation
+ */
+//typedef ObjectDescription<ContainerFormatType> ContainerFormatDescription;
+/**
+ * \ingroup BackendInformation
+ */
+//typedef ObjectDescription<VisualizationType> VisualizationDescription;
+#ifndef QT_NO_PHONON_MEDIACONTROLLER
+typedef ObjectDescription<AudioChannelType> AudioChannelDescription;
+typedef ObjectDescription<SubtitleType> SubtitleDescription;
+#endif //QT_NO_PHONON_MEDIACONTROLLER
+
+} //namespace Phonon
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(Phonon::AudioOutputDevice)
+Q_DECLARE_METATYPE(QList<Phonon::AudioOutputDevice>)
+
+#ifndef QT_NO_PHONON_AUDIOCAPTURE
+Q_DECLARE_METATYPE(Phonon::AudioCaptureDevice)
+Q_DECLARE_METATYPE(QList<Phonon::AudioCaptureDevice>)
+#endif //QT_NO_PHONON_AUDIOCAPTURE
+
+#ifndef QT_NO_PHONON_EFFECT
+Q_DECLARE_METATYPE(QList<Phonon::EffectDescription>)
+Q_DECLARE_METATYPE(Phonon::EffectDescription)
+#endif //QT_NO_PHONON_EFFECT
+
+
+#ifndef QT_NO_PHONON_MEDIACONTROLLER
+Q_DECLARE_METATYPE(Phonon::AudioChannelDescription)
+Q_DECLARE_METATYPE(Phonon::SubtitleDescription)
+Q_DECLARE_METATYPE(QList<Phonon::AudioChannelDescription>)
+Q_DECLARE_METATYPE(QList<Phonon::SubtitleDescription>)
+#endif //QT_NO_PHONON_MEDIACONTROLLER
+
+QT_END_HEADER
+
+#endif // PHONON_OBJECTDESCRIPTION_H