diff options
author | Piotr Srebrny <piotr.srebrny@qt.io> | 2021-09-10 18:46:13 +0200 |
---|---|---|
committer | Piotr Srebrny <piotr.srebrny@qt.io> | 2021-09-13 12:17:46 +0200 |
commit | 80b82153b71a8a973a81703c8050d5e97f3b5a8f (patch) | |
tree | 4033808d89f8184c1cb79e7362e2799288848f4d /src/multimedia | |
parent | e93a3c66bef99e291c6ee5e5fd183900bc89b223 (diff) |
Add a timer reporting a change in the playback position
Fixes: QTBUG-95576
Pick-to: 6.2 6.2.0
Change-Id: I1b3cdd1d473f04687f33f75502c80ce548aaba51
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/multimedia')
-rw-r--r-- | src/multimedia/platform/windows/player/mfplayersession.cpp | 9 | ||||
-rw-r--r-- | src/multimedia/platform/windows/player/mfplayersession_p.h | 3 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/multimedia/platform/windows/player/mfplayersession.cpp b/src/multimedia/platform/windows/player/mfplayersession.cpp index 8fbf05ee6..aeeb7c792 100644 --- a/src/multimedia/platform/windows/player/mfplayersession.cpp +++ b/src/multimedia/platform/windows/player/mfplayersession.cpp @@ -89,9 +89,15 @@ MFPlayerSession::MFPlayerSession(MFPlayerControl *playerControl) , m_audioSampleGrabber(0) , m_audioSampleGrabberNode(0) , m_videoProbeMFT(0) + { QObject::connect(this, SIGNAL(sessionEvent(IMFMediaEvent*)), this, SLOT(handleSessionEvent(IMFMediaEvent*))); + m_signalPositionChangeTimer.setInterval(100); + m_signalPositionChangeTimer.callOnTimeout([this](){ + positionChanged(position()); + }); + m_pendingState = NoPending; ZeroMemory(&m_state, sizeof(m_state)); m_state.command = CmdStop; @@ -1617,6 +1623,7 @@ void MFPlayerSession::handleSessionEvent(IMFMediaEvent *sessionEvent) // if (m_playerService->videoWindowControl()) { // m_playerService->videoWindowControl()->applyImageControls(); // } + m_signalPositionChangeTimer.start(); break; case MESessionStopped: if (m_status != QMediaPlayer::EndOfMedia) { @@ -1628,10 +1635,12 @@ void MFPlayerSession::handleSessionEvent(IMFMediaEvent *sessionEvent) changeStatus(QMediaPlayer::LoadedMedia); } updatePendingCommands(CmdStop); + m_signalPositionChangeTimer.stop(); break; case MESessionPaused: m_position = position() * 10000; updatePendingCommands(CmdPause); + m_signalPositionChangeTimer.stop(); break; case MEReconnectStart: #ifdef DEBUG_MEDIAFOUNDATION diff --git a/src/multimedia/platform/windows/player/mfplayersession_p.h b/src/multimedia/platform/windows/player/mfplayersession_p.h index bc7504d05..3aafedb86 100644 --- a/src/multimedia/platform/windows/player/mfplayersession_p.h +++ b/src/multimedia/platform/windows/player/mfplayersession_p.h @@ -64,6 +64,7 @@ #include <QtMultimedia/qaudioformat.h> #include <QtMultimedia/qvideoframeformat.h> #include <qaudiodevice.h> +#include <qtimer.h> #include "mfplayercontrol_p.h" QT_BEGIN_NAMESPACE @@ -266,6 +267,8 @@ private: void insertColorConverter(IMFTopology *topology, TOPOID outputNodeId); // ### Below can be used to monitor the video channel. Functionality currently unused. MFTransform *m_videoProbeMFT; + + QTimer m_signalPositionChangeTimer; }; |