Camera framework change required for 0-memcpy recording
bug - 3042125
Change-Id: I46eb7a10b5394086b353fd73e4503beceeed76f1
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 @@
STOP_RECORDING,
RECORDING_ENABLED,
RELEASE_RECORDING_FRAME,
+ GET_NUM_VIDEO_BUFFERS,
+ GET_VIDEO_BUFFER,
+ STORE_META_DATA_IN_BUFFERS,
};
class BpCamera: public BpInterface<ICamera>
@@ -133,6 +136,37 @@
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<IMemory> 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<IMemory> mem = interface_cast<IMemory>(
+ 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 @@
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);