From d08a0152399cb1a17b2e082c8a35daa604d10bb8 Mon Sep 17 00:00:00 2001 From: Rucha Katakwar Date: Fri, 13 Oct 2023 15:47:58 -0700 Subject: [PATCH] Camera: Vts test for manual flash control. Test to verify configurations for manual flash strength level control feature. Test: Tested on an emulator with flag enabled/disabled. Bug: 238348881 Change-Id: Iba492fe626c2fb74aa2107cec3969a04ea52eac0 --- camera/provider/aidl/vts/Android.bp | 2 + .../VtsAidlHalCameraProvider_TargetTest.cpp | 25 +++++++++ camera/provider/aidl/vts/camera_aidl_test.cpp | 52 +++++++++++++++++++ camera/provider/aidl/vts/camera_aidl_test.h | 3 ++ 4 files changed, 82 insertions(+) diff --git a/camera/provider/aidl/vts/Android.bp b/camera/provider/aidl/vts/Android.bp index 59f6c66051..cfcaec50ec 100644 --- a/camera/provider/aidl/vts/Android.bp +++ b/camera/provider/aidl/vts/Android.bp @@ -53,6 +53,7 @@ cc_test { "android.hardware.graphics.mapper@2.0", "android.hardware.graphics.mapper@3.0", "android.hardware.graphics.mapper@4.0", + "camera_platform_flags_c_lib", ], // Statically link to libs not guaranteed to be present on the device. @@ -67,6 +68,7 @@ cc_test { "libhidlmemory", "libgralloctypes", "libaidlcommonsupport", + "libgtest", ], require_root: true, diff --git a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp index b6b5206e7f..def6233fc0 100644 --- a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp +++ b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include #include #include @@ -29,6 +30,7 @@ #include #include #include +#include #include using ::aidl::android::hardware::camera::common::CameraDeviceStatus; @@ -50,6 +52,7 @@ const uint32_t kMaxStillWidth = 2048; const uint32_t kMaxStillHeight = 1536; const int64_t kEmptyFlushTimeoutMSec = 200; +namespace flags = com::android::internal::camera::flags; const static std::vector kMandatoryUseCases = { ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, @@ -159,6 +162,28 @@ TEST_P(CameraAidlTest, getResourceCost) { } } +// Validate the integrity of manual flash strength control metadata +TEST_P(CameraAidlTest, validateManualFlashStrengthControlKeys) { + if (flags::camera_manual_flash_strength_control()) { + std::vector cameraDeviceNames = getCameraDeviceNames(mProvider); + for (const auto& name : cameraDeviceNames) { + ALOGI("validateManualFlashStrengthControlKeys: Testing camera device %s", name.c_str()); + CameraMetadata meta; + std::shared_ptr cameraDevice; + openEmptyDeviceSession(name, mProvider, &mSession /*out*/, &meta /*out*/, + &cameraDevice /*out*/); + ndk::ScopedAStatus ret = cameraDevice->getCameraCharacteristics(&meta); + ASSERT_TRUE(ret.isOk()); + const camera_metadata_t* staticMeta = + reinterpret_cast(meta.metadata.data()); + verifyManualFlashStrengthControlCharacteristics(staticMeta); + } + } else { + ALOGI("validateManualFlashStrengthControlKeys: Test skipped.\n"); + GTEST_SKIP(); + } +} + TEST_P(CameraAidlTest, systemCameraTest) { std::vector cameraDeviceNames = getCameraDeviceNames(mProvider); std::map> hiddenPhysicalIdToLogicalMap; diff --git a/camera/provider/aidl/vts/camera_aidl_test.cpp b/camera/provider/aidl/vts/camera_aidl_test.cpp index 6a17453118..e5bf637df4 100644 --- a/camera/provider/aidl/vts/camera_aidl_test.cpp +++ b/camera/provider/aidl/vts/camera_aidl_test.cpp @@ -1152,6 +1152,58 @@ void CameraAidlTest::verifyMonochromeCharacteristics(const CameraMetadata& chars } } +void CameraAidlTest::verifyManualFlashStrengthControlCharacteristics( + const camera_metadata_t* staticMeta) { + camera_metadata_ro_entry singleMaxEntry; + camera_metadata_ro_entry singleDefEntry; + camera_metadata_ro_entry torchMaxEntry; + camera_metadata_ro_entry torchDefEntry; + bool torch_supported = false; + int32_t singleMaxLevel = 0; + int32_t singleDefLevel = 0; + int32_t torchMaxLevel = 0; + int32_t torchDefLevel = 0; + + // determine whether the device supports torch or not + torch_supported = isTorchSupported(staticMeta); + + int singleMaxRetCode = find_camera_metadata_ro_entry(staticMeta, + ANDROID_FLASH_SINGLE_STRENGTH_MAX_LEVEL, &singleMaxEntry); + int singleDefRetCode = find_camera_metadata_ro_entry(staticMeta, + ANDROID_FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL, &singleDefEntry); + int torchMaxRetCode = find_camera_metadata_ro_entry(staticMeta, + ANDROID_FLASH_TORCH_STRENGTH_MAX_LEVEL, &torchMaxEntry); + int torchDefRetCode = find_camera_metadata_ro_entry(staticMeta, + ANDROID_FLASH_TORCH_STRENGTH_DEFAULT_LEVEL, &torchDefEntry); + if (torch_supported) { + if(singleMaxRetCode == 0 && singleDefRetCode == 0 && torchMaxRetCode == 0 && + torchDefRetCode == 0) { + singleMaxLevel = *singleMaxEntry.data.i32; + singleDefLevel = *singleDefEntry.data.i32; + torchMaxLevel = *torchMaxEntry.data.i32; + torchDefLevel = *torchDefEntry.data.i32; + ASSERT_TRUE((singleMaxEntry.count == singleDefEntry.count == torchMaxEntry.count + == torchDefEntry.count == 1)); + } else { + ASSERT_TRUE((singleMaxEntry.count == singleDefEntry.count == torchMaxEntry.count + == torchDefEntry.count == 0)); + } + // if the device supports this feature default levels should be greater than 0 + if (singleMaxLevel > 1) { + ASSERT_GT(torchMaxLevel, 1); + ASSERT_GT(torchDefLevel, 0); + ASSERT_GT(singleDefLevel, 0); + ASSERT_TRUE(torchDefLevel <= torchMaxLevel); // default levels should be <= max levels + ASSERT_TRUE(singleDefLevel <= singleMaxLevel); + } + } else { + ASSERT_TRUE(singleMaxRetCode != 0); + ASSERT_TRUE(singleDefRetCode != 0); + ASSERT_TRUE(torchMaxRetCode != 0); + ASSERT_TRUE(torchDefRetCode != 0); + } +} + void CameraAidlTest::verifyRecommendedConfigs(const CameraMetadata& chars) { size_t CONFIG_ENTRY_SIZE = 5; size_t CONFIG_ENTRY_TYPE_OFFSET = 3; diff --git a/camera/provider/aidl/vts/camera_aidl_test.h b/camera/provider/aidl/vts/camera_aidl_test.h index 3018d5a70e..0ebd4ef474 100644 --- a/camera/provider/aidl/vts/camera_aidl_test.h +++ b/camera/provider/aidl/vts/camera_aidl_test.h @@ -262,6 +262,9 @@ class CameraAidlTest : public ::testing::TestWithParam { static void verifyMonochromeCharacteristics(const CameraMetadata& chars); + static void verifyManualFlashStrengthControlCharacteristics( + const camera_metadata_t* staticMeta); + static void verifyMonochromeCameraResult( const ::android::hardware::camera::common::V1_0::helper::CameraMetadata& metadata);