diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2013-04-02 15:45:11 -0700 |
---|---|---|
committer | Eino-Ville Talvala <etalvala@google.com> | 2013-04-17 15:01:08 -0700 |
commit | 3ee3550a2f529cbf56d87d8503f59a8f45dccf32 (patch) | |
tree | 99bf718ddc0429a1319523abaae975d3305face3 /camera | |
parent | d72ec85d1d0b92ed82927e3925f21912a659b799 (diff) | |
download | frameworks_av-3ee3550a2f529cbf56d87d8503f59a8f45dccf32.zip frameworks_av-3ee3550a2f529cbf56d87d8503f59a8f45dccf32.tar.gz frameworks_av-3ee3550a2f529cbf56d87d8503f59a8f45dccf32.tar.bz2 |
Camera: Add preview callback surface support
- Add call to set a preview callback surface
- Implement support for HAL2/3 devices
- Still need HAL1 implementation
Change-Id: I0dc0bd72e43d871aa487858d1665c1efca633ffe
Diffstat (limited to 'camera')
-rw-r--r-- | camera/Camera.cpp | 8 | ||||
-rw-r--r-- | camera/ICamera.cpp | 21 |
2 files changed, 29 insertions, 0 deletions
diff --git a/camera/Camera.cpp b/camera/Camera.cpp index 1b136de..fd78572 100644 --- a/camera/Camera.cpp +++ b/camera/Camera.cpp @@ -255,6 +255,14 @@ void Camera::setPreviewCallbackFlags(int flag) mCamera->setPreviewCallbackFlag(flag); } +status_t Camera::setPreviewCallbackTarget( + const sp<IGraphicBufferProducer>& callbackProducer) +{ + sp <ICamera> c = mCamera; + if (c == 0) return NO_INIT; + return c->setPreviewCallbackTarget(callbackProducer); +} + // callback from camera service void Camera::notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) { diff --git a/camera/ICamera.cpp b/camera/ICamera.cpp index 8900867..732c204 100644 --- a/camera/ICamera.cpp +++ b/camera/ICamera.cpp @@ -31,6 +31,7 @@ enum { DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, SET_PREVIEW_TEXTURE, SET_PREVIEW_CALLBACK_FLAG, + SET_PREVIEW_CALLBACK_TARGET, START_PREVIEW, STOP_PREVIEW, AUTO_FOCUS, @@ -90,6 +91,18 @@ public: remote()->transact(SET_PREVIEW_CALLBACK_FLAG, data, &reply); } + status_t setPreviewCallbackTarget( + const sp<IGraphicBufferProducer>& callbackProducer) + { + ALOGV("setPreviewCallbackTarget"); + Parcel data, reply; + data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); + sp<IBinder> b(callbackProducer->asBinder()); + data.writeStrongBinder(b); + remote()->transact(SET_PREVIEW_CALLBACK_TARGET, data, &reply); + return reply.readInt32(); + } + // start preview mode, must call setPreviewDisplay first status_t startPreview() { @@ -285,6 +298,14 @@ status_t BnCamera::onTransact( setPreviewCallbackFlag(callback_flag); return NO_ERROR; } break; + case SET_PREVIEW_CALLBACK_TARGET: { + ALOGV("SET_PREVIEW_CALLBACK_TARGET"); + CHECK_INTERFACE(ICamera, data, reply); + sp<IGraphicBufferProducer> cp = + interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); + reply->writeInt32(setPreviewCallbackTarget(cp)); + return NO_ERROR; + } case START_PREVIEW: { ALOGV("START_PREVIEW"); CHECK_INTERFACE(ICamera, data, reply); |