From c8716f68feb5a38473cbd54972b9a9f095e9e24d Mon Sep 17 00:00:00 2001
From: Val Doroshchuk <valentyn.doroshchuk@qt.io>
Date: Mon, 8 Apr 2019 13:26:38 +0200
Subject: [PATCH] Windows: Reset position on pause in QMediaPlayer after EOS
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

pause() should reset position to the beginning after EOS.

Fixes tst_QMediaPlayerBackend::processEOS

Task-number: QTBUG-65574
Change-Id: I4802102bde657d7a3dde0b426c335b021207ae08
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
---
 src/plugins/directshow/player/directshowplayerservice.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp
index 08d99d735..3974c59a5 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -951,7 +951,6 @@ void DirectShowPlayerService::pause()
 
     if (m_executedTasks & Render) {
         if (m_executedTasks & Stop) {
-            m_atEnd = false;
             if (m_seekPosition == -1) {
                 m_dontCacheNextSeekResult = true;
                 m_seekPosition = 0;
@@ -977,7 +976,8 @@ void DirectShowPlayerService::doPause(QMutexLocker *locker)
         control->Release();
 
         if (SUCCEEDED(hr)) {
-            if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) {
+            IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking);
+            if (!m_atEnd && seeking) {
                 LONGLONG position = 0;
 
                 seeking->GetCurrentPosition(&position);
@@ -986,6 +986,7 @@ void DirectShowPlayerService::doPause(QMutexLocker *locker)
                 m_position = position / qt_directShowTimeScale;
             } else {
                 m_position = 0;
+                m_atEnd = false;
             }
 
             m_executedTasks |= Pause;
-- 
GitLab