diff options
author | André de la Rocha <andre.rocha@qt.io> | 2022-03-16 21:24:05 -0300 |
---|---|---|
committer | André de la Rocha <andre.rocha@qt.io> | 2022-03-17 09:35:35 -0300 |
commit | 0558f4c8352a5654939cbd4531bb818d40eb241f (patch) | |
tree | c62be6ba12430c934636bf360655bac60a69d9d2 | |
parent | 8be9b6d21402d6dcc5ae881ed2421e2d7d37d201 (diff) | |
download | qtmultimedia-0558f4c8352a5654939cbd4531bb818d40eb241f.tar.gz |
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>
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 { |