diff options
| author | 2009-06-24 13:54:09 -0700 | |
|---|---|---|
| committer | 2009-06-24 13:54:09 -0700 | |
| commit | e193f7cd9eded002b5a74b8823be704c020be536 (patch) | |
| tree | 791f958dac5fd75d89cdd4020df37b2bf408cb42 /libs/ui/Camera.cpp | |
| parent | 994c7d1fe2fe0cdf4ad0a888e1b82af5b58b255d (diff) | |
| parent | e1a75447f5ec3e9d41cb2e5d039958680477b2c5 (diff) | |
am 3d7b8d1a: Merge change 5158 into donut
Merge commit '3d7b8d1aa6a362292f56defbe8fb2d5653f79282'
* commit '3d7b8d1aa6a362292f56defbe8fb2d5653f79282':
Use a ref-counted callback interface for Camera.
Diffstat (limited to 'libs/ui/Camera.cpp')
| -rw-r--r-- | libs/ui/Camera.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp index 4228300067..d5eba186d4 100644 --- a/libs/ui/Camera.cpp +++ b/libs/ui/Camera.cpp @@ -337,9 +337,32 @@ void Camera::setErrorCallback(error_callback cb, void *cookie) mErrorCallbackCookie = cookie; } +void Camera::setListener(const sp<CameraListener>& listener) +{ + Mutex::Autolock _l(mLock); + mListener = listener; +} + +void Camera::setPreviewCallbackFlags(int flag) +{ + LOGV("setPreviewCallbackFlags"); + sp <ICamera> c = mCamera; + if (c == 0) return; + mCamera->setPreviewCallbackFlag(flag); +} + // callback from camera service void Camera::notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) { + sp<CameraListener> listener; + { + Mutex::Autolock _l(mLock); + listener = mListener; + } + if (listener != NULL) { + listener->notify(msgType, ext1, ext2); + } + switch(msgType) { case CAMERA_MSG_ERROR: LOGV("errorCallback"); @@ -368,6 +391,15 @@ void Camera::notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) // callback from camera service when frame or image is ready void Camera::dataCallback(int32_t msgType, const sp<IMemory>& dataPtr) { + sp<CameraListener> listener; + { + Mutex::Autolock _l(mLock); + listener = mListener; + } + if (listener != NULL) { + listener->postData(msgType, dataPtr); + } + switch(msgType) { case CAMERA_MSG_PREVIEW_FRAME: LOGV("previewCallback"); @@ -401,6 +433,7 @@ void Camera::dataCallback(int32_t msgType, const sp<IMemory>& dataPtr) void Camera::binderDied(const wp<IBinder>& who) { LOGW("ICamera died"); + notifyCallback(CAMERA_MSG_ERROR, DEAD_OBJECT, 0); if (mErrorCallback) { mErrorCallback(DEAD_OBJECT, mErrorCallbackCookie); } |