summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@theqtcompany.com>2014-12-12 12:00:06 +0100
committerYoann Lopes <yoann.lopes@theqtcompany.com>2015-01-13 13:34:41 +0100
commitfe21ee675e72f7cb3936db6aa01862cfd322ce50 (patch)
tree8d2caa1d13b79cff554a7fbb8b98051c0695d683 /tests
parentc31d8cddd0a2e1f1ee622bc9ea07d038191ceea2 (diff)
New camera viewfinder settings API.
There already was a control interface for the viewfinder settings but no real public C++ API and a partial QML API. This patch adds a new C++ API and improves the QML API. Supported viewfinder settings are resolution, minimumFrameRate, maximumFrameRate and pixelFormat. The camera can be queried for the supported values for each of these settings. A new control interface was created to match the new API. Change-Id: I289fea038fe46277a5516c956a64280da09ed985 Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/unit/qcamera/tst_qcamera.cpp170
-rw-r--r--tests/auto/unit/qmultimedia_common/mockcamera.pri3
-rw-r--r--tests/auto/unit/qmultimedia_common/mockcameraservice.h8
-rw-r--r--tests/auto/unit/qmultimedia_common/mockcameraviewfindersettingscontrol.h68
4 files changed, 248 insertions, 1 deletions
diff --git a/tests/auto/unit/qcamera/tst_qcamera.cpp b/tests/auto/unit/qcamera/tst_qcamera.cpp
index 6d3979dfc..004dd4366 100644
--- a/tests/auto/unit/qcamera/tst_qcamera.cpp
+++ b/tests/auto/unit/qcamera/tst_qcamera.cpp
@@ -88,6 +88,8 @@ private slots:
void testCameraCapture();
void testCameraCaptureMetadata();
void testImageSettings();
+ void testViewfinderSettings();
+ void testViewfinderSettingsChange();
void testCameraLock();
void testCameraLockCancel();
void testCameraEncodingProperyChange();
@@ -874,6 +876,174 @@ void tst_QCamera::testImageSettings()
QVERIFY(settings1 != settings2);
}
+void tst_QCamera::testViewfinderSettings()
+{
+ QCameraViewfinderSettings settings;
+ QVERIFY(settings.isNull());
+ QVERIFY(settings == QCameraViewfinderSettings());
+
+ QCOMPARE(settings.resolution(), QSize());
+ settings.setResolution(QSize(640, 480));
+ QCOMPARE(settings.resolution(), QSize(640, 480));
+ settings.setResolution(1280, 720);
+ QCOMPARE(settings.resolution(), QSize(1280, 720));
+ QVERIFY(!settings.isNull());
+ QVERIFY(settings != QCameraViewfinderSettings());
+
+ settings = QCameraViewfinderSettings();
+ QVERIFY(qFuzzyIsNull(settings.minimumFrameRate()));
+ settings.setMinimumFrameRate(10.0);
+ QVERIFY(qFuzzyCompare(settings.minimumFrameRate(), 10.0));
+ QVERIFY(qFuzzyIsNull(settings.maximumFrameRate()));
+ settings.setMaximumFrameRate(20.0);
+ QVERIFY(qFuzzyCompare(settings.maximumFrameRate(), 20.0));
+ QVERIFY(!settings.isNull());
+
+ settings = QCameraViewfinderSettings();
+ QCOMPARE(settings.pixelFormat(), QVideoFrame::Format_Invalid);
+ settings.setPixelFormat(QVideoFrame::Format_RGB32);
+ QCOMPARE(settings.pixelFormat(), QVideoFrame::Format_RGB32);
+ QVERIFY(!settings.isNull());
+
+ settings = QCameraViewfinderSettings();
+ QCOMPARE(settings.pixelAspectRatio(), QSize(1, 1));
+ settings.setPixelAspectRatio(QSize(2, 1));
+ QCOMPARE(settings.pixelAspectRatio(), QSize(2, 1));
+ settings.setPixelAspectRatio(3, 2);
+ QCOMPARE(settings.pixelAspectRatio(), QSize(3, 2));
+ QVERIFY(!settings.isNull());
+
+ settings = QCameraViewfinderSettings();
+
+ {
+ QCameraViewfinderSettings settings1;
+ QCameraViewfinderSettings settings2;
+ QCOMPARE(settings2, settings1);
+
+ settings2 = settings1;
+ QCOMPARE(settings2, settings1);
+ QVERIFY(settings2.isNull());
+
+ settings1.setResolution(800, 600);
+
+ QVERIFY(settings2.isNull());
+ QVERIFY(!settings1.isNull());
+ QVERIFY(settings1 != settings2);
+ }
+
+ {
+ QCameraViewfinderSettings settings1;
+ QCameraViewfinderSettings settings2(settings1);
+ QCOMPARE(settings2, settings1);
+
+ settings2 = settings1;
+ QCOMPARE(settings2, settings1);
+ QVERIFY(settings2.isNull());
+
+ settings1.setResolution(800, 600);
+
+ QVERIFY(settings2.isNull());
+ QVERIFY(!settings1.isNull());
+ QVERIFY(settings1 != settings2);
+ }
+
+ QCameraViewfinderSettings settings1;
+ QCameraViewfinderSettings settings2;
+
+ settings1 = QCameraViewfinderSettings();
+ settings1.setResolution(800,600);
+ settings2 = QCameraViewfinderSettings();
+ settings2.setResolution(QSize(800,600));
+ QVERIFY(settings1 == settings2);
+ settings2.setResolution(QSize(400,300));
+ QVERIFY(settings1 != settings2);
+
+ settings1 = QCameraViewfinderSettings();
+ settings1.setMinimumFrameRate(10.0);
+ settings2 = QCameraViewfinderSettings();
+ settings2.setMinimumFrameRate(10.0);
+ QVERIFY(settings1 == settings2);
+ settings2.setMinimumFrameRate(15.0);
+ QVERIFY(settings1 != settings2);
+
+ settings1 = QCameraViewfinderSettings();
+ settings1.setMaximumFrameRate(30.0);
+ settings2 = QCameraViewfinderSettings();
+ settings2.setMaximumFrameRate(30.0);
+ QVERIFY(settings1 == settings2);
+ settings2.setMaximumFrameRate(15.0);
+ QVERIFY(settings1 != settings2);
+
+ settings1 = QCameraViewfinderSettings();
+ settings1.setPixelFormat(QVideoFrame::Format_YV12);
+ settings2 = QCameraViewfinderSettings();
+ settings2.setPixelFormat(QVideoFrame::Format_YV12);
+ QVERIFY(settings1 == settings2);
+ settings2.setPixelFormat(QVideoFrame::Format_NV21);
+ QVERIFY(settings1 != settings2);
+
+ settings1 = QCameraViewfinderSettings();
+ settings1.setPixelAspectRatio(2,1);
+ settings2 = QCameraViewfinderSettings();
+ settings2.setPixelAspectRatio(QSize(2,1));
+ QVERIFY(settings1 == settings2);
+ settings2.setPixelAspectRatio(QSize(1,2));
+ QVERIFY(settings1 != settings2);
+}
+
+void tst_QCamera::testViewfinderSettingsChange()
+{
+ QCamera camera;
+
+ QSignalSpy stateChangedSignal(&camera, SIGNAL(stateChanged(QCamera::State)));
+ QSignalSpy statusChangedSignal(&camera, SIGNAL(statusChanged(QCamera::Status)));
+
+ camera.start();
+ QCOMPARE(camera.state(), QCamera::ActiveState);
+ QCOMPARE(camera.status(), QCamera::ActiveStatus);
+
+ QCOMPARE(stateChangedSignal.count(), 1);
+ QCOMPARE(statusChangedSignal.count(), 1);
+ stateChangedSignal.clear();
+ statusChangedSignal.clear();
+
+ //the settings change should trigger camera stop/start
+ camera.setViewfinderSettings(QCameraViewfinderSettings());
+ QCOMPARE(camera.state(), QCamera::ActiveState);
+ QCOMPARE(camera.status(), QCamera::LoadedStatus);
+
+ QCOMPARE(stateChangedSignal.count(), 0);
+ QCOMPARE(statusChangedSignal.count(), 1);
+ stateChangedSignal.clear();
+ statusChangedSignal.clear();
+
+ QCOMPARE(camera.state(), QCamera::ActiveState);
+ QTRY_COMPARE(camera.status(), QCamera::ActiveStatus);
+
+ QCOMPARE(stateChangedSignal.count(), 0);
+ QCOMPARE(statusChangedSignal.count(), 1);
+ stateChangedSignal.clear();
+ statusChangedSignal.clear();
+
+ //the settings change should trigger camera stop/start only once
+ camera.setViewfinderSettings(QCameraViewfinderSettings());
+ camera.setViewfinderSettings(QCameraViewfinderSettings());
+
+ QCOMPARE(camera.state(), QCamera::ActiveState);
+ QCOMPARE(camera.status(), QCamera::LoadedStatus);
+
+ QCOMPARE(stateChangedSignal.count(), 0);
+ QCOMPARE(statusChangedSignal.count(), 1);
+ stateChangedSignal.clear();
+ statusChangedSignal.clear();
+
+ QCOMPARE(camera.state(), QCamera::ActiveState);
+ QTRY_COMPARE(camera.status(), QCamera::ActiveStatus);
+
+ QCOMPARE(stateChangedSignal.count(), 0);
+ QCOMPARE(statusChangedSignal.count(), 1);
+}
+
void tst_QCamera::testCameraLock()
{
QCamera camera;
diff --git a/tests/auto/unit/qmultimedia_common/mockcamera.pri b/tests/auto/unit/qmultimedia_common/mockcamera.pri
index dbd7312b2..f6f97de1e 100644
--- a/tests/auto/unit/qmultimedia_common/mockcamera.pri
+++ b/tests/auto/unit/qmultimedia_common/mockcamera.pri
@@ -18,7 +18,8 @@ HEADERS *= \
../qmultimedia_common/mockimageencodercontrol.h \
../qmultimedia_common/mockcameracontrol.h \
../qmultimedia_common/mockvideodeviceselectorcontrol.h \
- ../qmultimedia_common/mockcamerainfocontrol.h
+ ../qmultimedia_common/mockcamerainfocontrol.h \
+ ../qmultimedia_common/mockcameraviewfindersettingscontrol.h
include(mockvideo.pri)
diff --git a/tests/auto/unit/qmultimedia_common/mockcameraservice.h b/tests/auto/unit/qmultimedia_common/mockcameraservice.h
index f9ffcfdce..28fa0fd4d 100644
--- a/tests/auto/unit/qmultimedia_common/mockcameraservice.h
+++ b/tests/auto/unit/qmultimedia_common/mockcameraservice.h
@@ -51,6 +51,7 @@
#include "../qmultimedia_common/mockvideowindowcontrol.h"
#include "../qmultimedia_common/mockvideodeviceselectorcontrol.h"
#include "../qmultimedia_common/mockcamerainfocontrol.h"
+#include "../qmultimedia_common/mockcameraviewfindersettingscontrol.h"
class MockSimpleCameraService : public QMediaService
{
@@ -101,6 +102,7 @@ public:
windowControl = new MockVideoWindowControl(this);
mockVideoDeviceSelectorControl = new MockVideoDeviceSelectorControl(this);
mockCameraInfoControl = new MockCameraInfoControl(this);
+ mockViewfinderSettingsControl = new MockCameraViewfinderSettingsControl(this);
rendererRef = 0;
windowRef = 0;
}
@@ -162,6 +164,11 @@ public:
return windowControl;
}
}
+
+ if (qstrcmp(iid, QCameraViewfinderSettingsControl2_iid) == 0) {
+ return mockViewfinderSettingsControl;
+ }
+
return 0;
}
@@ -188,6 +195,7 @@ public:
MockVideoWindowControl *windowControl;
MockVideoDeviceSelectorControl *mockVideoDeviceSelectorControl;
MockCameraInfoControl *mockCameraInfoControl;
+ MockCameraViewfinderSettingsControl *mockViewfinderSettingsControl;
int rendererRef;
int windowRef;
};
diff --git a/tests/auto/unit/qmultimedia_common/mockcameraviewfindersettingscontrol.h b/tests/auto/unit/qmultimedia_common/mockcameraviewfindersettingscontrol.h
new file mode 100644
index 000000000..49b323202
--- /dev/null
+++ b/tests/auto/unit/qmultimedia_common/mockcameraviewfindersettingscontrol.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MOCKCAMERAVIEWFINDERSETTINGSCONTROL_H
+#define MOCKCAMERAVIEWFINDERSETTINGSCONTROL_H
+
+#include "qcameraviewfindersettingscontrol.h"
+
+class MockCameraViewfinderSettingsControl : public QCameraViewfinderSettingsControl2
+{
+ Q_OBJECT
+public:
+ MockCameraViewfinderSettingsControl(QObject *parent = 0):
+ QCameraViewfinderSettingsControl2(parent)
+ {
+ }
+
+ ~MockCameraViewfinderSettingsControl() {}
+
+ QCameraViewfinderSettings viewfinderSettings() const
+ {
+ return settings;
+ }
+
+ void setViewfinderSettings(const QCameraViewfinderSettings &s)
+ {
+ settings = s;
+ }
+
+ QList<QCameraViewfinderSettings> supportedViewfinderSettings() const
+ {
+ return QList<QCameraViewfinderSettings>();
+ }
+
+ QCameraViewfinderSettings settings;
+};
+
+#endif // MOCKCAMERAVIEWFINDERSETTINGSCONTROL_H