From 589b2e3adf37907fd8ac59688758bf68755599c1 Mon Sep 17 00:00:00 2001 From: Ling Hu Date: Mon, 15 Aug 2011 11:17:23 +1000 Subject: Fix a playback bug for mediaplayer windows media foundation backend Task-number:QTMOBILITY-1606 Reviewed-by:Jonas Rabbe (cherry picked from commit d5426bf52e19c9c6a52837b423f48024979ea076) Change-Id: Ie7c1c90a8f5a64e77c435ffc1917d8f9638dfff3 Reviewed-on: http://codereview.qt-project.org/5499 Reviewed-by: Qt Sanity Bot Reviewed-by: Michael Goddard --- src/plugins/wmf/player/mfplayercontrol.cpp | 7 ++++++- src/plugins/wmf/player/mfplayersession.cpp | 10 +++++++--- src/plugins/wmf/player/mfplayersession.h | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/plugins/wmf/player/mfplayercontrol.cpp b/src/plugins/wmf/player/mfplayercontrol.cpp index cb76a037a..e3a3d80cd 100644 --- a/src/plugins/wmf/player/mfplayercontrol.cpp +++ b/src/plugins/wmf/player/mfplayercontrol.cpp @@ -72,7 +72,12 @@ MFPlayerControl::~MFPlayerControl() void MFPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream) { - stop(); + if (m_state != QMediaPlayer::StoppedState) { + changeState(QMediaPlayer::StoppedState); + m_session->stop(true); + refreshState(); + } + m_media = media; m_stream = stream; resetAudioVideoAvailable(); diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp index 42b4f60d2..afe91da7a 100644 --- a/src/plugins/wmf/player/mfplayersession.cpp +++ b/src/plugins/wmf/player/mfplayersession.cpp @@ -681,12 +681,12 @@ IMFTopologyNode* MFPlayerSession::addOutputNode(IMFStreamDescriptor *streamDesc, return NULL; } -void MFPlayerSession::stop() +void MFPlayerSession::stop(bool immediate) { #ifdef DEBUG_MEDIAFOUNDATION qDebug() << "stop"; #endif - if (m_pendingState != NoPending) { + if (!immediate && m_pendingState != NoPending) { m_request.setCommand(CmdStop); } else { if (m_state.command == CmdStop) @@ -1186,7 +1186,11 @@ void MFPlayerSession::handleSessionEvent(IMFMediaEvent *sessionEvent) if (m_status != QMediaPlayer::EndOfMedia) { m_varStart.vt = VT_I8; m_varStart.hVal.QuadPart = 0; - changeStatus(QMediaPlayer::LoadedMedia); + + //only change to loadedMedia when not loading a new media source + if (m_status != QMediaPlayer::LoadingMedia) { + changeStatus(QMediaPlayer::LoadedMedia); + } } updatePendingCommands(CmdStop); break; diff --git a/src/plugins/wmf/player/mfplayersession.h b/src/plugins/wmf/player/mfplayersession.h index 933c865f9..169a404a5 100644 --- a/src/plugins/wmf/player/mfplayersession.h +++ b/src/plugins/wmf/player/mfplayersession.h @@ -94,7 +94,7 @@ public: } void load(const QMediaContent &media, QIODevice *stream); - void stop(); + void stop(bool immediate = false); void start(); void pause(); -- cgit v1.2.3