From 5ee43a6d246304b53cbf131b9be12907398a4263 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Thu, 28 Oct 2021 23:39:27 -0700 Subject: [PATCH] Camera: VTS for test_pattern tag requirement for physical camera Ensure that if TEST_PATTERN_MODE is listed in physical request keys, the corresponding physical camera must support the privacy related test pattern modes. Test: Run Camera VTS with Cuttlefish emulator Bug: 204108650 Change-Id: I8f378ab642c7c010a2ba73a8e89e65c91ba780eb --- .../VtsHalCameraProviderV2_4TargetTest.cpp | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp index 62de3afec3..d02547c81e 100644 --- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp +++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp @@ -936,6 +936,9 @@ public: camera_metadata_ro_entry* streamConfigs, camera_metadata_ro_entry* maxResolutionStreamConfigs, const camera_metadata_t* staticMetadata); + void getPrivacyTestPatternModes( + const camera_metadata_t* staticMetadata, + std::unordered_set* privacyTestPatternModes/*out*/); static bool isColorCamera(const camera_metadata_t *metadata); static V3_2::DataspaceFlags getDataspace(PixelFormat format); @@ -6762,6 +6765,25 @@ void CameraHidlTest::getMultiResolutionStreamConfigurations( ASSERT_TRUE(-ENOENT == retcode || 0 == retcode); } +void CameraHidlTest::getPrivacyTestPatternModes( + const camera_metadata_t* staticMetadata, + std::unordered_set* privacyTestPatternModes/*out*/) { + ASSERT_NE(staticMetadata, nullptr); + ASSERT_NE(privacyTestPatternModes, nullptr); + + camera_metadata_ro_entry entry; + int retcode = find_camera_metadata_ro_entry( + staticMetadata, ANDROID_SENSOR_AVAILABLE_TEST_PATTERN_MODES, &entry); + ASSERT_TRUE(0 == retcode); + + for (auto i = 0; i < entry.count; i++) { + if (entry.data.i32[i] == ANDROID_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR || + entry.data.i32[i] == ANDROID_SENSOR_TEST_PATTERN_MODE_BLACK) { + privacyTestPatternModes->insert(entry.data.i32[i]); + } + } +} + // Select an appropriate dataspace given a specific pixel format. V3_2::DataspaceFlags CameraHidlTest::getDataspace(PixelFormat format) { switch (format) { @@ -7816,6 +7838,16 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata( ASSERT_TRUE(isUltraHighResCamera && !isMultiCamera); physicalIds.insert(cameraId); } + + std::unordered_set physicalRequestKeyIDs; + rc = getSupportedKeys(const_cast(metadata), + ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS, &physicalRequestKeyIDs); + ASSERT_TRUE(Status::OK == rc); + bool hasTestPatternPhysicalRequestKey = physicalRequestKeyIDs.find( + ANDROID_SENSOR_TEST_PATTERN_MODE) != physicalRequestKeyIDs.end(); + std::unordered_set privacyTestPatternModes; + getPrivacyTestPatternModes(metadata, &privacyTestPatternModes); + // Map from image format to number of multi-resolution sizes for that format std::unordered_map multiResOutputFormatCounterMap; std::unordered_map multiResInputFormatCounterMap; @@ -7837,6 +7869,7 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata( camera_metadata_ro_entry physicalStreamConfigs; camera_metadata_ro_entry physicalMaxResolutionStreamConfigs; bool isUltraHighRes = false; + std::unordered_set subCameraPrivacyTestPatterns; if (isPublicId) { ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> subDevice; Return ret; @@ -7867,6 +7900,8 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata( &physicalMultiResStreamConfigs, &physicalStreamConfigs, &physicalMaxResolutionStreamConfigs, staticMetadata); isUltraHighRes = isUltraHighResolution(staticMetadata); + + getPrivacyTestPatternModes(staticMetadata, &subCameraPrivacyTestPatterns); }); ASSERT_TRUE(ret.isOk()); } else { @@ -7893,6 +7928,7 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata( &physicalMultiResStreamConfigs, &physicalStreamConfigs, &physicalMaxResolutionStreamConfigs, staticMetadata); isUltraHighRes = isUltraHighResolution(staticMetadata); + getPrivacyTestPatternModes(staticMetadata, &subCameraPrivacyTestPatterns); }); ASSERT_TRUE(ret.isOk()); @@ -7909,6 +7945,10 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata( ASSERT_TRUE(ret.isOk()); } + if (hasTestPatternPhysicalRequestKey) { + ASSERT_TRUE(privacyTestPatternModes == subCameraPrivacyTestPatterns); + } + if (physicalMultiResStreamConfigs.count > 0) { ASSERT_GE(deviceVersion, CAMERA_DEVICE_API_VERSION_3_7); ASSERT_EQ(physicalMultiResStreamConfigs.count % 4, 0);