diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp index 6d36e462d07859d029848e2548d26e157de48903..91bda2ea213c126ccb72038f27799bde276ec010 100644 --- a/src/imports/multimedia/qdeclarativecamera.cpp +++ b/src/imports/multimedia/qdeclarativecamera.cpp @@ -177,7 +177,6 @@ QDeclarativeCamera::QDeclarativeCamera(QObject *parent) : QObject(parent), m_camera(0), m_metaData(0), - m_viewfinder(0), m_pendingState(ActiveState), m_componentComplete(false) { @@ -190,6 +189,7 @@ QDeclarativeCamera::QDeclarativeCamera(QObject *parent) : m_flash = new QDeclarativeCameraFlash(m_camera); m_focus = new QDeclarativeCameraFocus(m_camera); m_imageProcessing = new QDeclarativeCameraImageProcessing(m_camera); + m_viewfinder = new QDeclarativeCameraViewfinder(m_camera); connect(m_camera, SIGNAL(captureModeChanged(QCamera::CaptureModes)), this, SIGNAL(captureModeChanged())); @@ -960,9 +960,6 @@ QDeclarativeMediaMetaData *QDeclarativeCamera::metaData() QDeclarativeCameraViewfinder *QDeclarativeCamera::viewfinder() { - if (!m_viewfinder) - m_viewfinder = new QDeclarativeCameraViewfinder(m_camera); - return m_viewfinder; } diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm index 3b3f47a43af4e884b8106e661a92fdea735383a7..3c59419e757eebc75904214842456f892952d8d8 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm @@ -922,6 +922,19 @@ void AVFMediaPlayerSession::processBufferStateChange(int bufferStatus) if (bufferStatus == m_bufferStatus) return; + auto status = m_mediaStatus; + // Buffered -> unbuffered. + if (!bufferStatus) { + status = QMediaPlayer::StalledMedia; + } else if (status == QMediaPlayer::StalledMedia) { + status = QMediaPlayer::BufferedMedia; + // Resume playback. + [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] setRate:m_rate]; + } + + if (m_mediaStatus != status) + Q_EMIT mediaStatusChanged(m_mediaStatus = status); + m_bufferStatus = bufferStatus; Q_EMIT bufferStatusChanged(bufferStatus); } diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp index 2fe43f21b8174a6ca99913178add60b4c4e7159d..50e8d642155cf81dd3cef6918d2ca52489c5a646 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.cpp +++ b/src/plugins/directshow/player/directshowplayercontrol.cpp @@ -208,7 +208,7 @@ const QIODevice *DirectShowPlayerControl::mediaStream() const void DirectShowPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream) { - if (m_media == media) + if (m_media == media && m_stream == stream) return; m_pendingPosition = -1; diff --git a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp index 02d956b5b944b5521e518f700dbee167447a0f5f..ee916b750744429e51a8916fef10c67c66744d86 100644 --- a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp +++ b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp @@ -722,7 +722,7 @@ void QWinRTMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *s { Q_D(QWinRTMediaPlayerControl); - if (d->media == media) + if (d->media == media && d->stream.data() == stream) return; d->media = media;