From 13e40d522f6992d7fff38581e4b0005129669bde Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Thu, 13 Aug 2015 16:52:57 +0200 Subject: Fix QCamera viewfinder capabilities functions.. - Filtering the results for a specific pixel aspect ratio would return wrong values. - Correctly sort the frame rate ranges returned by supportedViewfinderFrameRateRanges(). Added missing auto-tests for all viewfinder capabilities functions. Change-Id: Idfb40d4139cc48a5996ce2ddd98131a2f5be76bb Reviewed-by: Christian Stromme --- tests/auto/unit/qcamera/tst_qcamera.cpp | 411 ++++++++++++++++++++- .../mockcameraviewfindersettingscontrol.h | 45 ++- 2 files changed, 454 insertions(+), 2 deletions(-) (limited to 'tests/auto/unit') diff --git a/tests/auto/unit/qcamera/tst_qcamera.cpp b/tests/auto/unit/qcamera/tst_qcamera.cpp index 49fce92d5..6d6894e62 100644 --- a/tests/auto/unit/qcamera/tst_qcamera.cpp +++ b/tests/auto/unit/qcamera/tst_qcamera.cpp @@ -90,6 +90,14 @@ private slots: void testImageSettings(); void testViewfinderSettings(); void testViewfinderSettingsChange(); + void testSupportedViewfinderSettings_data(); + void testSupportedViewfinderSettings(); + void testSupportedViewfinderResolutions_data(); + void testSupportedViewfinderResolutions(); + void testSupportedViewfinderFrameRateRanges_data(); + void testSupportedViewfinderFrameRateRanges(); + void testSupportedViewfinderPixelFormats_data(); + void testSupportedViewfinderPixelFormats(); void testCameraLock(); void testCameraLockCancel(); void testCameraEncodingProperyChange(); @@ -163,8 +171,11 @@ private: MockMediaServiceProvider *provider; }; +Q_DECLARE_METATYPE(QCamera::FrameRateRange) + void tst_QCamera::initTestCase() { + qRegisterMetaType("FrameRateRange"); } void tst_QCamera::init() @@ -906,7 +917,7 @@ void tst_QCamera::testViewfinderSettings() QVERIFY(!settings.isNull()); settings = QCameraViewfinderSettings(); - QCOMPARE(settings.pixelAspectRatio(), QSize(1, 1)); + QCOMPARE(settings.pixelAspectRatio(), QSize()); settings.setPixelAspectRatio(QSize(2, 1)); QCOMPARE(settings.pixelAspectRatio(), QSize(2, 1)); settings.setPixelAspectRatio(3, 2); @@ -1044,6 +1055,404 @@ void tst_QCamera::testViewfinderSettingsChange() QCOMPARE(statusChangedSignal.count(), 1); } +class ViewfinderSettingsBuilder +{ +public: + ViewfinderSettingsBuilder &setResolution(int width, int height) { + m_settings.setResolution(width, height); + return *this; + } + + ViewfinderSettingsBuilder &setMinimumFrameRate(qreal r) { + m_settings.setMinimumFrameRate(r); + return *this; + } + + ViewfinderSettingsBuilder &setMaximumFrameRate(qreal r) { + m_settings.setMaximumFrameRate(r); + return *this; + } + + ViewfinderSettingsBuilder &setPixelFormat(QVideoFrame::PixelFormat f) { + m_settings.setPixelFormat(f); + return *this; + } + + ViewfinderSettingsBuilder &setPixelAspectRatio(int h, int v) { + m_settings.setPixelAspectRatio(h, v); + return *this; + } + + QCameraViewfinderSettings build() { + QCameraViewfinderSettings s = m_settings; + m_settings = QCameraViewfinderSettings(); + return s; + } + +private: + QCameraViewfinderSettings m_settings; +}; + +void tst_QCamera::testSupportedViewfinderSettings_data() +{ + // see mockcameraviewfindersettingscontrol.h for expected values + + ViewfinderSettingsBuilder builder; + + QTest::addColumn("settings"); + QTest::addColumn< QList >("expectedSupportedSettings"); + + QTest::newRow("all supported settings") << QCameraViewfinderSettings() + << (QList() << 0 << 1 << 2 << 3 << 4 << 5); + + QTest::newRow("invalid resolution") << builder.setResolution(452472, 44453).build() + << QList(); + + QTest::newRow("resolution (1)") << builder.setResolution(640, 480).build() + << (QList() << 0); + + QTest::newRow("resolution (2)") << builder.setResolution(1280, 720).build() + << (QList() << 1 << 3 << 4); + + QTest::newRow("invalid minimum frame rate") << builder.setMinimumFrameRate(2).build() + << QList(); + + QTest::newRow("minimum frame rate (1)") << builder.setMinimumFrameRate(5).build() + << (QList() << 2); + + QTest::newRow("minimum frame rate (2)") << builder.setMinimumFrameRate(10).build() + << (QList() << 1 << 3); + + QTest::newRow("minimum frame rate (3)") << builder.setMinimumFrameRate(30).build() + << (QList() << 0 << 4 << 5); + + QTest::newRow("invalid maximum frame rate") << builder.setMaximumFrameRate(2).build() + << QList(); + + QTest::newRow("maximum frame rate (1)") << builder.setMaximumFrameRate(10).build() + << (QList() << 1 << 2 << 3); + + QTest::newRow("maximum frame rate (2)") << builder.setMaximumFrameRate(30).build() + << (QList() << 0 << 4 << 5); + + QTest::newRow("invalid pixel format") << builder.setPixelFormat(QVideoFrame::Format_CameraRaw).build() + << QList(); + + QTest::newRow("pixel format (1)") << builder.setPixelFormat(QVideoFrame::Format_BGR32).build() + << (QList() << 2); + + QTest::newRow("pixel format (2)") << builder.setPixelFormat(QVideoFrame::Format_YV12).build() + << (QList() << 3 << 4); + + QTest::newRow("pixel format (3)") << builder.setPixelFormat(QVideoFrame::Format_NV12).build() + << (QList() << 0 << 1 << 5); + + QTest::newRow("invalid pixel aspect ratio") << builder.setPixelAspectRatio(5, 3).build() + << QList(); + + QTest::newRow("pixel aspect ratio (1)") << builder.setPixelAspectRatio(2, 1).build() + << (QList() << 2); + + QTest::newRow("pixel aspect ratio (2)") << builder.setPixelAspectRatio(1, 1).build() + << (QList() << 0 << 1 << 3 << 4 << 5); + + QTest::newRow("invalid multi settings") << builder.setResolution(640, 480) + .setMinimumFrameRate(10) + .setMaximumFrameRate(10) + .build() + << QList(); + + QTest::newRow("multi settings (1)") << builder.setResolution(640, 480) + .setMinimumFrameRate(30) + .setMaximumFrameRate(30) + .build() + << (QList() << 0); + + QTest::newRow("multi settings (2)") << builder.setResolution(1280, 720) + .setMinimumFrameRate(10) + .setMaximumFrameRate(10) + .build() + << (QList() << 1 << 3); + + QTest::newRow("multi settings (3)") << builder.setPixelFormat(QVideoFrame::Format_NV12) + .setMinimumFrameRate(30) + .build() + << (QList() << 0 << 5); + + QTest::newRow("multi settings (4)") << builder.setPixelAspectRatio(1, 1) + .setMaximumFrameRate(10) + .build() + << (QList() << 1 << 3); +} + +void tst_QCamera::testSupportedViewfinderSettings() +{ + QFETCH(QCameraViewfinderSettings, settings); + QFETCH(QList, expectedSupportedSettings); + + QList actualSupportedSettings = QCamera().supportedViewfinderSettings(settings); + QCOMPARE(actualSupportedSettings.size(), expectedSupportedSettings.size()); + for (int i = 0; i < expectedSupportedSettings.size(); ++i) { + QCameraViewfinderSettings expectedSettings = mockCameraService->mockViewfinderSettingsControl->supportedSettings.at(expectedSupportedSettings.at(i)); + QCOMPARE(actualSupportedSettings.at(i), expectedSettings); + } +} + +void tst_QCamera::testSupportedViewfinderResolutions_data() +{ + // see mockcameraviewfindersettingscontrol.h for expected values + + typedef QList SizeList; + ViewfinderSettingsBuilder builder; + + QTest::addColumn("settings"); + QTest::addColumn("expectedResolutions"); + + QTest::newRow("empty settings") << QCameraViewfinderSettings() + << (SizeList() << QSize(320, 240) + << QSize(640, 480) + << QSize(1280, 720) + << QSize(1920, 1080)); + + QTest::newRow("invalid minimum frame rate") << builder.setMinimumFrameRate(2).build() + << SizeList(); + + QTest::newRow("minimum frame rate (1)") << builder.setMinimumFrameRate(5).build() + << (SizeList() << QSize(1920, 1080)); + + QTest::newRow("minimum frame rate (2)") << builder.setMinimumFrameRate(10).build() + << (SizeList() << QSize(1280, 720)); + + QTest::newRow("minimum frame rate (3)") << builder.setMinimumFrameRate(30).build() + << (SizeList() << QSize(320, 240) + << QSize(640, 480) + << QSize(1280, 720)); + + QTest::newRow("invalid maximum frame rate") << builder.setMaximumFrameRate(2).build() + << SizeList(); + + QTest::newRow("maximum frame rate") << builder.setMaximumFrameRate(10).build() + << (SizeList() << QSize(1280, 720) + << QSize(1920, 1080)); + + QTest::newRow("invalid pixel format") << builder.setPixelFormat(QVideoFrame::Format_CameraRaw).build() + << SizeList(); + + QTest::newRow("pixel format (1)") << builder.setPixelFormat(QVideoFrame::Format_BGR32).build() + << (SizeList() << QSize(1920, 1080)); + + QTest::newRow("pixel format (2)") << builder.setPixelFormat(QVideoFrame::Format_YV12).build() + << (SizeList() << QSize(1280, 720)); + + QTest::newRow("pixel format (3)") << builder.setPixelFormat(QVideoFrame::Format_NV12).build() + << (SizeList() << QSize(320, 240) + << QSize(640, 480) + << QSize(1280, 720)); + + QTest::newRow("invalid pixel aspect ratio") << builder.setPixelAspectRatio(7, 2).build() + << SizeList(); + + QTest::newRow("pixel aspect ratio (1") << builder.setPixelAspectRatio(2, 1).build() + << (SizeList() << QSize(1920, 1080)); + + QTest::newRow("pixel aspect ratio (2") << builder.setPixelAspectRatio(1, 1).build() + << (SizeList() << QSize(320, 240) + << QSize(640, 480) + << QSize(1280, 720)); + + QTest::newRow("invalid multi settings (1)") << builder.setMinimumFrameRate(2) + .setMaximumFrameRate(3) + .build() + << SizeList(); + + QTest::newRow("invalid multi settings (2)") << builder.setMinimumFrameRate(5) + .setMaximumFrameRate(11) + .build() + << SizeList(); + + QTest::newRow("multi settings (1)") << builder.setMinimumFrameRate(10) + .setMaximumFrameRate(10) + .build() + << (SizeList() << QSize(1280, 720)); + + QTest::newRow("multi settings (2)") << builder.setMinimumFrameRate(30) + .setMaximumFrameRate(30) + .build() + << (SizeList() << QSize(320, 240) + << QSize(640, 480) + << QSize(1280, 720)); + + QTest::newRow("multi settings (3)") << builder.setPixelFormat(QVideoFrame::Format_NV12) + .setMinimumFrameRate(30) + .build() + << (SizeList() << QSize(320, 240) + << QSize(640, 480)); + + QTest::newRow("multi settings (4)") << builder.setPixelAspectRatio(1, 1) + .setMaximumFrameRate(10) + .build() + << (SizeList() << QSize(1280, 720)); +} + +void tst_QCamera::testSupportedViewfinderResolutions() +{ + QFETCH(QCameraViewfinderSettings, settings); + QFETCH(QList, expectedResolutions); + + QList actualResolutions = QCamera().supportedViewfinderResolutions(settings); + QCOMPARE(actualResolutions.size(), expectedResolutions.size()); + for (int i = 0; i < actualResolutions.size(); ++i) + QCOMPARE(actualResolutions.at(i), expectedResolutions.at(i)); +} + +void tst_QCamera::testSupportedViewfinderFrameRateRanges_data() +{ + // see mockcameraviewfindersettingscontrol.h for expected values + + typedef QList RangeList; + ViewfinderSettingsBuilder builder; + + QTest::addColumn("settings"); + QTest::addColumn("expectedFrameRateRanges"); + + QTest::newRow("empty settings") << QCameraViewfinderSettings() + << (RangeList() << QCamera::FrameRateRange(5, 10) + << QCamera::FrameRateRange(10, 10) + << QCamera::FrameRateRange(30, 30)); + + QTest::newRow("invalid resolution") << builder.setResolution(452472, 444534).build() + << RangeList(); + + QTest::newRow("resolution (1)") << builder.setResolution(320, 240).build() + << (RangeList() << QCamera::FrameRateRange(30, 30)); + + QTest::newRow("resolution (2)") << builder.setResolution(1280, 720).build() + << (RangeList() << QCamera::FrameRateRange(10, 10) + << QCamera::FrameRateRange(30, 30)); + + QTest::newRow("resolution (3)") << builder.setResolution(1920, 1080).build() + << (RangeList() << QCamera::FrameRateRange(5, 10)); + + QTest::newRow("invalid minimum frame rate") << builder.setMinimumFrameRate(2).build() + << RangeList(); + + QTest::newRow("minimum frame rate (1)") << builder.setMinimumFrameRate(5).build() + << (RangeList() << QCamera::FrameRateRange(5, 10)); + + QTest::newRow("minimum frame rate (2)") << builder.setMinimumFrameRate(10).build() + << (RangeList() << QCamera::FrameRateRange(10, 10)); + + QTest::newRow("invalid maximum frame rate") << builder.setMaximumFrameRate(2).build() + << RangeList(); + + QTest::newRow("maximum frame rate (1)") << builder.setMaximumFrameRate(10).build() + << (RangeList() << QCamera::FrameRateRange(5, 10) + << QCamera::FrameRateRange(10, 10)); + + QTest::newRow("maximum frame rate (2)") << builder.setMaximumFrameRate(30).build() + << (RangeList() << QCamera::FrameRateRange(30, 30)); + + QTest::newRow("invalid pixel format") << builder.setPixelFormat(QVideoFrame::Format_IMC1).build() + << RangeList(); + + QTest::newRow("pixel format (1)") << builder.setPixelFormat(QVideoFrame::Format_BGR32).build() + << (RangeList() << QCamera::FrameRateRange(5, 10)); + + QTest::newRow("pixel format (2)") << builder.setPixelFormat(QVideoFrame::Format_NV12).build() + << (RangeList() << QCamera::FrameRateRange(10, 10) + << QCamera::FrameRateRange(30, 30)); + + QTest::newRow("invalid pixel aspect ratio") << builder.setPixelAspectRatio(2, 3).build() + << RangeList(); + + QTest::newRow("pixel aspect ratio (1)") << builder.setPixelAspectRatio(2, 1).build() + << (RangeList() << QCamera::FrameRateRange(5, 10)); + + QTest::newRow("pixel aspect ratio (2)") << builder.setPixelAspectRatio(1, 1).build() + << (RangeList() << QCamera::FrameRateRange(10, 10) + << QCamera::FrameRateRange(30, 30)); +} + +void tst_QCamera::testSupportedViewfinderFrameRateRanges() +{ + QFETCH(QCameraViewfinderSettings, settings); + QFETCH(QList, expectedFrameRateRanges); + + QList actualFrameRateRanges = QCamera().supportedViewfinderFrameRateRanges(settings); + QCOMPARE(actualFrameRateRanges.size(), expectedFrameRateRanges.size()); + for (int i = 0; i < actualFrameRateRanges.size(); ++i) + QCOMPARE(actualFrameRateRanges.at(i), expectedFrameRateRanges.at(i)); +} + +void tst_QCamera::testSupportedViewfinderPixelFormats_data() +{ + // see mockcameraviewfindersettingscontrol.h for expected values + + typedef QList FormatList; + ViewfinderSettingsBuilder builder; + + QTest::addColumn("settings"); + QTest::addColumn("expectedPixelFormats"); + + QTest::newRow("empty settings") << QCameraViewfinderSettings() + << (FormatList() << QVideoFrame::Format_NV12 + << QVideoFrame::Format_BGR32 + << QVideoFrame::Format_YV12); + + QTest::newRow("invalid resolution") << builder.setResolution(452472, 444534).build() + << FormatList(); + + QTest::newRow("resolution (1)") << builder.setResolution(640, 480).build() + << (FormatList() << QVideoFrame::Format_NV12); + + QTest::newRow("resolution (2)") << builder.setResolution(1280, 720).build() + << (FormatList() << QVideoFrame::Format_NV12 + << QVideoFrame::Format_YV12); + + QTest::newRow("invalid minimum frame rate") << builder.setMinimumFrameRate(2).build() + << FormatList(); + + QTest::newRow("minimum frame rate (1)") << builder.setMinimumFrameRate(5).build() + << (FormatList() << QVideoFrame::Format_BGR32); + + QTest::newRow("minimum frame rate (2)") << builder.setMinimumFrameRate(10).build() + << (FormatList() << QVideoFrame::Format_NV12 + << QVideoFrame::Format_YV12); + + QTest::newRow("invalid maximum frame rate") << builder.setMaximumFrameRate(2).build() + << FormatList(); + + QTest::newRow("maximum frame rate (1)") << builder.setMaximumFrameRate(10).build() + << (FormatList() << QVideoFrame::Format_NV12 + << QVideoFrame::Format_BGR32 + << QVideoFrame::Format_YV12); + + QTest::newRow("maximum frame rate (2)") << builder.setMinimumFrameRate(30).build() + << (FormatList() << QVideoFrame::Format_NV12 + << QVideoFrame::Format_YV12); + + QTest::newRow("invalid pixel aspect ratio") << builder.setPixelAspectRatio(2, 3).build() + << FormatList(); + + QTest::newRow("pixel aspect ratio (1)") << builder.setPixelAspectRatio(2, 1).build() + << (FormatList() << QVideoFrame::Format_BGR32); + + QTest::newRow("pixel aspect ratio (2)") << builder.setPixelAspectRatio(1, 1).build() + << (FormatList() << QVideoFrame::Format_NV12 + << QVideoFrame::Format_YV12); +} + +void tst_QCamera::testSupportedViewfinderPixelFormats() +{ + QFETCH(QCameraViewfinderSettings, settings); + QFETCH(QList, expectedPixelFormats); + + QList actualPixelFormats = QCamera().supportedViewfinderPixelFormats(settings); + QCOMPARE(actualPixelFormats.size(), expectedPixelFormats.size()); + for (int i = 0; i < actualPixelFormats.size(); ++i) + QCOMPARE(actualPixelFormats.at(i), expectedPixelFormats.at(i)); +} + void tst_QCamera::testCameraLock() { QCamera camera; diff --git a/tests/auto/unit/qmultimedia_common/mockcameraviewfindersettingscontrol.h b/tests/auto/unit/qmultimedia_common/mockcameraviewfindersettingscontrol.h index f272bb094..85427a70f 100644 --- a/tests/auto/unit/qmultimedia_common/mockcameraviewfindersettingscontrol.h +++ b/tests/auto/unit/qmultimedia_common/mockcameraviewfindersettingscontrol.h @@ -43,6 +43,48 @@ public: MockCameraViewfinderSettingsControl(QObject *parent = 0): QCameraViewfinderSettingsControl2(parent) { + QCameraViewfinderSettings s; + s.setResolution(640, 480); + s.setMinimumFrameRate(30); + s.setMaximumFrameRate(30); + s.setPixelFormat(QVideoFrame::Format_NV12); + s.setPixelAspectRatio(1, 1); + supportedSettings.append(s); + + s.setResolution(1280, 720); + s.setMinimumFrameRate(10); + s.setMaximumFrameRate(10); + s.setPixelFormat(QVideoFrame::Format_NV12); + s.setPixelAspectRatio(1, 1); + supportedSettings.append(s); + + s.setResolution(1920, 1080); + s.setMinimumFrameRate(5); + s.setMaximumFrameRate(10); + s.setPixelFormat(QVideoFrame::Format_BGR32); + s.setPixelAspectRatio(2, 1); + supportedSettings.append(s); + + s.setResolution(1280, 720); + s.setMinimumFrameRate(10); + s.setMaximumFrameRate(10); + s.setPixelFormat(QVideoFrame::Format_YV12); + s.setPixelAspectRatio(1, 1); + supportedSettings.append(s); + + s.setResolution(1280, 720); + s.setMinimumFrameRate(30); + s.setMaximumFrameRate(30); + s.setPixelFormat(QVideoFrame::Format_YV12); + s.setPixelAspectRatio(1, 1); + supportedSettings.append(s); + + s.setResolution(320, 240); + s.setMinimumFrameRate(30); + s.setMaximumFrameRate(30); + s.setPixelFormat(QVideoFrame::Format_NV12); + s.setPixelAspectRatio(1, 1); + supportedSettings.append(s); } ~MockCameraViewfinderSettingsControl() {} @@ -59,10 +101,11 @@ public: QList supportedViewfinderSettings() const { - return QList(); + return supportedSettings; } QCameraViewfinderSettings settings; + QList supportedSettings; }; #endif // MOCKCAMERAVIEWFINDERSETTINGSCONTROL_H -- cgit v1.2.3