Add FMQ support to camera2 SDK for metadata transfer
This CL adds support for CaptureResult metadata to be transferred over
FMQ instead of binder copies.
Bug: 362791857
Flag: com.android.internal.camera.flags.fmq_metadata
Test: GCA
Test: Perfetto profiling shows decreased cameraserver to client
onResultReceived latency
Change-Id: Ia8df1a4cef5008c06dc2ca4fdd319704d5e049ab
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/camera/CaptureResult.cpp b/camera/CaptureResult.cpp
index 9ff2578..254984f 100644
--- a/camera/CaptureResult.cpp
+++ b/camera/CaptureResult.cpp
@@ -98,7 +98,6 @@
status_t res;
mPhysicalCameraId = "";
- mPhysicalCameraMetadata.clear();
String16 physicalCameraId;
if ((res = parcel->readString16(&physicalCameraId)) != OK) {
@@ -107,10 +106,11 @@
}
mPhysicalCameraId = toStdString(physicalCameraId);
- if ((res = mPhysicalCameraMetadata.readFromParcel(parcel)) != OK) {
+ if ((res = mCameraMetadataInfo.readFromParcel(parcel)) != OK) {
ALOGE("%s: Failed to read metadata from parcel: %d", __FUNCTION__, res);
return res;
}
+
return OK;
}
@@ -121,11 +121,13 @@
__FUNCTION__, res);
return res;
}
- if ((res = mPhysicalCameraMetadata.writeToParcel(parcel)) != OK) {
+
+ if ((res = mCameraMetadataInfo.writeToParcel(parcel)) != OK) {
ALOGE("%s: Failed to write physical camera metadata to parcel: %d",
__FUNCTION__, res);
return res;
}
+
return OK;
}
@@ -178,20 +180,12 @@
}
for (int32_t i = 0; i < physicalMetadataCount; i++) {
- String16 cameraId;
- if ((res = parcel->readString16(&cameraId)) != OK) {
- ALOGE("%s: Failed to read camera id: %d", __FUNCTION__, res);
+ PhysicalCaptureResultInfo result;
+ if ((res = result.readFromParcel(parcel)) != OK) {
+ ALOGE("%s: Failed to read physical result from parcel: %d", __FUNCTION__, res);
return res;
}
-
- CameraMetadata physicalMetadata;
- if ((res = physicalMetadata.readFromParcel(parcel)) != OK) {
- ALOGE("%s: Failed to read metadata from parcel: %d", __FUNCTION__, res);
- return res;
- }
-
- mPhysicalMetadatas.emplace(mPhysicalMetadatas.end(), toStdString(cameraId),
- physicalMetadata);
+ mPhysicalMetadatas.emplace(mPhysicalMetadatas.end(), result);
}
ALOGV("%s: Read physical metadata from parcel", __FUNCTION__);
@@ -232,13 +226,8 @@
return BAD_VALUE;
}
for (const auto& physicalMetadata : mPhysicalMetadatas) {
- if ((res = parcel->writeString16(toString16(physicalMetadata.mPhysicalCameraId))) != OK) {
- ALOGE("%s: Failed to write physical camera ID to parcel: %d",
- __FUNCTION__, res);
- return res;
- }
- if ((res = physicalMetadata.mPhysicalCameraMetadata.writeToParcel(parcel)) != OK) {
- ALOGE("%s: Failed to write physical camera metadata to parcel: %d",
+ if ((res = physicalMetadata.writeToParcel(parcel)) != OK) {
+ ALOGE("%s: Failed to write physicalMetadata to parcel: %d",
__FUNCTION__, res);
return res;
}