diff options
author | 2009-09-15 14:51:56 +0800 | |
---|---|---|
committer | 2009-09-15 18:29:03 +0800 | |
commit | 00900eb35473530a5fc77f7bd3ac306b6dcf19cb (patch) | |
tree | 50ef4d7f5da62be60d0748dba6ed6713c61d6443 | |
parent | f5733b2938151fda955f01d9dc3ad15f7292604d (diff) |
Fix 2083478: Camera needs an auto-focus cancel API
Change-Id: I13bda991b32aee47e82b5cf9d43b3021c416a9a2
-rw-r--r-- | camera/libcameraservice/CameraHardwareStub.cpp | 5 | ||||
-rw-r--r-- | camera/libcameraservice/CameraHardwareStub.h | 1 | ||||
-rw-r--r-- | camera/libcameraservice/CameraService.cpp | 17 | ||||
-rw-r--r-- | camera/libcameraservice/CameraService.h | 3 | ||||
-rw-r--r-- | include/ui/Camera.h | 3 | ||||
-rw-r--r-- | include/ui/CameraHardwareInterface.h | 8 | ||||
-rw-r--r-- | include/ui/ICamera.h | 3 | ||||
-rw-r--r-- | libs/ui/Camera.cpp | 8 | ||||
-rw-r--r-- | libs/ui/ICamera.cpp | 18 |
9 files changed, 65 insertions, 1 deletions
diff --git a/camera/libcameraservice/CameraHardwareStub.cpp b/camera/libcameraservice/CameraHardwareStub.cpp index 24496bb7e2..35f4846f9b 100644 --- a/camera/libcameraservice/CameraHardwareStub.cpp +++ b/camera/libcameraservice/CameraHardwareStub.cpp @@ -265,6 +265,11 @@ status_t CameraHardwareStub::autoFocus() return NO_ERROR; } +status_t CameraHardwareStub::cancelAutoFocus() +{ + return NO_ERROR; +} + /*static*/ int CameraHardwareStub::beginPictureThread(void *cookie) { CameraHardwareStub *c = (CameraHardwareStub *)cookie; diff --git a/camera/libcameraservice/CameraHardwareStub.h b/camera/libcameraservice/CameraHardwareStub.h index 000906a743..f957fa87ac 100644 --- a/camera/libcameraservice/CameraHardwareStub.h +++ b/camera/libcameraservice/CameraHardwareStub.h @@ -51,6 +51,7 @@ public: virtual void releaseRecordingFrame(const sp<IMemory>& mem); virtual status_t autoFocus(); + virtual status_t cancelAutoFocus(); virtual status_t takePicture(); virtual status_t cancelPicture(); virtual status_t dump(int fd, const Vector<String16>& args) const; diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index f425f6bc18..bab7d086a1 100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -798,7 +798,6 @@ static void dump_to_file(const char *fname, } #endif -// take a picture - image is returned in callback status_t CameraService::Client::autoFocus() { LOGD("autoFocus (pid %d)", getCallingPid()); @@ -815,6 +814,22 @@ status_t CameraService::Client::autoFocus() return mHardware->autoFocus(); } +status_t CameraService::Client::cancelAutoFocus() +{ + LOGD("cancelAutoFocus (pid %d)", getCallingPid()); + + Mutex::Autolock lock(mLock); + status_t result = checkPid(); + if (result != NO_ERROR) return result; + + if (mHardware == 0) { + LOGE("mHardware is NULL, returning."); + return INVALID_OPERATION; + } + + return mHardware->cancelAutoFocus(); +} + // take a picture - image is returned in callback status_t CameraService::Client::takePicture() { diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h index f8c7216706..0a909cf01a 100644 --- a/camera/libcameraservice/CameraService.h +++ b/camera/libcameraservice/CameraService.h @@ -110,6 +110,9 @@ private: // auto focus virtual status_t autoFocus(); + // cancel auto focus + virtual status_t cancelAutoFocus(); + // take a picture - returns an IMemory (ref-counted mmap) virtual status_t takePicture(); diff --git a/include/ui/Camera.h b/include/ui/Camera.h index ae6e255ea9..9ceb8fd43d 100644 --- a/include/ui/Camera.h +++ b/include/ui/Camera.h @@ -143,6 +143,9 @@ public: // autoFocus - status returned from callback status_t autoFocus(); + // cancel auto focus + status_t cancelAutoFocus(); + // take a picture - picture returned from callback status_t takePicture(); diff --git a/include/ui/CameraHardwareInterface.h b/include/ui/CameraHardwareInterface.h index 535f70e0cd..5fbb7d80cb 100644 --- a/include/ui/CameraHardwareInterface.h +++ b/include/ui/CameraHardwareInterface.h @@ -161,6 +161,14 @@ public: virtual status_t autoFocus() = 0; /** + * Cancels auto-focus function. If the auto-focus is still in progress, + * this function will cancel it. Whether the auto-focus is in progress + * or not, this function will return the focus position to the default. + * If the camera does not support auto-focus, this is a no-op. + */ + virtual status_t cancelAutoFocus() = 0; + + /** * Take a picture. */ virtual status_t takePicture() = 0; diff --git a/include/ui/ICamera.h b/include/ui/ICamera.h index 1df7914041..7595e36e57 100644 --- a/include/ui/ICamera.h +++ b/include/ui/ICamera.h @@ -76,6 +76,9 @@ public: // auto focus virtual status_t autoFocus() = 0; + // cancel auto focus + virtual status_t cancelAutoFocus() = 0; + // take a picture virtual status_t takePicture() = 0; diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp index 12a7725010..0c6d3408ab 100644 --- a/libs/ui/Camera.cpp +++ b/libs/ui/Camera.cpp @@ -242,6 +242,14 @@ status_t Camera::autoFocus() return c->autoFocus(); } +status_t Camera::cancelAutoFocus() +{ + LOGV("cancelAutoFocus"); + sp <ICamera> c = mCamera; + if (c == 0) return NO_INIT; + return c->cancelAutoFocus(); +} + // take a picture status_t Camera::takePicture() { diff --git a/libs/ui/ICamera.cpp b/libs/ui/ICamera.cpp index 805c2ca2be..fd7e084d28 100644 --- a/libs/ui/ICamera.cpp +++ b/libs/ui/ICamera.cpp @@ -32,6 +32,7 @@ enum { START_PREVIEW, STOP_PREVIEW, AUTO_FOCUS, + CANCEL_AUTO_FOCUS, TAKE_PICTURE, SET_PARAMETERS, GET_PARAMETERS, @@ -162,6 +163,17 @@ public: return ret; } + // cancel focus + status_t cancelAutoFocus() + { + LOGV("cancelAutoFocus"); + Parcel data, reply; + data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); + remote()->transact(CANCEL_AUTO_FOCUS, data, &reply); + status_t ret = reply.readInt32(); + return ret; + } + // take a picture - returns an IMemory (ref-counted mmap) status_t takePicture() { @@ -294,6 +306,12 @@ status_t BnCamera::onTransact( reply->writeInt32(autoFocus()); return NO_ERROR; } break; + case CANCEL_AUTO_FOCUS: { + LOGV("CANCEL_AUTO_FOCUS"); + CHECK_INTERFACE(ICamera, data, reply); + reply->writeInt32(cancelAutoFocus()); + return NO_ERROR; + } break; case TAKE_PICTURE: { LOGV("TAKE_PICTURE"); CHECK_INTERFACE(ICamera, data, reply); |