From 5376573eff55f370f041889618c9a7a9e1894615 Mon Sep 17 00:00:00 2001 From: Igor Murashkin Date: Wed, 20 Feb 2013 17:41:57 -0800 Subject: Camera: ProClient add asynchronous locks and such Change-Id: I551e5e5e76d9be733fab5224beaa7309268c0f38 --- camera/ProCamera.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'camera/ProCamera.cpp') diff --git a/camera/ProCamera.cpp b/camera/ProCamera.cpp index 134a4a3..8164188 100644 --- a/camera/ProCamera.cpp +++ b/camera/ProCamera.cpp @@ -118,6 +118,12 @@ void ProCamera::DeathNotifier::binderDied(const wp& who) { ALOGW("Camera service died!"); } +void ProCamera::setListener(const sp& listener) +{ + Mutex::Autolock _l(mLock); + mListener = listener; +} + // callback from camera service void ProCamera::notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) @@ -164,6 +170,34 @@ void ProCamera::dataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, /* IProCameraUser's implementation */ +void ProCamera::onLockStatusChanged( + IProCameraCallbacks::LockStatus newLockStatus) +{ + ALOGV("%s: newLockStatus = %d", __FUNCTION__, newLockStatus); + + sp listener; + { + Mutex::Autolock _l(mLock); + listener = mListener; + } + if (listener != NULL) { + switch (newLockStatus) { + case IProCameraCallbacks::LOCK_ACQUIRED: + listener->onLockAcquired(); + break; + case IProCameraCallbacks::LOCK_RELEASED: + listener->onLockReleased(); + break; + case IProCameraCallbacks::LOCK_STOLEN: + listener->onLockStolen(); + break; + default: + ALOGE("%s: Unknown lock status: %d", + __FUNCTION__, newLockStatus); + } + } +} + status_t ProCamera::exclusiveTryLock() { sp c = mCamera; -- cgit v1.1