summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den.exter@qinetic.com.au>2014-11-25 09:18:32 +1000
committerAndrew den Exter <andrew.den.exter@qinetic.com.au>2014-11-28 04:19:35 +0100
commitdc2fec1bd8974d695d9c22d4b958a73bbe9ff1a2 (patch)
tree83cd04f31dc20eb2310b63c94a9dac7d369a42e1
parent108dda7a90bd0f0337358b0db47ae55acd16dea6 (diff)
Allow supported camera locks to change after initialization.
A camera backend may not be able to report which locks it supports until after it is loaded, so query support on demand instead of caching the value available at construction time. Change-Id: I56fb1adee980ebc2fa893da3c983a6dce26329c0 Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
-rw-r--r--src/multimedia/camera/qcamera.cpp34
-rw-r--r--src/multimedia/camera/qcamera_p.h2
-rw-r--r--tests/auto/unit/qcamera/tst_qcamera.cpp22
3 files changed, 26 insertions, 32 deletions
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index 22a778ac4..6ba106f41 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -163,8 +163,6 @@ void QCameraPrivate::initControls()
{
Q_Q(QCamera);
- supportedLocks = 0;
-
if (service) {
control = qobject_cast<QCameraControl *>(service->requestControl(QCameraControl_iid));
locksControl = qobject_cast<QCameraLocksControl *>(service->requestControl(QCameraLocksControl_iid));
@@ -183,7 +181,6 @@ void QCameraPrivate::initControls()
if (locksControl) {
q->connect(locksControl, SIGNAL(lockStatusChanged(QCamera::LockType,QCamera::LockStatus,QCamera::LockChangeReason)),
q, SLOT(_q_updateLockStatus(QCamera::LockType,QCamera::LockStatus,QCamera::LockChangeReason)));
- supportedLocks = locksControl->supportedLocks();
}
error = QCamera::NoError;
@@ -225,7 +222,6 @@ void QCameraPrivate::clear()
deviceControl = 0;
infoControl = 0;
service = 0;
- supportedLocks = 0;
}
void QCameraPrivate::updateLockStatus()
@@ -236,8 +232,8 @@ void QCameraPrivate::updateLockStatus()
QMap<QCamera::LockStatus, int> lockStatusPriority;
lockStatusPriority.insert(QCamera::Locked, 1);
- lockStatusPriority.insert(QCamera::Searching, 2);
- lockStatusPriority.insert(QCamera::Unlocked, 3);
+ lockStatusPriority.insert(QCamera::Unlocked, 2);
+ lockStatusPriority.insert(QCamera::Searching, 3);
lockStatus = requestedLocks ? QCamera::Locked : QCamera::Unlocked;
int priority = 0;
@@ -673,7 +669,11 @@ QCamera::Status QCamera::status() const
*/
QCamera::LockTypes QCamera::supportedLocks() const
{
- return d_func()->supportedLocks;
+ Q_D(const QCamera);
+
+ return d->locksControl
+ ? d->locksControl->supportedLocks()
+ : QCamera::LockTypes();
}
/*!
@@ -699,16 +699,13 @@ QCamera::LockStatus QCamera::lockStatus(QCamera::LockType lockType) const
{
const QCameraPrivate *d = d_func();
- if (!(lockType & d->supportedLocks))
- return lockType & d->requestedLocks ? QCamera::Locked : QCamera::Unlocked;
-
if (!(lockType & d->requestedLocks))
return QCamera::Unlocked;
if (d->locksControl)
return d->locksControl->lockStatus(lockType);
- return QCamera::Unlocked;
+ return QCamera::Locked;
}
/*!
@@ -743,12 +740,11 @@ void QCamera::searchAndLock(QCamera::LockTypes locks)
QCamera::LockStatus oldStatus = d->lockStatus;
d->supressLockChangedSignal = true;
- d->requestedLocks |= locks;
-
- locks &= d->supportedLocks;
-
- if (d->locksControl)
+ if (d->locksControl) {
+ locks &= d->locksControl->supportedLocks();
+ d->requestedLocks |= locks;
d->locksControl->searchAndLock(locks);
+ }
d->supressLockChangedSignal = false;
@@ -776,10 +772,10 @@ void QCamera::unlock(QCamera::LockTypes locks)
d->requestedLocks &= ~locks;
- locks &= d->supportedLocks;
-
- if (d->locksControl)
+ if (d->locksControl) {
+ locks &= d->locksControl->supportedLocks();
d->locksControl->unlock(locks);
+ }
d->supressLockChangedSignal = false;
diff --git a/src/multimedia/camera/qcamera_p.h b/src/multimedia/camera/qcamera_p.h
index 630cae166..d43c510bc 100644
--- a/src/multimedia/camera/qcamera_p.h
+++ b/src/multimedia/camera/qcamera_p.h
@@ -72,7 +72,6 @@ public:
capture(0),
state(QCamera::UnloadedState),
error(QCamera::NoError),
- supportedLocks(QCamera::NoLock),
requestedLocks(QCamera::NoLock),
lockStatus(QCamera::Unlocked),
lockChangeReason(QCamera::UserRequest),
@@ -105,7 +104,6 @@ public:
QCamera::Error error;
QString errorString;
- QCamera::LockTypes supportedLocks;
QCamera::LockTypes requestedLocks;
QCamera::LockStatus lockStatus;
diff --git a/tests/auto/unit/qcamera/tst_qcamera.cpp b/tests/auto/unit/qcamera/tst_qcamera.cpp
index 48260ca94..6d3979dfc 100644
--- a/tests/auto/unit/qcamera/tst_qcamera.cpp
+++ b/tests/auto/unit/qcamera/tst_qcamera.cpp
@@ -344,13 +344,13 @@ void tst_QCamera::testSimpleCameraLock()
QSignalSpy lockStatusChangedSignal(&camera, SIGNAL(lockStatusChanged(QCamera::LockStatus,QCamera::LockChangeReason)));
camera.searchAndLock();
- QCOMPARE(camera.lockStatus(), QCamera::Locked);
- QCOMPARE(camera.lockStatus(QCamera::LockExposure), QCamera::Locked);
- QCOMPARE(camera.lockStatus(QCamera::LockFocus), QCamera::Locked);
- QCOMPARE(camera.lockStatus(QCamera::LockWhiteBalance), QCamera::Locked);
- QCOMPARE(lockedSignal.count(), 1);
+ QCOMPARE(camera.lockStatus(), QCamera::Unlocked);
+ QCOMPARE(camera.lockStatus(QCamera::LockExposure), QCamera::Unlocked);
+ QCOMPARE(camera.lockStatus(QCamera::LockFocus), QCamera::Unlocked);
+ QCOMPARE(camera.lockStatus(QCamera::LockWhiteBalance), QCamera::Unlocked);
+ QCOMPARE(lockedSignal.count(), 0);
QCOMPARE(lockFailedSignal.count(), 0);
- QCOMPARE(lockStatusChangedSignal.count(), 1);
+ QCOMPARE(lockStatusChangedSignal.count(), 0);
lockedSignal.clear();
lockFailedSignal.clear();
@@ -364,7 +364,7 @@ void tst_QCamera::testSimpleCameraLock()
QCOMPARE(lockedSignal.count(), 0);
QCOMPARE(lockFailedSignal.count(), 0);
- QCOMPARE(lockStatusChangedSignal.count(), 1);
+ QCOMPARE(lockStatusChangedSignal.count(), 0);
}
void tst_QCamera::testSimpleCaptureDestination()
@@ -1264,18 +1264,18 @@ void tst_QCamera::testRequestedLocks()
camera.unlock();
camera.searchAndLock(QCamera::LockWhiteBalance);
- QCOMPARE(camera.requestedLocks(),QCamera::LockWhiteBalance);
+ QCOMPARE(camera.requestedLocks(),QCamera::NoLock);
camera.unlock();
camera.searchAndLock(QCamera::LockExposure |QCamera::LockFocus );
QCOMPARE(camera.requestedLocks(),QCamera::LockExposure |QCamera::LockFocus );
camera.searchAndLock(QCamera::LockWhiteBalance);
- QCOMPARE(camera.requestedLocks(),QCamera::LockExposure |QCamera::LockFocus|QCamera::LockWhiteBalance );
+ QCOMPARE(camera.requestedLocks(),QCamera::LockExposure |QCamera::LockFocus);
camera.unlock(QCamera::LockExposure);
- QCOMPARE(camera.requestedLocks(),QCamera::LockFocus|QCamera::LockWhiteBalance );
+ QCOMPARE(camera.requestedLocks(),QCamera::LockFocus);
camera.unlock(QCamera::LockFocus);
camera.searchAndLock(QCamera::LockExposure |QCamera::LockWhiteBalance );
- QCOMPARE(camera.requestedLocks(),QCamera::LockExposure|QCamera::LockWhiteBalance );
+ QCOMPARE(camera.requestedLocks(),QCamera::LockExposure);
}
/* Test case for supportedLocks() */