summaryrefslogtreecommitdiffstats
path: root/src/multimedia
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2021-09-10 18:46:13 +0200
committerPiotr Srebrny <piotr.srebrny@qt.io>2021-09-13 12:17:46 +0200
commit80b82153b71a8a973a81703c8050d5e97f3b5a8f (patch)
tree4033808d89f8184c1cb79e7362e2799288848f4d /src/multimedia
parente93a3c66bef99e291c6ee5e5fd183900bc89b223 (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.cpp9
-rw-r--r--src/multimedia/platform/windows/player/mfplayersession_p.h3
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;
};