diff options
author | Samuel Nevala <samuel.nevala@intopalo.com> | 2015-10-15 13:02:50 +0300 |
---|---|---|
committer | Samuel Nevala <samuel.nevala@intopalo.com> | 2015-10-15 10:53:01 +0000 |
commit | f5235af0dc3aa433435dbd42b716776097af5acf (patch) | |
tree | 004720ee5c6b59fb41d2ad0eb173a46fdc8afe89 /src/plugins/winrt/qwinrtcameracontrol.cpp | |
parent | 787dcd9e4d40d9d59b90544e4c4bdea13ef532b8 (diff) |
winrt: Unload camera when application is suspended.
Camera needs to be unloaded when going to suspend. Otherwise resume from
suspend will hang and application will be terminated.
Change-Id: Idc8bd47e56c99ebd53a1a4632338cf977317a495
Task-Id: QTBUG-48569
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Diffstat (limited to 'src/plugins/winrt/qwinrtcameracontrol.cpp')
-rw-r--r-- | src/plugins/winrt/qwinrtcameracontrol.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/plugins/winrt/qwinrtcameracontrol.cpp b/src/plugins/winrt/qwinrtcameracontrol.cpp index 0db4cdb0d..b17256fec 100644 --- a/src/plugins/winrt/qwinrtcameracontrol.cpp +++ b/src/plugins/winrt/qwinrtcameracontrol.cpp @@ -43,8 +43,8 @@ #include "qwinrtcameralockscontrol.h" #include <QtCore/qfunctions_winrt.h> -#include <QtCore/QCoreApplication> #include <QtCore/QPointer> +#include <QtGui/QGuiApplication> #include <mfapi.h> #include <mferror.h> @@ -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); |