diff options
author | Ling Hu <ling.hu@nokia.com> | 2011-08-15 11:17:23 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-09-26 07:22:52 +0200 |
commit | 589b2e3adf37907fd8ac59688758bf68755599c1 (patch) | |
tree | 4a5aa3689cafde47b01c6e2bfa4c4fd021ba1929 /src | |
parent | 9cb61ab778d642346dff714381d4a804c68e3f1f (diff) |
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 <qt_sanity_bot@ovi.com>
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/wmf/player/mfplayercontrol.cpp | 7 | ||||
-rw-r--r-- | src/plugins/wmf/player/mfplayersession.cpp | 10 | ||||
-rw-r--r-- | src/plugins/wmf/player/mfplayersession.h | 2 |
3 files changed, 14 insertions, 5 deletions
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(); |