diff --git a/src/plugins/winrt/qwinrtcameracontrol.cpp b/src/plugins/winrt/qwinrtcameracontrol.cpp index 0db4cdb0..b17256fe 100644 --- a/src/plugins/winrt/qwinrtcameracontrol.cpp +++ b/src/plugins/winrt/qwinrtcameracontrol.cpp @@ -43,8 +43,8 @@ #include "qwinrtcameralockscontrol.h" #include -#include #include +#include #include #include @@ -547,6 +547,11 @@ QWinRTCameraControl::QWinRTCameraControl(QObject *parent) d->imageEncoderControl = new QWinRTImageEncoderControl(this); d->cameraFocusControl = new QWinRTCameraFocusControl(this); d->cameraLocksControl = new QWinRTCameraLocksControl(this); + + if (qGuiApp) { + connect(qGuiApp, &QGuiApplication::applicationStateChanged, + this, &QWinRTCameraControl::onApplicationStateChanged); + } } QWinRTCameraControl::~QWinRTCameraControl() @@ -778,6 +783,25 @@ void QWinRTCameraControl::onBufferRequested() d->mediaSink->RequestSample(); } +void QWinRTCameraControl::onApplicationStateChanged(Qt::ApplicationState state) +{ + Q_D(QWinRTCameraControl); + static QCamera::State savedState = d->state; + switch (state) { + case Qt::ApplicationInactive: + if (d->state != QCamera::UnloadedState) { + savedState = d->state; + setState(QCamera::UnloadedState); + } + break; + case Qt::ApplicationActive: + setState(QCamera::State(savedState)); + break; + default: + break; + } +} + HRESULT QWinRTCameraControl::initialize() { Q_D(QWinRTCameraControl); diff --git a/src/plugins/winrt/qwinrtcameracontrol.h b/src/plugins/winrt/qwinrtcameracontrol.h index 758ecb55..b3c86adf 100644 --- a/src/plugins/winrt/qwinrtcameracontrol.h +++ b/src/plugins/winrt/qwinrtcameracontrol.h @@ -104,6 +104,7 @@ public: private slots: void onBufferRequested(); + void onApplicationStateChanged(Qt::ApplicationState state); private: HRESULT enumerateDevices();