diff options
-rw-r--r-- | src/plugins/directshow/player/directshowplayercontrol.cpp | 13 | ||||
-rw-r--r-- | src/plugins/directshow/player/directshowplayercontrol.h | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp index 553ccb43b..179f635ec 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.cpp +++ b/src/plugins/directshow/player/directshowplayercontrol.cpp @@ -83,6 +83,7 @@ DirectShowPlayerControl::DirectShowPlayerControl(DirectShowPlayerService *servic , m_streamTypes(0) , m_muteVolume(-1) , m_position(0) + , m_pendingPosition(-1) , m_duration(0) , m_playbackRate(0) , m_seekable(false) @@ -112,12 +113,22 @@ qint64 DirectShowPlayerControl::duration() const qint64 DirectShowPlayerControl::position() const { + if (m_pendingPosition != -1) + return m_pendingPosition; + return const_cast<qint64 &>(m_position) = m_service->position(); } void DirectShowPlayerControl::setPosition(qint64 position) { + if (m_state == QMediaPlayer::StoppedState && m_pendingPosition != position) { + m_pendingPosition = position; + emit positionChanged(m_pendingPosition); + return; + } + m_service->seek(position); + m_pendingPosition = -1; } int DirectShowPlayerControl::volume() const @@ -253,6 +264,8 @@ void DirectShowPlayerControl::play() return; } m_service->play(); + if (m_pendingPosition != -1) + setPosition(m_pendingPosition); emit stateChanged(m_state = QMediaPlayer::PlayingState); } diff --git a/src/plugins/directshow/player/directshowplayercontrol.h b/src/plugins/directshow/player/directshowplayercontrol.h index 478389de6..19dcb5a88 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.h +++ b/src/plugins/directshow/player/directshowplayercontrol.h @@ -135,6 +135,7 @@ private: int m_streamTypes; int m_muteVolume; qint64 m_position; + qint64 m_pendingPosition; qint64 m_duration; qreal m_playbackRate; bool m_seekable; |