From 38311859e809118f2cba3597d056abffe4eb80c0 Mon Sep 17 00:00:00 2001 From: James Dong Date: Mon, 18 Oct 2010 20:42:51 -0700 Subject: Camera framework change required for 0-memcpy recording bug - 3042125 Change-Id: I46eb7a10b5394086b353fd73e4503beceeed76f1 --- libs/camera/Camera.cpp | 25 +++++++++++++++++++++++ libs/camera/ICamera.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) (limited to 'libs') diff --git a/libs/camera/Camera.cpp b/libs/camera/Camera.cpp index b5f78e8..148e864 100644 --- a/libs/camera/Camera.cpp +++ b/libs/camera/Camera.cpp @@ -190,6 +190,31 @@ status_t Camera::startPreview() return c->startPreview(); } +int32_t Camera::getNumberOfVideoBuffers() const +{ + LOGV("getNumberOfVideoBuffers"); + sp c = mCamera; + if (c == 0) return 0; + return c->getNumberOfVideoBuffers(); +} + +sp Camera::getVideoBuffer(int32_t index) const +{ + LOGV("getVideoBuffer: %d", index); + sp c = mCamera; + if (c == 0) return 0; + return c->getVideoBuffer(index); +} + +status_t Camera::storeMetaDataInBuffers(bool enabled) +{ + LOGV("storeMetaDataInBuffers: %s", + enabled? "true": "false"); + sp c = mCamera; + if (c == 0) return NO_INIT; + return c->storeMetaDataInBuffers(enabled); +} + // start recording mode, must call setPreviewDisplay first status_t Camera::startRecording() { diff --git a/libs/camera/ICamera.cpp b/libs/camera/ICamera.cpp index 94dc5c1..7ba8d12 100644 --- a/libs/camera/ICamera.cpp +++ b/libs/camera/ICamera.cpp @@ -45,6 +45,9 @@ enum { STOP_RECORDING, RECORDING_ENABLED, RELEASE_RECORDING_FRAME, + GET_NUM_VIDEO_BUFFERS, + GET_VIDEO_BUFFER, + STORE_META_DATA_IN_BUFFERS, }; class BpCamera: public BpInterface @@ -133,6 +136,37 @@ public: remote()->transact(RELEASE_RECORDING_FRAME, data, &reply); } + int32_t getNumberOfVideoBuffers() const + { + LOGV("getNumberOfVideoBuffers"); + Parcel data, reply; + data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); + remote()->transact(GET_NUM_VIDEO_BUFFERS, data, &reply); + return reply.readInt32(); + } + + sp getVideoBuffer(int32_t index) const + { + LOGV("getVideoBuffer: %d", index); + Parcel data, reply; + data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); + data.writeInt32(index); + remote()->transact(GET_VIDEO_BUFFER, data, &reply); + sp mem = interface_cast( + reply.readStrongBinder()); + return mem; + } + + status_t storeMetaDataInBuffers(bool enabled) + { + LOGV("storeMetaDataInBuffers: %s", enabled? "true": "false"); + Parcel data, reply; + data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); + data.writeInt32(enabled); + remote()->transact(STORE_META_DATA_IN_BUFFERS, data, &reply); + return reply.readInt32(); + } + // check preview state bool previewEnabled() { @@ -300,6 +334,26 @@ status_t BnCamera::onTransact( releaseRecordingFrame(mem); return NO_ERROR; } break; + case GET_NUM_VIDEO_BUFFERS: { + LOGV("GET_NUM_VIDEO_BUFFERS"); + CHECK_INTERFACE(ICamera, data, reply); + reply->writeInt32(getNumberOfVideoBuffers()); + return NO_ERROR; + } break; + case GET_VIDEO_BUFFER: { + LOGV("GET_VIDEO_BUFFER"); + CHECK_INTERFACE(ICamera, data, reply); + int32_t index = data.readInt32(); + reply->writeStrongBinder(getVideoBuffer(index)->asBinder()); + return NO_ERROR; + } break; + case STORE_META_DATA_IN_BUFFERS: { + LOGV("STORE_META_DATA_IN_BUFFERS"); + CHECK_INTERFACE(ICamera, data, reply); + bool enabled = data.readInt32(); + reply->writeInt32(storeMetaDataInBuffers(enabled)); + return NO_ERROR; + } break; case PREVIEW_ENABLED: { LOGV("PREVIEW_ENABLED"); CHECK_INTERFACE(ICamera, data, reply); -- cgit v1.1