summaryrefslogtreecommitdiffstats
path: root/src/plugins/wmf
diff options
context:
space:
mode:
authorLing Hu <ling.hu@nokia.com>2011-08-15 11:17:23 +1000
committerQt by Nokia <qt-info@nokia.com>2011-09-26 07:22:52 +0200
commit589b2e3adf37907fd8ac59688758bf68755599c1 (patch)
tree4a5aa3689cafde47b01c6e2bfa4c4fd021ba1929 /src/plugins/wmf
parent9cb61ab778d642346dff714381d4a804c68e3f1f (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/plugins/wmf')
-rw-r--r--src/plugins/wmf/player/mfplayercontrol.cpp7
-rw-r--r--src/plugins/wmf/player/mfplayersession.cpp10
-rw-r--r--src/plugins/wmf/player/mfplayersession.h2
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();