summaryrefslogtreecommitdiffstats
path: root/src/plugins/winrt/qwinrtcameracontrol.cpp
diff options
context:
space:
mode:
authorSamuel Nevala <samuel.nevala@intopalo.com>2015-10-15 13:02:50 +0300
committerSamuel Nevala <samuel.nevala@intopalo.com>2015-10-15 10:53:01 +0000
commitf5235af0dc3aa433435dbd42b716776097af5acf (patch)
tree004720ee5c6b59fb41d2ad0eb173a46fdc8afe89 /src/plugins/winrt/qwinrtcameracontrol.cpp
parent787dcd9e4d40d9d59b90544e4c4bdea13ef532b8 (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.cpp26
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);