summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndré de la Rocha <andre.rocha@qt.io>2022-03-16 21:24:05 -0300
committerAndré de la Rocha <andre.rocha@qt.io>2022-03-17 09:35:35 -0300
commit0558f4c8352a5654939cbd4531bb818d40eb241f (patch)
treec62be6ba12430c934636bf360655bac60a69d9d2
parent8be9b6d21402d6dcc5ae881ed2421e2d7d37d201 (diff)
Windows: Rework workaround for WMF issue
What seems to be a WMF issue was causing a crash with specific videos and also issues when changing position of flac files. A previous workaround for it was depending on the way the media playing was started and thus seemed to fix the issue when tested with the Widgets-based Media Player example, but still failed with the QML-based one. This patch seems to fix it for all cases. Fixes: QTBUG-100854 Fixes: QTBUG-100181 Change-Id: I7e46d72b5e656383442d2866ef93f3183c9f9fa7 Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit b068cb359996d0a5125b3b8bc341854674b7cbb7) Reviewed-by: André de la Rocha <andre.rocha@qt.io>
-rw-r--r--src/multimedia/platform/windows/player/mfplayercontrol.cpp2
-rw-r--r--src/multimedia/platform/windows/player/mfplayersession.cpp6
-rw-r--r--src/multimedia/platform/windows/player/mfplayersession_p.h1
3 files changed, 7 insertions, 2 deletions
diff --git a/src/multimedia/platform/windows/player/mfplayercontrol.cpp b/src/multimedia/platform/windows/player/mfplayercontrol.cpp
index eb2c84f4e..67a5caa7b 100644
--- a/src/multimedia/platform/windows/player/mfplayercontrol.cpp
+++ b/src/multimedia/platform/windows/player/mfplayercontrol.cpp
@@ -96,8 +96,6 @@ void MFPlayerControl::play()
case QMediaPlayer::BufferedMedia:
case QMediaPlayer::EndOfMedia:
changeState(QMediaPlayer::PlayingState);
- if (m_session->status() == QMediaPlayer::LoadedMedia)
- m_session->updateOutputRouting();
m_session->start();
break;
default: //Loading/Stalled
diff --git a/src/multimedia/platform/windows/player/mfplayersession.cpp b/src/multimedia/platform/windows/player/mfplayersession.cpp
index ccaa081f9..3c4fe9929 100644
--- a/src/multimedia/platform/windows/player/mfplayersession.cpp
+++ b/src/multimedia/platform/windows/player/mfplayersession.cpp
@@ -216,6 +216,7 @@ void MFPlayerSession::load(const QUrl &url, QIODevice *stream)
createSession();
changeStatus(QMediaPlayer::LoadingMedia);
m_sourceResolver->load(url, stream);
+ m_updateRoutingOnStart = true;
}
positionChanged(position());
}
@@ -1068,6 +1069,11 @@ void MFPlayerSession::stop(bool immediate)
void MFPlayerSession::start()
{
+ if (status() == QMediaPlayer::LoadedMedia && m_updateRoutingOnStart) {
+ m_updateRoutingOnStart = false;
+ updateOutputRouting();
+ }
+
if (m_status == QMediaPlayer::EndOfMedia) {
m_position = 0; // restart from the beginning
positionChanged(0);
diff --git a/src/multimedia/platform/windows/player/mfplayersession_p.h b/src/multimedia/platform/windows/player/mfplayersession_p.h
index a8456f641..8f1af9f8b 100644
--- a/src/multimedia/platform/windows/player/mfplayersession_p.h
+++ b/src/multimedia/platform/windows/player/mfplayersession_p.h
@@ -177,6 +177,7 @@ private:
qint64 m_lastSeekPos = 0;
MFTIME m_lastSeekSysTime = 0;
bool m_altTiming = false;
+ bool m_updateRoutingOnStart = false;
enum Command
{