summaryrefslogtreecommitdiffstats
path: root/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2010-02-03 01:18:17 (GMT)
committerAndrew den Exter <andrew.den-exter@nokia.com>2010-02-03 01:18:17 (GMT)
commitb136d5a9c2dbb83199d61de2ce88f801637434bb (patch)
treeaee01398362026ee7f023bce04ef8a3b4458507d /src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
parent25579113df82d0e665bb90831586b7510e52469e (diff)
downloadQt-b136d5a9c2dbb83199d61de2ce88f801637434bb.zip
Qt-b136d5a9c2dbb83199d61de2ce88f801637434bb.tar.gz
Qt-b136d5a9c2dbb83199d61de2ce88f801637434bb.tar.bz2
Handle graph events in the service thread rather than the gui thread.
This makes the service thread responsible for the last of the graph manipulation and state update tasks.
Diffstat (limited to 'src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h')
-rw-r--r--src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h52
1 files changed, 30 insertions, 22 deletions
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
index 3a01889..9ea5d7d 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h
@@ -105,16 +105,14 @@ protected:
private Q_SLOTS:
void videoOutputChanged();
- void graphEvent(HANDLE handle);
private:
+ void releaseGraph();
void updateStatus();
int findStreamTypes(IBaseFilter *source) const;
int findStreamType(IPin *pin) const;
- void removeOutput(IBaseFilter *output);
- IBaseFilter *findChainStart(IBaseFilter *end) const;
bool isConnected(IBaseFilter *filter, PIN_DIRECTION direction) const;
void run();
@@ -127,25 +125,32 @@ private:
void doSeek(QMutexLocker *locker);
void doPlay(QMutexLocker *locker);
void doPause(QMutexLocker *locker);
- void doUpdateDuration(QMutexLocker *locker);
+ void doReleaseAudioOutput(QMutexLocker *locker);
+ void doReleaseVideoOutput(QMutexLocker *locker);
+ void doReleaseGraph(QMutexLocker *locker);
+
+ void graphEvent(QMutexLocker *locker);
enum Task
{
- Shutdown = 0x0001,
- SetUrlSource = 0x0002,
- SetStreamSource = 0x0004,
- SetSource = SetUrlSource | SetStreamSource,
- SetAudioOutput = 0x0008,
- SetVideoOutput = 0x0010,
- SetOutputs = SetAudioOutput | SetVideoOutput,
- Render = 0x0020,
- FinalizeLoad = 0x0040,
- SetRate = 0x0080,
- Seek = 0x0100,
- Play = 0x0200,
- Pause = 0x0400,
- Stop = 0x0800,
- UpdateDuration = 0x1000
+ Shutdown = 0x0001,
+ SetUrlSource = 0x0002,
+ SetStreamSource = 0x0004,
+ SetSource = SetUrlSource | SetStreamSource,
+ SetAudioOutput = 0x0008,
+ SetVideoOutput = 0x0010,
+ SetOutputs = SetAudioOutput | SetVideoOutput,
+ Render = 0x0020,
+ FinalizeLoad = 0x0040,
+ SetRate = 0x0080,
+ Seek = 0x0100,
+ Play = 0x0200,
+ Pause = 0x0400,
+ Stop = 0x0800,
+ ReleaseGraph = 0x1000,
+ ReleaseAudioOutput = 0x2000,
+ ReleaseVideoOutput = 0x4000,
+ ReleaseFilters = ReleaseGraph | ReleaseAudioOutput | ReleaseVideoOutput
};
enum Event
@@ -155,7 +160,9 @@ private:
RateChange,
Started,
Paused,
- DurationChange
+ DurationChange,
+ StatusChange,
+ EndOfMedia
};
enum GraphStatus
@@ -177,6 +184,8 @@ private:
int m_pendingTasks;
int m_executingTask;
int m_executedTasks;
+ HANDLE m_taskHandle;
+ HANDLE m_eventHandle;
GraphStatus m_graphStatus;
QMediaPlayer::Error m_error;
QIODevice *m_stream;
@@ -190,12 +199,11 @@ private:
qint64 m_duration;
bool m_buffering;
bool m_seekable;
+ bool m_atEnd;
QMediaTimeRange m_playbackRange;
QUrl m_url;
QMediaResourceList m_resources;
QMutex m_mutex;
- QWaitCondition m_wait;
- QWinEventNotifier m_graphEventNotifier;
DirectShowEventLoop m_loop;
friend class DirectShowPlayerServiceThread;