diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
index 53cdebd82a73b3d554fd0f8b3d460efc91dab4e5..d3ec2ff9c3e5d05f460a8294928bf2001f156d93 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
@@ -458,15 +458,19 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
     m_requestedPosition = -1;
     Q_EMIT positionChanged(position());
 
-    QMediaPlayer::MediaStatus oldMediaStatus = m_mediaStatus;
+    const QMediaPlayer::MediaStatus oldMediaStatus = m_mediaStatus;
+    const QMediaPlayer::State oldState = m_state;
 
     if (content.isNull() || content.canonicalUrl().isEmpty()) {
         m_mediaStatus = QMediaPlayer::NoMedia;
-        if (m_state != QMediaPlayer::StoppedState)
-            Q_EMIT stateChanged(m_state = QMediaPlayer::StoppedState);
+        m_state = QMediaPlayer::StoppedState;
 
         if (m_mediaStatus != oldMediaStatus)
             Q_EMIT mediaStatusChanged(m_mediaStatus);
+
+        if (m_state != oldState)
+            Q_EMIT stateChanged(m_state);
+
         return;
     } else {
 
@@ -777,14 +781,15 @@ void AVFMediaPlayerSession::processEOS()
 #endif
     Q_EMIT positionChanged(position());
     m_mediaStatus = QMediaPlayer::EndOfMedia;
+    m_state = QMediaPlayer::StoppedState;
 
     // At this point, frames should not be rendered anymore.
     // Clear the output layer to make sure of that.
     if (m_videoOutput)
         m_videoOutput->setLayer(0);
 
-    Q_EMIT stateChanged(m_state = QMediaPlayer::StoppedState);
     Q_EMIT mediaStatusChanged(m_mediaStatus);
+    Q_EMIT stateChanged(m_state);
 }
 
 void AVFMediaPlayerSession::processLoadStateChange()
@@ -864,7 +869,11 @@ void AVFMediaPlayerSession::processMediaLoadError()
         m_requestedPosition = -1;
         Q_EMIT positionChanged(position());
     }
+
+    m_mediaStatus = QMediaPlayer::InvalidMedia;
+    m_state = QMediaPlayer::StoppedState;
+
     Q_EMIT error(QMediaPlayer::FormatError, tr("Failed to load media"));
-    Q_EMIT mediaStatusChanged(m_mediaStatus = QMediaPlayer::InvalidMedia);
-    Q_EMIT stateChanged(m_state = QMediaPlayer::StoppedState);
+    Q_EMIT mediaStatusChanged(m_mediaStatus);
+    Q_EMIT stateChanged(m_state);
 }