diff options
author | Dave Sparks <davidsparks@android.com> | 2009-05-07 19:27:32 -0700 |
---|---|---|
committer | Dave Sparks <davidsparks@android.com> | 2009-05-11 07:36:58 -0700 |
commit | d6289b1b03d209219c2dd3126ee8839a45682b33 (patch) | |
tree | 1c7d73bff30577aaf680aea9f72df5a219a1ca2d /libs | |
parent | b4735b6c04c6bca3219115395748a1b5ef02ff6c (diff) | |
download | frameworks_base-d6289b1b03d209219c2dd3126ee8839a45682b33.zip frameworks_base-d6289b1b03d209219c2dd3126ee8839a45682b33.tar.gz frameworks_base-d6289b1b03d209219c2dd3126ee8839a45682b33.tar.bz2 |
Modify camera framework to use new streamlined binder interface.
This is the second half of bug 1837832. Modifies the camera client
and camera service to use the new binder interface. Removes the
old binder interface. There will be one more part to this change
to surface the undefined callbacks to the Java layer so that
partners can implement new features without having to touch the
stack.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ui/Camera.cpp | 118 | ||||
-rw-r--r-- | libs/ui/ICameraClient.cpp | 126 |
2 files changed, 55 insertions, 189 deletions
diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp index ed4f3b8..6613700 100644 --- a/libs/ui/Camera.cpp +++ b/libs/ui/Camera.cpp @@ -337,76 +337,66 @@ void Camera::setErrorCallback(error_callback cb, void *cookie) mErrorCallbackCookie = cookie; } -void Camera::autoFocusCallback(bool focused) -{ - LOGV("autoFocusCallback"); - if (mAutoFocusCallback) { - mAutoFocusCallback(focused, mAutoFocusCallbackCookie); - } -} - -void Camera::shutterCallback() -{ - LOGV("shutterCallback"); - if (mShutterCallback) { - mShutterCallback(mShutterCallbackCookie); - } -} - -void Camera::rawCallback(const sp<IMemory>& picture) -{ - LOGV("rawCallback"); - if (mRawCallback) { - mRawCallback(picture, mRawCallbackCookie); - } -} - -// callback from camera service when image is ready -void Camera::jpegCallback(const sp<IMemory>& picture) -{ - LOGV("jpegCallback"); - if (mJpegCallback) { - mJpegCallback(picture, mJpegCallbackCookie); - } -} - -// callback from camera service when preview frame is ready -void Camera::previewCallback(const sp<IMemory>& frame) -{ - LOGV("frameCallback"); - if (mPreviewCallback) { - mPreviewCallback(frame, mPreviewCallbackCookie); - } -} - -// callback from camera service when a recording frame is ready -void Camera::recordingCallback(const sp<IMemory>& frame) -{ - LOGV("recordingCallback"); - if (mRecordingCallback) { - mRecordingCallback(frame, mRecordingCallbackCookie); - } -} - -// callback from camera service when an error occurs in preview or takePicture -void Camera::errorCallback(status_t error) -{ - LOGV("errorCallback"); - if (mErrorCallback) { - mErrorCallback(error, mErrorCallbackCookie); - } -} - // callback from camera service void Camera::notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) { - LOGV("notifyCallback"); + switch(msgType) { + case CAMERA_MSG_ERROR: + LOGV("errorCallback"); + if (mErrorCallback) { + mErrorCallback((status_t)ext1, mErrorCallbackCookie); + } + break; + case CAMERA_MSG_FOCUS: + LOGV("autoFocusCallback"); + if (mAutoFocusCallback) { + mAutoFocusCallback((bool)ext1, mAutoFocusCallbackCookie); + } + break; + case CAMERA_MSG_SHUTTER: + LOGV("shutterCallback"); + if (mShutterCallback) { + mShutterCallback(mShutterCallbackCookie); + } + break; + default: + LOGV("notifyCallback(%d, %d, %d)", msgType, ext1, ext2); + break; + } } -// callback from camera service when image is ready -void Camera::dataCallback(int32_t msgType, const sp<IMemory>& frame) +// callback from camera service when frame or image is ready +void Camera::dataCallback(int32_t msgType, const sp<IMemory>& dataPtr) { - LOGV("dataCallback"); + switch(msgType) { + case CAMERA_MSG_PREVIEW_FRAME: + LOGV("previewCallback"); + if (mPreviewCallback) { + mPreviewCallback(dataPtr, mPreviewCallbackCookie); + } + break; + case CAMERA_MSG_VIDEO_FRAME: + LOGV("recordingCallback"); + if (mRecordingCallback) { + mRecordingCallback(dataPtr, mRecordingCallbackCookie); + } + break; + case CAMERA_MSG_RAW_IMAGE: + LOGV("rawCallback"); + if (mRawCallback) { + mRawCallback(dataPtr, mRawCallbackCookie); + } + break; + case CAMERA_MSG_COMPRESSED_IMAGE: + LOGV("jpegCallback"); + if (mJpegCallback) { + mJpegCallback(dataPtr, mJpegCallbackCookie); + } + break; + default: + LOGV("dataCallback(%d, %p)", msgType, dataPtr.get()); + break; + } } void Camera::binderDied(const wp<IBinder>& who) { diff --git a/libs/ui/ICameraClient.cpp b/libs/ui/ICameraClient.cpp index ae07b67..c6cf75c 100644 --- a/libs/ui/ICameraClient.cpp +++ b/libs/ui/ICameraClient.cpp @@ -25,14 +25,7 @@ namespace android { enum { - SHUTTER_CALLBACK = IBinder::FIRST_CALL_TRANSACTION, - RAW_CALLBACK, - JPEG_CALLBACK, - PREVIEW_CALLBACK, - ERROR_CALLBACK, - AUTOFOCUS_CALLBACK, - RECORDING_CALLBACK, - NOTIFY_CALLBACK, + NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION, DATA_CALLBACK, }; @@ -44,75 +37,6 @@ public: { } - // callback to let the app know the shutter has closed, ideal for playing the shutter sound - void shutterCallback() - { - LOGV("shutterCallback"); - Parcel data, reply; - data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); - remote()->transact(SHUTTER_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); - } - - // callback from camera service to app with picture data - void rawCallback(const sp<IMemory>& picture) - { - LOGV("rawCallback"); - Parcel data, reply; - data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); - data.writeStrongBinder(picture->asBinder()); - remote()->transact(RAW_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); - } - - // callback from camera service to app with picture data - void jpegCallback(const sp<IMemory>& picture) - { - LOGV("jpegCallback"); - Parcel data, reply; - data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); - data.writeStrongBinder(picture->asBinder()); - remote()->transact(JPEG_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); - } - - // callback from camera service to app with preview frame data - void previewCallback(const sp<IMemory>& frame) - { - LOGV("previewCallback"); - Parcel data, reply; - data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); - data.writeStrongBinder(frame->asBinder()); - remote()->transact(PREVIEW_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); - } - - // callback from camera service to app with recording frame data - void recordingCallback(const sp<IMemory>& frame) - { - LOGV("recordingCallback"); - Parcel data, reply; - data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); - data.writeStrongBinder(frame->asBinder()); - remote()->transact(RECORDING_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); - } - - // callback from camera service to app to report error - void errorCallback(status_t error) - { - LOGV("errorCallback"); - Parcel data, reply; - data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); - data.writeInt32(error); - remote()->transact(ERROR_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); - } - - // callback from camera service to app to report autofocus completion - void autoFocusCallback(bool focused) - { - LOGV("autoFocusCallback"); - Parcel data, reply; - data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); - data.writeInt32(focused); - remote()->transact(AUTOFOCUS_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); - } - // generic callback from camera service to app void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) { @@ -152,54 +76,6 @@ status_t BnCameraClient::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch(code) { - case SHUTTER_CALLBACK: { - LOGV("SHUTTER_CALLBACK"); - CHECK_INTERFACE(ICameraClient, data, reply); - shutterCallback(); - return NO_ERROR; - } break; - case RAW_CALLBACK: { - LOGV("RAW_CALLBACK"); - CHECK_INTERFACE(ICameraClient, data, reply); - sp<IMemory> picture = interface_cast<IMemory>(data.readStrongBinder()); - rawCallback(picture); - return NO_ERROR; - } break; - case JPEG_CALLBACK: { - LOGV("JPEG_CALLBACK"); - CHECK_INTERFACE(ICameraClient, data, reply); - sp<IMemory> picture = interface_cast<IMemory>(data.readStrongBinder()); - jpegCallback(picture); - return NO_ERROR; - } break; - case PREVIEW_CALLBACK: { - LOGV("PREVIEW_CALLBACK"); - CHECK_INTERFACE(ICameraClient, data, reply); - sp<IMemory> frame = interface_cast<IMemory>(data.readStrongBinder()); - previewCallback(frame); - return NO_ERROR; - } break; - case RECORDING_CALLBACK: { - LOGV("RECORDING_CALLBACK"); - CHECK_INTERFACE(ICameraClient, data, reply); - sp<IMemory> frame = interface_cast<IMemory>(data.readStrongBinder()); - recordingCallback(frame); - return NO_ERROR; - } break; - case ERROR_CALLBACK: { - LOGV("ERROR_CALLBACK"); - CHECK_INTERFACE(ICameraClient, data, reply); - status_t error = data.readInt32(); - errorCallback(error); - return NO_ERROR; - } break; - case AUTOFOCUS_CALLBACK: { - LOGV("AUTOFOCUS_CALLBACK"); - CHECK_INTERFACE(ICameraClient, data, reply); - bool focused = (bool)data.readInt32(); - autoFocusCallback(focused); - return NO_ERROR; - } break; case NOTIFY_CALLBACK: { LOGV("NOTIFY_CALLBACK"); CHECK_INTERFACE(ICameraClient, data, reply); |