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();
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)
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;