Set additional metadata for virtual camera
- focal length
- sensor physical size
- sensor pixel array size
Bug: 322965201
Test: atest virtual_camera_tests
Change-Id: I11d84a4473bd944529e65e090547c3de31369dba
diff --git a/services/camera/virtualcamera/VirtualCameraDevice.cc b/services/camera/virtualcamera/VirtualCameraDevice.cc
index a244c0f..ff53be5 100644
--- a/services/camera/virtualcamera/VirtualCameraDevice.cc
+++ b/services/camera/virtualcamera/VirtualCameraDevice.cc
@@ -151,9 +151,11 @@
.setFlashAvailable(false)
.setLensFacing(
static_cast<camera_metadata_enum_android_lens_facing>(lensFacing))
+ .setFocalLength(43.0)
.setSensorOrientation(static_cast<int32_t>(sensorOrientation))
.setSensorReadoutTimestamp(
ANDROID_SENSOR_READOUT_TIMESTAMP_NOT_SUPPORTED)
+ .setSensorPhysicalSize(36.0, 24.0)
.setAvailableFaceDetectModes({ANDROID_STATISTICS_FACE_DETECT_MODE_OFF})
.setAvailableMaxDigitalZoom(1.0)
.setControlAvailableModes({ANDROID_CONTROL_MODE_AUTO})
@@ -188,6 +190,7 @@
}
builder.setSensorActiveArraySize(0, 0, maxResolution->width,
maxResolution->height);
+ builder.setSensorPixelArraySize(maxResolution->width, maxResolution->height);
std::vector<MetadataBuilder::StreamConfiguration> outputConfigurations;
diff --git a/services/camera/virtualcamera/util/MetadataBuilder.cc b/services/camera/virtualcamera/util/MetadataBuilder.cc
index c2daa3b..4c811b2 100644
--- a/services/camera/virtualcamera/util/MetadataBuilder.cc
+++ b/services/camera/virtualcamera/util/MetadataBuilder.cc
@@ -82,6 +82,13 @@
return *this;
}
+MetadataBuilder& MetadataBuilder::setFocalLength(float focalLength) {
+ std::vector<float> focalLengths({focalLength});
+ mEntryMap[ANDROID_LENS_FOCAL_LENGTH] = focalLengths;
+ mEntryMap[ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS] = focalLengths;
+ return *this;
+}
+
MetadataBuilder& MetadataBuilder::setSensorOrientation(int32_t sensorOrientation) {
mEntryMap[ANDROID_SENSOR_ORIENTATION] =
std::vector<int32_t>({sensorOrientation});
@@ -310,6 +317,20 @@
return *this;
}
+MetadataBuilder& MetadataBuilder::setSensorPixelArraySize(int width,
+ int height) {
+ mEntryMap[ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE] =
+ std::vector<int32_t>({width, height});
+ return *this;
+}
+
+MetadataBuilder& MetadataBuilder::setSensorPhysicalSize(float width,
+ float height) {
+ mEntryMap[ANDROID_SENSOR_INFO_PHYSICAL_SIZE] =
+ std::vector<float>({width, height});
+ return *this;
+}
+
MetadataBuilder& MetadataBuilder::setControlAeCompensationRange(int32_t min,
int32_t max) {
mEntryMap[ANDROID_CONTROL_AE_COMPENSATION_RANGE] =
diff --git a/services/camera/virtualcamera/util/MetadataBuilder.h b/services/camera/virtualcamera/util/MetadataBuilder.h
index fc4d51a..82510c1 100644
--- a/services/camera/virtualcamera/util/MetadataBuilder.h
+++ b/services/camera/virtualcamera/util/MetadataBuilder.h
@@ -78,6 +78,10 @@
camera_metadata_enum_android_sensor_readout_timestamp_t
sensorReadoutTimestamp);
+ // See ANDROID_LENS_FOCAL_LENGTH and ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS
+ // in CameraMetadataTag.aidl.
+ MetadataBuilder& setFocalLength(float focalLength);
+
// See ANDROID_SENSOR_ORIENTATION in CameraMetadataTag.aidl.
MetadataBuilder& setSensorOrientation(int32_t sensorOrientation);
@@ -90,6 +94,12 @@
// See ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE in CameraMetadataTag.aidl.
MetadataBuilder& setSensorActiveArraySize(int x0, int y0, int x1, int y1);
+ // See ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE in CameraMetadataTag.aidl.
+ MetadataBuilder& setSensorPixelArraySize(int width, int height);
+
+ // See ANDROID_SENSOR_INFO_PHYSICAL_SIZE in CameraMetadataTag.aidl.
+ MetadataBuilder& setSensorPhysicalSize(float width, float height);
+
// See ANDROID_STATISTICS_FACE_DETECT_MODE in CameraMetadataTag.aidl.
MetadataBuilder& setAvailableFaceDetectModes(
const std::vector<camera_metadata_enum_android_statistics_face_detect_mode_t>&