Camera: Update readoutTimeout requirement
Due to sensor crop, readoutTimeout - startOfExposure may be larger than
exposureTime. Update the VTS test to reflect the spec change.
Test: processCaptureRequestPreview
Bug: 208270993
Change-Id: I51a373ecbc5c7c086f84c5479a43dffbe8fcc0c2
diff --git a/camera/device/3.8/types.hal b/camera/device/3.8/types.hal
index 6daa0e1..843d050 100644
--- a/camera/device/3.8/types.hal
+++ b/camera/device/3.8/types.hal
@@ -35,8 +35,9 @@
/**
* Timestamp for the capture readout. This must be in the same time domain
- * as v3_2.timestamp, and the value must be v3_2.timestamp + exposureTime
- * for a rolling shutter sensor.
+ * as v3_2.timestamp, and for a rolling shutter sensor, the value must be
+ * v3_2.timestamp + exposureTime + t_crop_top where t_crop_top is the exposure time
+ * skew of the cropped lines on the top.
*/
uint64_t readoutTimestamp;
};
diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
index ff8cd49..77974fc 100644
--- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
+++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
@@ -4796,15 +4796,24 @@
ASSERT_EQ(testStream.id, inflightReq.resultOutputBuffers[0].streamId);
// For camera device 3.8 or newer, shutterReadoutTimestamp must be
- // available, and it must be shutterTimestamp + exposureTime.
+ // available, and it must be >= shutterTimestamp + exposureTime, and
+ // < shutterTimestamp + exposureTime + rollingShutterSkew / 2.
if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_8) {
ASSERT_TRUE(inflightReq.shutterReadoutTimestampValid);
ASSERT_FALSE(inflightReq.collectedResult.isEmpty());
if (inflightReq.collectedResult.exists(ANDROID_SENSOR_EXPOSURE_TIME)) {
camera_metadata_entry_t exposureTimeResult = inflightReq.collectedResult.find(
ANDROID_SENSOR_EXPOSURE_TIME);
- ASSERT_EQ(inflightReq.shutterReadoutTimestamp - inflightReq.shutterTimestamp,
- exposureTimeResult.data.i64[0]);
+ nsecs_t exposureToReadout =
+ inflightReq.shutterReadoutTimestamp - inflightReq.shutterTimestamp;
+ ASSERT_GE(exposureToReadout, exposureTimeResult.data.i64[0]);
+ if (inflightReq.collectedResult.exists(ANDROID_SENSOR_ROLLING_SHUTTER_SKEW)) {
+ camera_metadata_entry_t rollingShutterSkew =
+ inflightReq.collectedResult.find(
+ ANDROID_SENSOR_ROLLING_SHUTTER_SKEW);
+ ASSERT_LT(exposureToReadout, exposureTimeResult.data.i64[0] +
+ rollingShutterSkew.data.i64[0] / 2);
+ }
}
}