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