Camera: VTS for test_pattern tag requirement for physical camera am: 5ee43a6d24

Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/16175076

Change-Id: Ica4b42dc02429bc7d1082d9c0ff7bb5078b6e968
This commit is contained in:
Shuzhen Wang
2021-11-04 20:46:50 +00:00
committed by Automerger Merge Worker

View File

@@ -936,6 +936,9 @@ public:
camera_metadata_ro_entry* streamConfigs, camera_metadata_ro_entry* streamConfigs,
camera_metadata_ro_entry* maxResolutionStreamConfigs, camera_metadata_ro_entry* maxResolutionStreamConfigs,
const camera_metadata_t* staticMetadata); const camera_metadata_t* staticMetadata);
void getPrivacyTestPatternModes(
const camera_metadata_t* staticMetadata,
std::unordered_set<int32_t>* privacyTestPatternModes/*out*/);
static bool isColorCamera(const camera_metadata_t *metadata); static bool isColorCamera(const camera_metadata_t *metadata);
static V3_2::DataspaceFlags getDataspace(PixelFormat format); static V3_2::DataspaceFlags getDataspace(PixelFormat format);
@@ -6762,6 +6765,25 @@ void CameraHidlTest::getMultiResolutionStreamConfigurations(
ASSERT_TRUE(-ENOENT == retcode || 0 == retcode); ASSERT_TRUE(-ENOENT == retcode || 0 == retcode);
} }
void CameraHidlTest::getPrivacyTestPatternModes(
const camera_metadata_t* staticMetadata,
std::unordered_set<int32_t>* 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. // Select an appropriate dataspace given a specific pixel format.
V3_2::DataspaceFlags CameraHidlTest::getDataspace(PixelFormat format) { V3_2::DataspaceFlags CameraHidlTest::getDataspace(PixelFormat format) {
switch (format) { switch (format) {
@@ -7816,6 +7838,16 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(
ASSERT_TRUE(isUltraHighResCamera && !isMultiCamera); ASSERT_TRUE(isUltraHighResCamera && !isMultiCamera);
physicalIds.insert(cameraId); physicalIds.insert(cameraId);
} }
std::unordered_set<int32_t> physicalRequestKeyIDs;
rc = getSupportedKeys(const_cast<camera_metadata_t *>(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<int32_t> privacyTestPatternModes;
getPrivacyTestPatternModes(metadata, &privacyTestPatternModes);
// Map from image format to number of multi-resolution sizes for that format // Map from image format to number of multi-resolution sizes for that format
std::unordered_map<int32_t, size_t> multiResOutputFormatCounterMap; std::unordered_map<int32_t, size_t> multiResOutputFormatCounterMap;
std::unordered_map<int32_t, size_t> multiResInputFormatCounterMap; std::unordered_map<int32_t, size_t> multiResInputFormatCounterMap;
@@ -7837,6 +7869,7 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(
camera_metadata_ro_entry physicalStreamConfigs; camera_metadata_ro_entry physicalStreamConfigs;
camera_metadata_ro_entry physicalMaxResolutionStreamConfigs; camera_metadata_ro_entry physicalMaxResolutionStreamConfigs;
bool isUltraHighRes = false; bool isUltraHighRes = false;
std::unordered_set<int32_t> subCameraPrivacyTestPatterns;
if (isPublicId) { if (isPublicId) {
::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> subDevice; ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> subDevice;
Return<void> ret; Return<void> ret;
@@ -7867,6 +7900,8 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(
&physicalMultiResStreamConfigs, &physicalStreamConfigs, &physicalMultiResStreamConfigs, &physicalStreamConfigs,
&physicalMaxResolutionStreamConfigs, staticMetadata); &physicalMaxResolutionStreamConfigs, staticMetadata);
isUltraHighRes = isUltraHighResolution(staticMetadata); isUltraHighRes = isUltraHighResolution(staticMetadata);
getPrivacyTestPatternModes(staticMetadata, &subCameraPrivacyTestPatterns);
}); });
ASSERT_TRUE(ret.isOk()); ASSERT_TRUE(ret.isOk());
} else { } else {
@@ -7893,6 +7928,7 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(
&physicalMultiResStreamConfigs, &physicalStreamConfigs, &physicalMultiResStreamConfigs, &physicalStreamConfigs,
&physicalMaxResolutionStreamConfigs, staticMetadata); &physicalMaxResolutionStreamConfigs, staticMetadata);
isUltraHighRes = isUltraHighResolution(staticMetadata); isUltraHighRes = isUltraHighResolution(staticMetadata);
getPrivacyTestPatternModes(staticMetadata, &subCameraPrivacyTestPatterns);
}); });
ASSERT_TRUE(ret.isOk()); ASSERT_TRUE(ret.isOk());
@@ -7909,6 +7945,10 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(
ASSERT_TRUE(ret.isOk()); ASSERT_TRUE(ret.isOk());
} }
if (hasTestPatternPhysicalRequestKey) {
ASSERT_TRUE(privacyTestPatternModes == subCameraPrivacyTestPatterns);
}
if (physicalMultiResStreamConfigs.count > 0) { if (physicalMultiResStreamConfigs.count > 0) {
ASSERT_GE(deviceVersion, CAMERA_DEVICE_API_VERSION_3_7); ASSERT_GE(deviceVersion, CAMERA_DEVICE_API_VERSION_3_7);
ASSERT_EQ(physicalMultiResStreamConfigs.count % 4, 0); ASSERT_EQ(physicalMultiResStreamConfigs.count % 4, 0);