diff --git a/src/plugins/wmf/player/mfplayercontrol.cpp b/src/plugins/wmf/player/mfplayercontrol.cpp index cb76a037..e3a3d80c 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 42b4f60d..afe91da7 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 933c865f..169a404a 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();