diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:34:13 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:34:13 (GMT) |
commit | 67ad0519fd165acee4a4d2a94fa502e9e4847bd0 (patch) | |
tree | 1dbf50b3dff8d5ca7e9344733968c72704eb15ff /src/3rdparty/phonon/ds9/mediagraph.h | |
download | Qt-67ad0519fd165acee4a4d2a94fa502e9e4847bd0.zip Qt-67ad0519fd165acee4a4d2a94fa502e9e4847bd0.tar.gz Qt-67ad0519fd165acee4a4d2a94fa502e9e4847bd0.tar.bz2 |
Long live Qt!
Diffstat (limited to 'src/3rdparty/phonon/ds9/mediagraph.h')
-rw-r--r-- | src/3rdparty/phonon/ds9/mediagraph.h | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/ds9/mediagraph.h b/src/3rdparty/phonon/ds9/mediagraph.h new file mode 100644 index 0000000..13e7bcf --- /dev/null +++ b/src/3rdparty/phonon/ds9/mediagraph.h @@ -0,0 +1,148 @@ +/* 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 <http://www.gnu.org/licenses/>. +*/ + +#ifndef PHONON_MEDIAGRAPH_H +#define PHONON_MEDIAGRAPH_H + +#include "backendnode.h" +#include <QtCore/QMultiMap> + +#include <phonon/mediasource.h> + +//#define GRAPH_DEBUG + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ + namespace DS9 + { + class MediaObject; + + //in the end we should probably have no more inheritance here: everything should be in the interface of the class + //could be nice to then remove all the "*this" in the code of this class + class MediaGraph : public QObject + { + public: + MediaGraph(MediaObject *mo, short index); + ~MediaGraph(); + bool isSeekable() const; + qint64 absoluteTotalTime() const; + qint64 absoluteCurrentTime() const; + void play(); + void stop(); + void pause(); + void absoluteSeek(qint64); + + QMultiMap<QString, QString> metadata() const; + + static QList<Filter> getAllFilters(Graph graph); + QList<Filter> getAllFilters() const; + + HRESULT loadSource(const Phonon::MediaSource &); + + bool hasVideo() const { return m_hasVideo; } + void grabNode(BackendNode *node); + void grabFilter(Filter filter); + + //connections of the nodes + bool connectNodes(BackendNode *source, BackendNode *sink); + bool disconnectNodes(BackendNode *source, BackendNode *sink); + + Phonon::MediaSource mediaSource() const; + + //before loading a source, and after its playback this will be called + HRESULT cleanup(); + void ensureStopped(); + + short index() const; + + Filter realSource() const; + + +#ifndef QT_NO_PHONON_MEDIACONTROLLER + QList<qint64> titles() const; + void setStopPosition(qint64 time); + qint64 stopPosition() const; +#endif //QT_NO_PHONON_MEDIACONTROLLER + + void switchFilters(Filter oldFilter, Filter newFilter); + OAFilterState syncGetRealState() const; + + bool isLoading() const; + bool isStopping() const; + HRESULT renderResult() const; + + Graph graph() const; + + void finishLoading(quint16 workId, HRESULT hr, Graph); + void finishSeeking(quint16 workId, qint64 time); + + private: + bool isSourceFilter(const Filter &filter) const; + bool isDemuxerFilter(const Filter &filter) const; + bool isDecoderFilter(const Filter &filter); + static QList<Filter> getFilterChain(const Filter &source, const Filter &sink); + + HRESULT reallyFinishLoading(HRESULT, const Graph &graph); + + + //utility functions + void ensureSourceConnectedTo(bool force = false); + void ensureSourceDisconnected(); + bool tryConnect(const OutputPin &, const InputPin &); + bool tryDisconnect(const OutputPin &, const InputPin &); + HRESULT removeFilter(const Filter& filter); + + //after loading, removes the decoders that are not linked to a sink + HRESULT removeUselessDecoders(); + + //COM objects + Graph m_graph; + ComPointer<IMediaControl> m_mediaControl; + ComPointer<IMediaSeeking> m_mediaSeeking; + Filter m_fakeSource, m_realSource; + Filter m_demux; + QList<OutputPin> m_decoderPins; + QList<Filter> m_decoders; + + bool m_hasVideo; + bool m_hasAudio; + bool m_connectionsDirty; + bool m_isStopping; + mutable bool m_isSeekable; + HRESULT m_result; + quint16 m_index; + quint16 m_renderId; + quint16 m_seekId; + + //while seeking we need to store the current time + qint64 m_currentTime; + qint64 m_totalTime; + + MediaObject *m_mediaObject; + Phonon::MediaSource m_mediaSource; + QList<BackendNode*> m_sinkConnections; //connections to the source + + Q_DISABLE_COPY(MediaGraph); + }; + } +} + +QT_END_NAMESPACE + +#endif // PHONON_MEDIAGRAPH_H |