Loading camera/device/3.8/types.hal +3 −2 Original line number Diff line number Diff line Loading @@ -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; }; Loading camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp +12 −3 Original line number Diff line number Diff line Loading @@ -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); } } } Loading Loading
camera/device/3.8/types.hal +3 −2 Original line number Diff line number Diff line Loading @@ -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; }; Loading
camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp +12 −3 Original line number Diff line number Diff line Loading @@ -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); } } } Loading