source: trunk/src/3rdparty/phonon/ds9/mediagraph.h

Last change on this file was 2, checked in by Dmitry A. Kuminov, 17 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 4.7 KB
Line 
1/* This file is part of the KDE project.
2
3Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4
5This library is free software: you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation, either version 2.1 or 3 of the License.
8
9This library is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU Lesser General Public License for more details.
13
14You should have received a copy of the GNU Lesser General Public License
15along with this library. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef PHONON_MEDIAGRAPH_H
19#define PHONON_MEDIAGRAPH_H
20
21#include "backendnode.h"
22#include <QtCore/QMultiMap>
23
24#include <phonon/mediasource.h>
25
26//#define GRAPH_DEBUG
27
28QT_BEGIN_NAMESPACE
29
30namespace Phonon
31{
32 namespace DS9
33 {
34 class MediaObject;
35
36 //in the end we should probably have no more inheritance here: everything should be in the interface of the class
37 //could be nice to then remove all the "*this" in the code of this class
38 class MediaGraph : public QObject
39 {
40 public:
41 MediaGraph(MediaObject *mo, short index);
42 ~MediaGraph();
43 bool isSeekable() const;
44 qint64 absoluteTotalTime() const;
45 qint64 absoluteCurrentTime() const;
46 void play();
47 void stop();
48 void pause();
49 void absoluteSeek(qint64);
50
51 QMultiMap<QString, QString> metadata() const;
52
53 static QList<Filter> getAllFilters(Graph graph);
54 QList<Filter> getAllFilters() const;
55
56 HRESULT loadSource(const Phonon::MediaSource &);
57
58 bool hasVideo() const { return m_hasVideo; }
59 void grabNode(BackendNode *node);
60 void grabFilter(Filter filter);
61
62 //connections of the nodes
63 bool connectNodes(BackendNode *source, BackendNode *sink);
64 bool disconnectNodes(BackendNode *source, BackendNode *sink);
65
66 Phonon::MediaSource mediaSource() const;
67
68 //before loading a source, and after its playback this will be called
69 HRESULT cleanup();
70 void ensureStopped();
71
72 short index() const;
73
74 Filter realSource() const;
75
76
77#ifndef QT_NO_PHONON_MEDIACONTROLLER
78 QList<qint64> titles() const;
79 void setStopPosition(qint64 time);
80 qint64 stopPosition() const;
81#endif //QT_NO_PHONON_MEDIACONTROLLER
82
83 void switchFilters(Filter oldFilter, Filter newFilter);
84 OAFilterState syncGetRealState() const;
85
86 bool isLoading() const;
87 bool isStopping() const;
88 HRESULT renderResult() const;
89
90 Graph graph() const;
91
92 void finishLoading(quint16 workId, HRESULT hr, Graph);
93 void finishSeeking(quint16 workId, qint64 time);
94
95 private:
96 bool isSourceFilter(const Filter &filter) const;
97 bool isDemuxerFilter(const Filter &filter) const;
98 bool isDecoderFilter(const Filter &filter);
99 static QList<Filter> getFilterChain(const Filter &source, const Filter &sink);
100
101 HRESULT reallyFinishLoading(HRESULT, const Graph &graph);
102
103
104 //utility functions
105 void ensureSourceConnectedTo(bool force = false);
106 void ensureSourceDisconnected();
107 bool tryConnect(const OutputPin &, const InputPin &);
108 bool tryDisconnect(const OutputPin &, const InputPin &);
109 HRESULT removeFilter(const Filter& filter);
110
111 //after loading, removes the decoders that are not linked to a sink
112 HRESULT removeUselessDecoders();
113
114 //COM objects
115 Graph m_graph;
116 ComPointer<IMediaControl> m_mediaControl;
117 ComPointer<IMediaSeeking> m_mediaSeeking;
118 Filter m_fakeSource, m_realSource;
119 Filter m_demux;
120 QList<OutputPin> m_decoderPins;
121 QList<Filter> m_decoders;
122
123 bool m_hasVideo;
124 bool m_hasAudio;
125 bool m_connectionsDirty;
126 bool m_isStopping;
127 mutable bool m_isSeekable;
128 HRESULT m_result;
129 quint16 m_index;
130 quint16 m_renderId;
131 quint16 m_seekId;
132
133 //while seeking we need to store the current time
134 qint64 m_currentTime;
135 qint64 m_totalTime;
136
137 MediaObject *m_mediaObject;
138 Phonon::MediaSource m_mediaSource;
139 QList<BackendNode*> m_sinkConnections; //connections to the source
140
141 Q_DISABLE_COPY(MediaGraph);
142 };
143 }
144}
145
146QT_END_NAMESPACE
147
148#endif // PHONON_MEDIAGRAPH_H
Note: See TracBrowser for help on using the repository browser.