diff options
author | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-10-31 21:35:33 +0100 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-11-04 15:04:37 +0000 |
commit | 3ef5831041fe1206043f3b36f063eef4842ce243 (patch) | |
tree | e12a92a603f74a2c3bf8c4c9cdbf907b826e7323 /src/plugins/directshow/player/directshowplayercontrol.cpp | |
parent | 953a61e5fd6bd2bff66babef527d1ae6e04e22b1 (diff) |
DirectShow: fix media player seeking.
Correctly handle seek requests happening when the media is not playing.
Change-Id: I82c508dae41792b75a26e86512da66a4871f6352
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Diffstat (limited to 'src/plugins/directshow/player/directshowplayercontrol.cpp')
-rw-r--r-- | src/plugins/directshow/player/directshowplayercontrol.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp index 02507b20d..e988cbdd3 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.cpp +++ b/src/plugins/directshow/player/directshowplayercontrol.cpp @@ -225,6 +225,8 @@ const QIODevice *DirectShowPlayerControl::mediaStream() const void DirectShowPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream) { + m_pendingPosition = -1; + m_media = media; m_stream = stream; @@ -238,30 +240,35 @@ void DirectShowPlayerControl::setMedia(const QMediaContent &media, QIODevice *st void DirectShowPlayerControl::play() { - if (m_status == QMediaPlayer::NoMedia) - return; - if (m_status == QMediaPlayer::InvalidMedia) { - setMedia(m_media, m_stream); - if (m_error != QMediaPlayer::NoError) - return; - } - m_service->play(); - if (m_pendingPosition != -1) - setPosition(m_pendingPosition); - emit stateChanged(m_state = QMediaPlayer::PlayingState); + playOrPause(QMediaPlayer::PlayingState); } void DirectShowPlayerControl::pause() { - if (m_status == QMediaPlayer::NoMedia) + playOrPause(QMediaPlayer::PausedState); +} + +void DirectShowPlayerControl::playOrPause(QMediaPlayer::State state) +{ + if (m_status == QMediaPlayer::NoMedia || state == QMediaPlayer::StoppedState) return; if (m_status == QMediaPlayer::InvalidMedia) { setMedia(m_media, m_stream); if (m_error != QMediaPlayer::NoError) return; } - m_service->pause(); - emit stateChanged(m_state = QMediaPlayer::PausedState); + + m_state = state; + + if (m_pendingPosition != -1) + setPosition(m_pendingPosition); + + if (state == QMediaPlayer::PausedState) + m_service->pause(); + else + m_service->play(); + + emit stateChanged(m_state); } void DirectShowPlayerControl::stop() |