From 8136c00c7e05891ec09250f5678d73ea5421be72 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Wed, 1 Dec 2021 17:56:10 -0800 Subject: [PATCH] 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 --- camera/device/3.8/types.hal | 5 +++-- .../VtsHalCameraProviderV2_4TargetTest.cpp | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/camera/device/3.8/types.hal b/camera/device/3.8/types.hal index 6daa0e13b7..843d050bb2 100644 --- a/camera/device/3.8/types.hal +++ b/camera/device/3.8/types.hal @@ -35,8 +35,9 @@ struct ShutterMsg { /** * 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 ff8cd49e26..77974fcbe4 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 @@ void CameraHidlTest::processCaptureRequestInternal(uint64_t bufferUsage, 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); + } } }