New QCameraInfo class.

The class allows to get the list of available cameras on the system as
well as getting some static information about them such as their unique
ID, display name, physical position and sensor orientation.

This makes QCamera::availableDevices() and QCamera::deviceDescription()
obsolete.

This patch contains the API, documentation and auto-tests but not the
actual implementation by each backend (except for retrieving the default
camera device).

[ChangeLog][QtMultimedia] Added new QCameraInfo class
[ChangeLog][QtMultimedia] QCamera: availableDevices() and
deviceDescription() are deprecated, use QCameraInfo instead

Change-Id: I64fd65729ab26a789468979ed5444ee90bb82cd0
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
This commit is contained in:
Yoann Lopes
2014-01-22 16:18:42 +01:00
committed by The Qt Project
parent d964388b38
commit b28ee24628
54 changed files with 2218 additions and 154 deletions

View File

@@ -57,6 +57,7 @@
#include <qcameracapturedestinationcontrol.h>
#include <qmediaservice.h>
#include <qcamera.h>
#include <qcamerainfo.h>
#include <qcameraimagecapture.h>
#include <qvideorenderercontrol.h>
@@ -101,7 +102,7 @@ private slots:
void testCaptureDestination();
void testCaptureFormat();
void testConstructorWithDefaultProvider();
void testConstructor();
void testCaptureMode();
void testIsCaptureModeSupported();
void testRequestedLocks();
@@ -1141,6 +1142,8 @@ void tst_QCamera::testEnumDebug()
qDebug() << QCamera::NoLock;
QTest::ignoreMessage(QtDebugMsg, "QCamera::LockExposure ");
qDebug() << QCamera::LockExposure;
QTest::ignoreMessage(QtDebugMsg, "QCamera::FrontFace ");
qDebug() << QCamera::FrontFace;
}
void tst_QCamera::testCameraControl()
@@ -1149,13 +1152,75 @@ void tst_QCamera::testCameraControl()
QVERIFY(m_cameraControl != NULL);
}
/* Test case for constructor with default provider */
void tst_QCamera::testConstructorWithDefaultProvider()
void tst_QCamera::testConstructor()
{
QCamera *camera = new QCamera(0);
QVERIFY(camera != NULL);
QCOMPARE(camera->state(), QCamera::UnloadedState);
delete camera;
// Service doesn't implement QVideoDeviceSelectorControl
provider->service = mockSimpleCameraService;
{
QCamera camera;
QCOMPARE(camera.availability(), QMultimedia::Available);
QCOMPARE(camera.error(), QCamera::NoError);
}
{
// Requesting a camera at a specific position from a service which doesn't implement
// the QVideoDeviceSelectorControl should result in loading the default camera
QCamera camera(QCamera::FrontFace);
QCOMPARE(camera.availability(), QMultimedia::Available);
QCOMPARE(camera.error(), QCamera::NoError);
}
// Service implements QVideoDeviceSelectorControl
provider->service = mockCameraService;
{
QCamera camera;
QCOMPARE(camera.availability(), QMultimedia::Available);
QCOMPARE(camera.error(), QCamera::NoError);
QCOMPARE(mockCameraService->mockVideoDeviceSelectorControl->selectedDevice(), 1); // default is 1
}
{
QCamera camera(QCameraInfo::defaultCamera());
QCOMPARE(camera.availability(), QMultimedia::Available);
QCOMPARE(camera.error(), QCamera::NoError);
QCOMPARE(mockCameraService->mockVideoDeviceSelectorControl->selectedDevice(), 1);
QCOMPARE(QCameraInfo(camera), QCameraInfo::defaultCamera());
}
{
QCameraInfo cameraInfo = QCameraInfo::availableCameras().at(0);
QCamera camera(cameraInfo);
QCOMPARE(camera.availability(), QMultimedia::Available);
QCOMPARE(camera.error(), QCamera::NoError);
QCOMPARE(mockCameraService->mockVideoDeviceSelectorControl->selectedDevice(), 0);
QCOMPARE(QCameraInfo(camera), cameraInfo);
}
{
// Requesting a camera at a position which is not available should result in
// loading the default camera
QCamera camera(QCamera::FrontFace);
QCOMPARE(camera.availability(), QMultimedia::Available);
QCOMPARE(camera.error(), QCamera::NoError);
QCOMPARE(mockCameraService->mockVideoDeviceSelectorControl->selectedDevice(), 1);
}
{
QCamera camera(QCamera::BackFace);
QCOMPARE(camera.availability(), QMultimedia::Available);
QCOMPARE(camera.error(), QCamera::NoError);
QCOMPARE(mockCameraService->mockVideoDeviceSelectorControl->selectedDevice(), 0);
}
{
// Should load the default camera when UnspecifiedPosition is requested
QCamera camera(QCamera::UnspecifiedPosition);
QCOMPARE(camera.availability(), QMultimedia::Available);
QCOMPARE(camera.error(), QCamera::NoError);
QCOMPARE(mockCameraService->mockVideoDeviceSelectorControl->selectedDevice(), 1);
}
}
/* captureModeChanged Signal test case. */
@@ -1530,6 +1595,7 @@ void tst_QCamera::testLockChangeReason()
QVERIFY(LockChangeReason == QCamera::LockAcquired);
}
/* All the enums test case for QCameraControl class*/
void tst_QCamera::testEnumsOfQCameraControl()
{