From e2fb22c15a53372f768aa362c37caa0d6f4b57c8 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Fri, 22 Jun 2018 08:12:37 +0200 Subject: winrt: Obtain new camera sample format and size on camera change By Resetting d->cameraSampleformat to Format_User when the selected video device is changed we make QWinRTCameraVideoRendererControl reobtain the camera sample format and size during the next call of queueBuffer. This is needed as the new camera might have other values for these, which might result in a white screen after a camera change. Task-number: QTBUG-67417 Change-Id: I29e28ddf4fc278aff00ad824bda61aedad91471d Reviewed-by: VaL Doroshchuk --- src/plugins/winrt/qwinrtcameracontrol.cpp | 2 ++ src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp | 6 ++++++ src/plugins/winrt/qwinrtcameravideorenderercontrol.h | 3 +++ 3 files changed, 11 insertions(+) diff --git a/src/plugins/winrt/qwinrtcameracontrol.cpp b/src/plugins/winrt/qwinrtcameracontrol.cpp index 0eec4a2ca..164a958ff 100644 --- a/src/plugins/winrt/qwinrtcameracontrol.cpp +++ b/src/plugins/winrt/qwinrtcameracontrol.cpp @@ -583,6 +583,8 @@ QWinRTCameraControl::QWinRTCameraControl(QObject *parent) connect(d->videoRenderer, &QWinRTCameraVideoRendererControl::bufferRequested, this, &QWinRTCameraControl::onBufferRequested); d->videoDeviceSelector = new QWinRTVideoDeviceSelectorControl(this); + connect(d->videoDeviceSelector, QOverload::of(&QWinRTVideoDeviceSelectorControl::selectedDeviceChanged), + d->videoRenderer, &QWinRTCameraVideoRendererControl::resetSampleFormat); d->imageCaptureControl = new QWinRTCameraImageCaptureControl(this); d->imageEncoderControl = new QWinRTImageEncoderControl(this); d->cameraFlashControl = new QWinRTCameraFlashControl(this); diff --git a/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp b/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp index 03d107ae8..6c5e3dbf9 100644 --- a/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp +++ b/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp @@ -426,4 +426,10 @@ void QWinRTCameraVideoRendererControl::decrementProbe() --d->videoProbesCounter; } +void QWinRTCameraVideoRendererControl::resetSampleFormat() +{ + Q_D(QWinRTCameraVideoRendererControl); + d->cameraSampleformat = QVideoFrame::Format_User; +} + QT_END_NAMESPACE diff --git a/src/plugins/winrt/qwinrtcameravideorenderercontrol.h b/src/plugins/winrt/qwinrtcameravideorenderercontrol.h index eeda83d52..2f98e70f4 100644 --- a/src/plugins/winrt/qwinrtcameravideorenderercontrol.h +++ b/src/plugins/winrt/qwinrtcameravideorenderercontrol.h @@ -69,6 +69,9 @@ signals: void bufferRequested(); void videoFrameProbed(const QVideoFrame &frame); +public slots: + void resetSampleFormat(); + private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE(QWinRTCameraVideoRendererControl) -- cgit v1.2.1