Merge lp:~fboucault/qtubuntu-camera/unloaded_when_inactive into lp:qtubuntu-camera/staging

Proposed by Florian Boucault
Status: Merged
Approved by: Ugo Riboni
Approved revision: 164
Merged at revision: 164
Proposed branch: lp:~fboucault/qtubuntu-camera/unloaded_when_inactive
Merge into: lp:qtubuntu-camera/staging
Diff against target: 629 lines (+198/-71)
18 files modified
src/aalcameracontrol.cpp (+1/-1)
src/aalcameraservice.cpp (+32/-2)
src/aalcameraservice.h (+7/-0)
src/aalvideodeviceselectorcontrol.cpp (+7/-1)
src/aalvideorenderercontrol.cpp (+62/-57)
src/aalvideorenderercontrol.h (+2/-3)
src/aalviewfindersettingscontrol.cpp (+7/-3)
unittests/aalcameracontrol/aalcameraservice.cpp (+9/-0)
unittests/aalcameraexposurecontrol/aalcameraservice.cpp (+9/-0)
unittests/aalcameraflashcontrol/aalcameraservice.cpp (+9/-0)
unittests/aalcamerafocuscontrol/aalcameraservice.cpp (+9/-0)
unittests/aalcamerazoomcontrol/aalcameraservice.cpp (+9/-0)
unittests/aalimagecapturecontrol/aalcameraservice.cpp (+9/-0)
unittests/aalimagecapturecontrol/aalvideorenderercontrol.cpp (+2/-2)
unittests/aalvideodeviceselectorcontrol/aalcameraservice.cpp (+9/-0)
unittests/aalviewfindersettingscontrol/aalcameraservice.cpp (+9/-0)
unittests/aalviewfindersettingscontrol/aalvideorenderercontrol.cpp (+2/-2)
unittests/stubs/aalcameraservice_stub.cpp (+4/-0)
To merge this branch: bzr merge lp:~fboucault/qtubuntu-camera/unloaded_when_inactive
Reviewer Review Type Date Requested Status
Ugo Riboni (community) Approve
Review via email: mp+279792@code.launchpad.net

Commit message

Fixed QCamera::LoadedState so that it only disables the viewfinder but keeps the camera stack loaded.
Automatically set the state to QCamera::UnloadedState when the application becomes inactive. Restore
state when application becomes active again.

To post a comment you must log in.
Revision history for this message
Ugo Riboni (uriboni) wrote :

Some minor comments, but otherwise code only looks good.

review: Needs Fixing (code)
Revision history for this message
Ugo Riboni (uriboni) wrote :

Works well functionally

review: Approve (functional)
163. By Florian Boucault

Readded necessary check

164. By Florian Boucault

Homogeneous warning messages

Revision history for this message
Florian Boucault (fboucault) :
Revision history for this message
Ugo Riboni (uriboni) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/aalcameracontrol.cpp'
2--- src/aalcameracontrol.cpp 2015-12-02 08:26:32 +0000
3+++ src/aalcameracontrol.cpp 2015-12-08 15:15:50 +0000
4@@ -57,7 +57,7 @@
5 return;
6 }
7 } else {
8- m_service->disconnectCamera();
9+ m_service->stopPreview();
10 }
11 } else if (state == QCamera::UnloadedState) {
12 m_service->disconnectCamera();
13
14=== modified file 'src/aalcameraservice.cpp'
15--- src/aalcameraservice.cpp 2015-12-02 08:26:32 +0000
16+++ src/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
17@@ -32,6 +32,7 @@
18
19 #include <hybris/camera/camera_compatibility_layer.h>
20
21+#include <QtGui/QGuiApplication>
22 #include <QDebug>
23 #include <cmath>
24
25@@ -40,7 +41,8 @@
26 AalCameraService::AalCameraService(QObject *parent):
27 QMediaService(parent),
28 m_androidControl(0),
29- m_androidListener(0)
30+ m_androidListener(0),
31+ m_restoreStateWhenApplicationActive(false)
32 {
33 m_service = this;
34
35@@ -58,6 +60,10 @@
36 m_videoOutput = new AalVideoRendererControl(this);
37 m_viewfinderControl = new AalViewfinderSettingsControl(this);
38 m_exposureControl = new AalCameraExposureControl(this);
39+
40+ QGuiApplication* application = qobject_cast<QGuiApplication*>(QGuiApplication::instance());
41+ connect(application, &QGuiApplication::applicationStateChanged,
42+ this, &AalCameraService::onApplicationStateChanged);
43 }
44
45 AalCameraService::~AalCameraService()
46@@ -205,6 +211,15 @@
47 }
48 }
49
50+bool AalCameraService::isPreviewStarted() const
51+{
52+ if (m_videoOutput) {
53+ return m_videoOutput->isPreviewStarted();
54+ } else {
55+ return false;
56+ }
57+}
58+
59 bool AalCameraService::isCameraActive() const
60 {
61 return m_cameraControl->state() == QCamera::ActiveState;
62@@ -256,12 +271,27 @@
63 ready = false;
64 if (m_focusControl->isFocusBusy())
65 ready = false;
66- if (!m_videoOutput->isViewfinderRunning())
67+ if (!isPreviewStarted())
68 ready = false;
69
70 m_imageCaptureControl->setReady(ready);
71 }
72
73+void AalCameraService::onApplicationStateChanged()
74+{
75+ QGuiApplication* application = qobject_cast<QGuiApplication*>(QGuiApplication::instance());
76+ Qt::ApplicationState applicationState = application->applicationState();
77+ if (applicationState == Qt::ApplicationActive) {
78+ if (m_restoreStateWhenApplicationActive) {
79+ m_cameraControl->setState(m_cameraStateWhenApplicationActive);
80+ }
81+ } else {
82+ m_cameraStateWhenApplicationActive = m_cameraControl->state();
83+ m_restoreStateWhenApplicationActive = true;
84+ m_cameraControl->setState(QCamera::UnloadedState);
85+ }
86+}
87+
88 /*!
89 * \brief AalCameraService::initControls initialize all the controls for a newly
90 * connected camera
91
92=== modified file 'src/aalcameraservice.h'
93--- src/aalcameraservice.h 2015-10-15 13:20:33 +0000
94+++ src/aalcameraservice.h 2015-12-08 15:15:50 +0000
95@@ -19,6 +19,7 @@
96
97 #include <QMediaService>
98 #include <QSize>
99+#include <QtMultimedia/QCamera>
100
101 class AalCameraControl;
102 class AalCameraFlashControl;
103@@ -72,6 +73,7 @@
104 void disconnectCamera();
105 void startPreview();
106 void stopPreview();
107+ bool isPreviewStarted() const;
108
109 bool isCameraActive() const;
110 bool isBackCameraUsed() const;
111@@ -87,6 +89,9 @@
112 public Q_SLOTS:
113 void updateCaptureReady();
114
115+protected Q_SLOTS:
116+ void onApplicationStateChanged();
117+
118 private:
119 void initControls(CameraControl *camControl, CameraControlListener *listener);
120
121@@ -110,6 +115,8 @@
122 CameraControlListener *m_androidListener;
123
124 StorageManager *m_storageManager;
125+ bool m_restoreStateWhenApplicationActive;
126+ QCamera::State m_cameraStateWhenApplicationActive;
127 };
128
129 #endif
130
131=== modified file 'src/aalvideodeviceselectorcontrol.cpp'
132--- src/aalvideodeviceselectorcontrol.cpp 2015-11-12 10:41:18 +0000
133+++ src/aalvideodeviceselectorcontrol.cpp 2015-12-08 15:15:50 +0000
134@@ -16,11 +16,13 @@
135
136 #include "aalvideodeviceselectorcontrol.h"
137 #include "aalcameraservice.h"
138+#include "aalcameracontrol.h"
139 #include "aalimageencodercontrol.h"
140 #include "aalvideoencodersettingscontrol.h"
141 #include "aalviewfindersettingscontrol.h"
142
143 #include <QDebug>
144+#include <QtMultimedia/QCamera>
145
146 #include <hybris/camera/camera_compatibility_layer_capabilities.h>
147
148@@ -81,12 +83,16 @@
149 if (m_service->isRecording())
150 return;
151
152+ m_service->stopPreview();
153 m_service->disconnectCamera();
154 m_service->viewfinderControl()->resetAllSettings();
155 m_service->imageEncoderControl()->resetAllSettings();
156 m_service->videoEncoderControl()->resetAllSettings();
157 m_currentDevice = index;
158- if (m_service->isCameraActive()) {
159+ QCamera::State state = m_service->cameraControl()->state();
160+ if (state == QCamera::LoadedState) {
161+ m_service->connectCamera();
162+ } else if (state == QCamera::ActiveState) {
163 m_service->connectCamera();
164 m_service->startPreview();
165 }
166
167=== modified file 'src/aalvideorenderercontrol.cpp'
168--- src/aalvideorenderercontrol.cpp 2015-11-17 15:24:37 +0000
169+++ src/aalvideorenderercontrol.cpp 2015-12-08 15:15:50 +0000
170@@ -29,8 +29,6 @@
171 #include <QUrl>
172 #include <QVideoSurfaceFormat>
173
174-const int MIN_FRAME_COUNT = 8; // minimal number of frames to be ready for capture
175-
176 class AalGLTextureBuffer : public QAbstractVideoBuffer
177 {
178 public:
179@@ -72,8 +70,8 @@
180 , m_surface(0),
181 m_service(service),
182 m_viewFinderRunning(false),
183- m_textureId(0),
184- m_frameCount(0)
185+ m_previewStarted(false),
186+ m_textureId(0)
187 {
188 // Get notified when qtvideo-node creates a GL texture
189 connect(SharedSignal::instance(), SIGNAL(textureCreated(unsigned int)), this, SLOT(onTextureCreated(unsigned int)));
190@@ -101,71 +99,89 @@
191 {
192 Q_UNUSED(control);
193 listener->on_preview_texture_needs_update_cb = &AalVideoRendererControl::updateViewfinderFrameCB;
194+ // ensures a new texture will be created by qtvideo-node
195 m_textureId = 0;
196- m_frameCount = 0;
197 }
198
199 void AalVideoRendererControl::startPreview()
200 {
201- if (m_frameCount > 0)
202- return;
203- if (m_viewFinderRunning)
204- return;
205+ if (m_previewStarted) {
206+ return;
207+ }
208+ if (!m_service->androidControl()) {
209+ qWarning() << "Can't start preview without a CameraControl";
210+ return;
211+ }
212+ m_previewStarted = true;
213
214 if (m_textureId) {
215 CameraControl *cc = m_service->androidControl();
216- if (cc) {
217- android_camera_set_preview_texture(cc, m_textureId);
218- android_camera_start_preview(cc);
219- m_viewFinderRunning = true;
220- updateViewfinderFrame();
221- }
222- } else {
223- // requests a new texture
224- updateViewfinderFrame();
225+ android_camera_set_preview_texture(cc, m_textureId);
226+ android_camera_start_preview(cc);
227 }
228+
229+ // if no texture ID is set to the frame passed to ShaderVideoNode,
230+ // a texture ID will be generated and returned via the 'textureCreated' signal
231+ // after calling updateViewfinderFrame()
232+ updateViewfinderFrame();
233+
234 m_service->updateCaptureReady();
235 }
236
237 void AalVideoRendererControl::stopPreview()
238 {
239- m_viewFinderRunning = false;
240-
241- CameraControl *cc = m_service->androidControl();
242- if (cc) {
243- android_camera_stop_preview(cc);
244- }
245-
246- if (m_surface && m_surface->isActive())
247+ if (!m_previewStarted) {
248+ return;
249+ }
250+ if (!m_service->androidControl()) {
251+ qWarning() << "Can't stop preview without a CameraControl";
252+ return;
253+ }
254+ if (!m_surface) {
255+ qWarning() << "Can't stop preview without a QAbstractVideoSurface";
256+ return;
257+ }
258+
259+ if (m_surface->isActive()) {
260 m_surface->stop();
261-
262- m_frameCount = 0;
263-
264+ }
265+
266+ CameraControl *cc = m_service->androidControl();
267+ android_camera_stop_preview(cc);
268+ // FIXME: missing android_camera_set_preview_size(QSize())
269+ android_camera_set_preview_texture(cc, 0);
270+
271+ m_previewStarted = false;
272 m_service->updateCaptureReady();
273 }
274
275+bool AalVideoRendererControl::isPreviewStarted() const
276+{
277+ return m_previewStarted;
278+}
279+
280 void AalVideoRendererControl::updateViewfinderFrame()
281 {
282+ if (!m_service->viewfinderControl()) {
283+ qWarning() << "Can't draw video frame without a viewfinder settings control";
284+ return;
285+ }
286+ if (!m_service->androidControl()) {
287+ qWarning() << "Can't draw video frame without camera";
288+ return;
289+ }
290 if (!m_surface) {
291 qWarning() << "Can't draw video frame without surface";
292 return;
293 }
294- if (!m_service->androidControl()) {
295- qWarning() << "Can't draw video frame without camera";
296- return;
297- }
298- // if framecount is 0, then m_textureId can be 0, as this will request the
299- // texture from the render thread. (see code in qtvideo-node).
300- if (!m_textureId && m_frameCount > 0) {
301- qWarning() << "Can't draw video frame without texture" << m_frameCount;
302- return;
303- }
304
305 QSize vfSize = m_service->viewfinderControl()->currentSize();
306 QVideoFrame frame(new AalGLTextureBuffer(m_textureId), vfSize, QVideoFrame::Format_RGB32);
307
308- if (!frame.isValid())
309+ if (!frame.isValid()) {
310+ qWarning() << "Invalid frame";
311 return;
312+ }
313
314 CameraControl *cc = m_service->androidControl();
315 frame.setMetaData("CamControl", QVariant::fromValue((void*)cc));
316@@ -181,23 +197,16 @@
317 if (m_surface->isActive()) {
318 m_surface->present(frame);
319 }
320-
321- ++m_frameCount;
322- if (m_frameCount == MIN_FRAME_COUNT) {
323- m_service->updateCaptureReady();
324- }
325 }
326
327 void AalVideoRendererControl::onTextureCreated(GLuint textureID)
328 {
329 m_textureId = textureID;
330- if (m_textureId) {
331- // as we got a new textureID
332- CameraControl *cc = m_service->androidControl();
333- if (cc) {
334- android_camera_set_preview_texture(cc, m_textureId);
335+ CameraControl *cc = m_service->androidControl();
336+ if (cc) {
337+ android_camera_set_preview_texture(cc, m_textureId);
338+ if (m_textureId && m_previewStarted) {
339 android_camera_start_preview(cc);
340- m_viewFinderRunning = true;
341 }
342 }
343 m_service->updateCaptureReady();
344@@ -213,8 +222,9 @@
345 {
346 Q_UNUSED(context);
347 AalVideoRendererControl *self = AalCameraService::instance()->videoOutputControl();
348- if (self->m_viewFinderRunning)
349+ if (self->m_previewStarted) {
350 QMetaObject::invokeMethod(self, "updateViewfinderFrame", Qt::QueuedConnection);
351+ }
352 }
353
354 const QImage &AalVideoRendererControl::preview() const
355@@ -231,8 +241,3 @@
356 SharedSignal::instance()->setSnapshotSize(vfSize);
357 SharedSignal::instance()->takeSnapshot(m_service->androidControl());
358 }
359-
360-bool AalVideoRendererControl::isViewfinderRunning() const
361-{
362- return m_viewFinderRunning && m_frameCount >= MIN_FRAME_COUNT;
363-}
364
365=== modified file 'src/aalvideorenderercontrol.h'
366--- src/aalvideorenderercontrol.h 2013-07-18 14:29:13 +0000
367+++ src/aalvideorenderercontrol.h 2015-12-08 15:15:50 +0000
368@@ -40,7 +40,7 @@
369 const QImage &preview() const;
370 void createPreview();
371
372- bool isViewfinderRunning() const;
373+ bool isPreviewStarted() const;
374
375 public Q_SLOTS:
376 void init(CameraControl *control, CameraControlListener *listener);
377@@ -61,10 +61,9 @@
378 AalCameraService *m_service;
379
380 bool m_viewFinderRunning;
381+ bool m_previewStarted;
382 GLuint m_textureId;
383 QImage m_preview;
384-
385- int m_frameCount;
386 };
387
388 #endif
389
390=== modified file 'src/aalviewfindersettingscontrol.cpp'
391--- src/aalviewfindersettingscontrol.cpp 2015-11-17 15:24:37 +0000
392+++ src/aalviewfindersettingscontrol.cpp 2015-12-08 15:15:50 +0000
393@@ -108,10 +108,14 @@
394
395 m_currentSize = size;
396
397- AalVideoRendererControl *videoRenderer = m_service->videoOutputControl();
398- videoRenderer->stopPreview();
399+ bool wasPreviewStarted = m_service->isPreviewStarted();
400+ if (wasPreviewStarted) {
401+ m_service->stopPreview();
402+ }
403 android_camera_set_preview_size(cc, m_currentSize.width(), m_currentSize.height());
404- videoRenderer->startPreview();
405+ if (wasPreviewStarted) {
406+ m_service->startPreview();
407+ }
408 }
409
410 QSize AalViewfinderSettingsControl::currentSize() const
411
412=== modified file 'unittests/aalcameracontrol/aalcameraservice.cpp'
413--- unittests/aalcameracontrol/aalcameraservice.cpp 2015-12-02 09:56:45 +0000
414+++ unittests/aalcameracontrol/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
415@@ -65,6 +65,11 @@
416 {
417 }
418
419+bool AalCameraService::isPreviewStarted() const
420+{
421+ return true;
422+}
423+
424 bool AalCameraService::isCameraActive() const
425 {
426 return true;
427@@ -78,6 +83,10 @@
428 {
429 }
430
431+void AalCameraService::onApplicationStateChanged()
432+{
433+}
434+
435 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
436 {
437 Q_UNUSED(camControl);
438
439=== modified file 'unittests/aalcameraexposurecontrol/aalcameraservice.cpp'
440--- unittests/aalcameraexposurecontrol/aalcameraservice.cpp 2015-10-15 13:20:33 +0000
441+++ unittests/aalcameraexposurecontrol/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
442@@ -74,6 +74,15 @@
443 {
444 }
445
446+bool AalCameraService::isPreviewStarted() const
447+{
448+ return true;
449+}
450+
451+void AalCameraService::onApplicationStateChanged()
452+{
453+}
454+
455 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
456 {
457 m_exposureControl->init(camControl, listener);
458
459=== modified file 'unittests/aalcameraflashcontrol/aalcameraservice.cpp'
460--- unittests/aalcameraflashcontrol/aalcameraservice.cpp 2015-10-15 13:20:33 +0000
461+++ unittests/aalcameraflashcontrol/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
462@@ -65,6 +65,15 @@
463 {
464 }
465
466+bool AalCameraService::isPreviewStarted() const
467+{
468+ return true;
469+}
470+
471+void AalCameraService::onApplicationStateChanged()
472+{
473+}
474+
475 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
476 {
477 Q_UNUSED(camControl);
478
479=== modified file 'unittests/aalcamerafocuscontrol/aalcameraservice.cpp'
480--- unittests/aalcamerafocuscontrol/aalcameraservice.cpp 2015-10-15 13:20:33 +0000
481+++ unittests/aalcamerafocuscontrol/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
482@@ -62,6 +62,15 @@
483 {
484 }
485
486+bool AalCameraService::isPreviewStarted() const
487+{
488+ return true;
489+}
490+
491+void AalCameraService::onApplicationStateChanged()
492+{
493+}
494+
495 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
496 {
497 Q_UNUSED(camControl);
498
499=== modified file 'unittests/aalcamerazoomcontrol/aalcameraservice.cpp'
500--- unittests/aalcamerazoomcontrol/aalcameraservice.cpp 2015-10-15 13:20:33 +0000
501+++ unittests/aalcamerazoomcontrol/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
502@@ -76,6 +76,15 @@
503 {
504 }
505
506+bool AalCameraService::isPreviewStarted() const
507+{
508+ return true;
509+}
510+
511+void AalCameraService::onApplicationStateChanged()
512+{
513+}
514+
515 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
516 {
517 m_zoomControl->init(camControl, listener);
518
519=== modified file 'unittests/aalimagecapturecontrol/aalcameraservice.cpp'
520--- unittests/aalimagecapturecontrol/aalcameraservice.cpp 2015-10-15 13:20:33 +0000
521+++ unittests/aalimagecapturecontrol/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
522@@ -62,6 +62,15 @@
523 {
524 }
525
526+bool AalCameraService::isPreviewStarted() const
527+{
528+ return true;
529+}
530+
531+void AalCameraService::onApplicationStateChanged()
532+{
533+}
534+
535 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
536 {
537 Q_UNUSED(camControl);
538
539=== modified file 'unittests/aalimagecapturecontrol/aalvideorenderercontrol.cpp'
540--- unittests/aalimagecapturecontrol/aalvideorenderercontrol.cpp 2013-06-21 10:24:02 +0000
541+++ unittests/aalimagecapturecontrol/aalvideorenderercontrol.cpp 2015-12-08 15:15:50 +0000
542@@ -55,9 +55,9 @@
543 {
544 }
545
546-bool AalVideoRendererControl::isViewfinderRunning() const
547+bool AalVideoRendererControl::isPreviewStarted() const
548 {
549- return m_viewFinderRunning;
550+ return true;
551 }
552
553 void AalVideoRendererControl::updateViewfinderFrame()
554
555=== modified file 'unittests/aalvideodeviceselectorcontrol/aalcameraservice.cpp'
556--- unittests/aalvideodeviceselectorcontrol/aalcameraservice.cpp 2015-10-15 13:20:33 +0000
557+++ unittests/aalvideodeviceselectorcontrol/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
558@@ -62,11 +62,20 @@
559 {
560 }
561
562+bool AalCameraService::isPreviewStarted() const
563+{
564+ return true;
565+}
566+
567 bool AalCameraService::isCameraActive() const
568 {
569 return true;
570 }
571
572+void AalCameraService::onApplicationStateChanged()
573+{
574+}
575+
576 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
577 {
578 Q_UNUSED(camControl);
579
580=== modified file 'unittests/aalviewfindersettingscontrol/aalcameraservice.cpp'
581--- unittests/aalviewfindersettingscontrol/aalcameraservice.cpp 2015-10-15 16:08:39 +0000
582+++ unittests/aalviewfindersettingscontrol/aalcameraservice.cpp 2015-12-08 15:15:50 +0000
583@@ -63,6 +63,15 @@
584 {
585 }
586
587+bool AalCameraService::isPreviewStarted() const
588+{
589+ return true;
590+}
591+
592+void AalCameraService::onApplicationStateChanged()
593+{
594+}
595+
596 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
597 {
598 Q_UNUSED(camControl);
599
600=== modified file 'unittests/aalviewfindersettingscontrol/aalvideorenderercontrol.cpp'
601--- unittests/aalviewfindersettingscontrol/aalvideorenderercontrol.cpp 2013-06-21 10:24:02 +0000
602+++ unittests/aalviewfindersettingscontrol/aalvideorenderercontrol.cpp 2015-12-08 15:15:50 +0000
603@@ -55,9 +55,9 @@
604 {
605 }
606
607-bool AalVideoRendererControl::isViewfinderRunning() const
608+bool AalVideoRendererControl::isPreviewStarted() const
609 {
610- return m_viewFinderRunning;
611+ return true;
612 }
613
614 void AalVideoRendererControl::updateViewfinderFrame()
615
616=== modified file 'unittests/stubs/aalcameraservice_stub.cpp'
617--- unittests/stubs/aalcameraservice_stub.cpp 2015-10-14 20:09:21 +0000
618+++ unittests/stubs/aalcameraservice_stub.cpp 2015-12-08 15:15:50 +0000
619@@ -73,6 +73,10 @@
620 {
621 }
622
623+void AalCameraService::onApplicationStateChanged()
624+{
625+}
626+
627 void AalCameraService::initControls(CameraControl *camControl, CameraControlListener *listener)
628 {
629 delete m_androidControl;

Subscribers

People subscribed via source and target branches