summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/phonon/phonon/path.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/phonon/phonon/path.h')
-rw-r--r--src/3rdparty/phonon/phonon/path.h243
1 files changed, 243 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/phonon/path.h b/src/3rdparty/phonon/phonon/path.h
new file mode 100644
index 0000000000..eeabe82fbf
--- /dev/null
+++ b/src/3rdparty/phonon/phonon/path.h
@@ -0,0 +1,243 @@
+/* This file is part of the KDE project
+ Copyright (C) 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_PATH_H
+#define PHONON_PATH_H
+
+#include "phonon_export.h"
+#include "objectdescription.h"
+
+#include <QtCore/QExplicitlySharedDataPointer>
+
+QT_BEGIN_HEADER
+QT_BEGIN_NAMESPACE
+
+template<class T> class QList;
+
+namespace Phonon
+{
+
+class PathPrivate;
+class Effect;
+class MediaNode;
+
+/** \class Path path.h Phonon/Path
+ * \short Connection object providing convenient effect insertion
+ *
+ * \code
+MediaObject *media = new MediaObject;
+AudioOutput *output = new AudioOutput(Phonon::MusicCategory);
+Path path = Phonon::createPath(media, output);
+Q_ASSERT(path.isValid()); // for this simple case the path should always be
+ //valid - there are unit tests to ensure it
+// insert an effect
+QList<EffectDescription> effectList = BackendCapabilities::availableAudioEffects();
+if (!effectList.isEmpty()) {
+ Effect *effect = path.insertEffect(effectList.first());
+}
+ * \endcode
+ * \ingroup Playback
+ * \ingroup Recording
+ * \author Matthias Kretz <kretz@kde.org>
+ * \author Thierry Bastian <thierry.bastian@trolltech.com>
+ */
+class PHONON_EXPORT Path
+{
+ friend class FactoryPrivate;
+ public:
+ /**
+ * Destroys this reference to the Path. If the path was valid the connection is not broken
+ * as both the source and the sink MediaNodes still keep a reference to the Path.
+ *
+ * \see disconnect
+ */
+ ~Path();
+
+ /**
+ * Creates an invalid path.
+ *
+ * You can still make it a valid path by calling reconnect. To create a path you should use
+ * createPath, though.
+ *
+ * \see createPath
+ * \see isValid
+ */
+ Path();
+
+ /**
+ * Constructs a copy of the given path.
+ *
+ * This constructor is fast thanks to explicit sharing.
+ */
+ Path(const Path &);
+
+ /**
+ * Returns whether the path object connects two MediaNodes or not.
+ *
+ * \return \p true when the path connects two MediaNodes
+ * \return \p false when the path is disconnected
+ */
+ bool isValid() const;
+ //MediaStreamTypes mediaStreamTypes() const;
+
+#ifndef QT_NO_PHONON_EFFECT
+ /**
+ * Creates and inserts an effect into the path.
+ *
+ * You may insert effects of the same class as often as you like,
+ * but if you insert the same object, the call will fail.
+ *
+ * \param desc The EffectDescription object for the effect to be inserted.
+ *
+ * \param insertBefore If you already inserted an effect you can
+ * tell with this parameter in which order the data gets
+ * processed. If this is \c 0 the effect is appended at the end of
+ * the processing list. If the effect has not been inserted before
+ * the method will do nothing and return \c false.
+ *
+ * \return Returns a pointer to the effect object if it could be inserted
+ * at the specified position. If \c 0 is returned the effect was not
+ * inserted.
+ *
+ * \see removeEffect
+ * \see effects
+ */
+ Effect *insertEffect(const EffectDescription &desc, Effect *insertBefore = 0);
+
+ /**
+ * Inserts an effect into the path.
+ *
+ * You may insert effects of the same class as often as you like,
+ * but if you insert the same object, the call will fail.
+ *
+ * \param newEffect An Effect object.
+ *
+ * \param insertBefore If you already inserted an effect you can
+ * tell with this parameter in which order the data gets
+ * processed. If this is \c 0 the effect is appended at the end of
+ * the processing list. If the effect has not been inserted before
+ * the method will do nothing and return \c false.
+ *
+ * \return Returns whether the effect could be inserted at the
+ * specified position. If \c false is returned the effect was not
+ * inserted.
+ *
+ * \see removeEffect
+ * \see effects
+ */
+ bool insertEffect(Effect *newEffect, Effect *insertBefore = 0);
+
+ /**
+ * Removes an effect from the path.
+ *
+ * If the effect gets deleted while it is still connected the effect
+ * will be removed automatically.
+ *
+ * \param effect The effect to be removed.
+ *
+ * \return Returns whether the call was successful. If it returns
+ * \c false the effect could not be found in the path, meaning it
+ * has not been inserted before.
+ *
+ * \see insertEffect
+ * \see effects
+ */
+ bool removeEffect(Effect *effect);
+
+ /**
+ * Returns a list of Effect objects that are currently
+ * used as effects. The order in the list determines the order the
+ * signal is sent through the effects.
+ *
+ * \return A list with all current effects.
+ *
+ * \see insertEffect
+ * \see removeEffect
+ */
+ QList<Effect *> effects() const;
+#endif //QT_NO_PHONON_EFFECT
+
+ /**
+ * Tries to change the MediaNodes the path is connected to.
+ *
+ * If reconnect fails the old connection is kept.
+ */
+ bool reconnect(MediaNode *source, MediaNode *sink);
+
+ /**
+ * Disconnects the path from the MediaNodes it was connected to. This invalidates the path
+ * (isValid returns \p false then).
+ */
+ bool disconnect();
+
+ /**
+ * Assigns \p p to this Path and returns a reference to this Path.
+ *
+ * This operation is fast thanks to explicit sharing.
+ */
+ Path &operator=(const Path &p);
+
+ /**
+ * Returns \p true if this Path is equal to \p p; otherwise returns \p false;
+ */
+ bool operator==(const Path &p) const;
+
+ /**
+ * Returns \p true if this Path is not equal to \p p; otherwise returns \p false;
+ */
+ bool operator!=(const Path &p) const;
+
+ /**
+ * Returns the source MediaNode used by the path.
+ */
+ MediaNode *source() const;
+
+ /**
+ * Returns the sink MediaNode used by the path.
+ */
+ MediaNode *sink() const;
+
+
+ protected:
+ friend class PathPrivate;
+ QExplicitlySharedDataPointer<PathPrivate> d;
+};
+
+/**
+ * \relates Path
+ * Creates a new Path connecting two MediaNodes.
+ *
+ * The implementation will automatically select the right format and media type. E.g. connecting a
+ * MediaObject and AudioOutput will create a Path object connecting the audio. This might be
+ * represented as PCM or perhaps even AC3 depending on the AudioOutput object.
+ *
+ * \param source The MediaNode to connect an output from
+ * \param sink The MediaNode to connect to.
+ */
+PHONON_EXPORT Path createPath(MediaNode *source, MediaNode *sink);
+
+} // namespace Phonon
+
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#endif // PHONON_PATH_H