From 263e36209101faa1c2f5bb02f944aee2b3153712 Mon Sep 17 00:00:00 2001 From: Austin Borger Date: Thu, 15 Jun 2023 11:32:04 -0700 Subject: [PATCH] Camera VTS: Properly initialize Stream in various places useCase and colorSpace are not explicitly initialized. colorSpace must be explicitly initialized to UNSPECIFIED, as its default value is not zero. Without initialization, the HAL will receive incorrect Stream data. Bug: 287305593 Test: Ran full VTS test on Cuttlefish / OEM testing. Change-Id: I6a29600b5dc06ebdc61b38e0585204fe52d590c2 --- .../VtsAidlHalCameraProvider_TargetTest.cpp | 5 + camera/provider/aidl/vts/camera_aidl_test.cpp | 104 ++++++++++-------- camera/provider/aidl/vts/camera_aidl_test.h | 38 +++---- 3 files changed, 82 insertions(+), 65 deletions(-) diff --git a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp index aee53664b0..2845180727 100644 --- a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp +++ b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp @@ -551,6 +551,11 @@ TEST_P(CameraAidlTest, configureStreamsAvailableOutputs) { stream.rotation = StreamRotation::ROTATION_0; stream.dynamicRangeProfile = RequestAvailableDynamicRangeProfilesMap:: ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD; + stream.useCase = ScalerAvailableStreamUseCases:: + ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT; + stream.colorSpace = static_cast( + RequestAvailableColorSpaceProfilesMap:: + ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED); std::vector streams = {stream}; StreamConfiguration config; diff --git a/camera/provider/aidl/vts/camera_aidl_test.cpp b/camera/provider/aidl/vts/camera_aidl_test.cpp index 7665f797c1..08ad0bbaa0 100644 --- a/camera/provider/aidl/vts/camera_aidl_test.cpp +++ b/camera/provider/aidl/vts/camera_aidl_test.cpp @@ -45,8 +45,6 @@ using ::aidl::android::hardware::camera::common::TorchModeStatus; using ::aidl::android::hardware::camera::device::CameraMetadata; using ::aidl::android::hardware::camera::device::ICameraDevice; using ::aidl::android::hardware::camera::metadata::CameraMetadataTag; -using ::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap; -using ::aidl::android::hardware::camera::metadata::RequestAvailableDynamicRangeProfilesMap; using ::aidl::android::hardware::camera::metadata::SensorInfoColorFilterArrangement; using ::aidl::android::hardware::camera::metadata::SensorPixelMode; using ::aidl::android::hardware::camera::provider::BnCameraProviderCallback; @@ -2237,21 +2235,26 @@ void CameraAidlTest::configureStreamUseCaseInternal(const AvailableStream &thres } std::vector streams(1); - streams[0] = {0, - StreamType::OUTPUT, - outputPreviewStreams[0].width, - outputPreviewStreams[0].height, - static_cast(outputPreviewStreams[0].format), - static_cast<::aidl::android::hardware::graphics::common::BufferUsage>( - GRALLOC1_CONSUMER_USAGE_CPU_READ), - Dataspace::UNKNOWN, - StreamRotation::ROTATION_0, - std::string(), - 0, - -1, - {SensorPixelMode::ANDROID_SENSOR_PIXEL_MODE_DEFAULT}, - RequestAvailableDynamicRangeProfilesMap:: - ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD}; + streams[0] = { + 0, + StreamType::OUTPUT, + outputPreviewStreams[0].width, + outputPreviewStreams[0].height, + static_cast(outputPreviewStreams[0].format), + static_cast<::aidl::android::hardware::graphics::common::BufferUsage>( + GRALLOC1_CONSUMER_USAGE_CPU_READ), + Dataspace::UNKNOWN, + StreamRotation::ROTATION_0, + std::string(), + 0, + -1, + {SensorPixelMode::ANDROID_SENSOR_PIXEL_MODE_DEFAULT}, + RequestAvailableDynamicRangeProfilesMap:: + ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD, + ScalerAvailableStreamUseCases::ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, + static_cast( + RequestAvailableColorSpaceProfilesMap:: + ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED)}; int32_t streamConfigCounter = 0; CameraMetadata req; @@ -2395,7 +2398,11 @@ void CameraAidlTest::configureSingleStream( /*groupId*/ -1, {SensorPixelMode::ANDROID_SENSOR_PIXEL_MODE_DEFAULT}, RequestAvailableDynamicRangeProfilesMap:: - ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD}; + ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD, + ScalerAvailableStreamUseCases::ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, + static_cast( + RequestAvailableColorSpaceProfilesMap:: + ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED)}; StreamConfiguration config; config.streams = streams; @@ -2726,21 +2733,26 @@ void CameraAidlTest::configurePreviewStreams( std::vector streams(physicalIds.size()); int32_t streamId = 0; for (auto const& physicalId : physicalIds) { - streams[streamId] = {streamId, - StreamType::OUTPUT, - outputPreviewStreams[0].width, - outputPreviewStreams[0].height, - static_cast(outputPreviewStreams[0].format), - static_cast( - GRALLOC1_CONSUMER_USAGE_HWCOMPOSER), - Dataspace::UNKNOWN, - StreamRotation::ROTATION_0, - physicalId, - 0, - -1, - {SensorPixelMode::ANDROID_SENSOR_PIXEL_MODE_DEFAULT}, - RequestAvailableDynamicRangeProfilesMap:: - ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD}; + streams[streamId] = { + streamId, + StreamType::OUTPUT, + outputPreviewStreams[0].width, + outputPreviewStreams[0].height, + static_cast(outputPreviewStreams[0].format), + static_cast( + GRALLOC1_CONSUMER_USAGE_HWCOMPOSER), + Dataspace::UNKNOWN, + StreamRotation::ROTATION_0, + physicalId, + 0, + -1, + {SensorPixelMode::ANDROID_SENSOR_PIXEL_MODE_DEFAULT}, + RequestAvailableDynamicRangeProfilesMap:: + ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD, + ScalerAvailableStreamUseCases::ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, + static_cast( + RequestAvailableColorSpaceProfilesMap:: + ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED)}; streamId++; } @@ -2799,7 +2811,8 @@ void CameraAidlTest::configureStreams(const std::string& name, bool* supportsPartialResults, int32_t* partialResultCount, bool* useHalBufManager, std::shared_ptr* outCb, uint32_t streamConfigCounter, bool maxResolution, - RequestAvailableDynamicRangeProfilesMap prof) { + RequestAvailableDynamicRangeProfilesMap dynamicRangeProf, + RequestAvailableColorSpaceProfilesMap colorSpaceProf) { ASSERT_NE(nullptr, session); ASSERT_NE(nullptr, halStreams); ASSERT_NE(nullptr, previewStream); @@ -2881,7 +2894,9 @@ void CameraAidlTest::configureStreams(const std::string& name, -1, {maxResolution ? SensorPixelMode::ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION : SensorPixelMode::ANDROID_SENSOR_PIXEL_MODE_DEFAULT}, - prof}; + dynamicRangeProf, + ScalerAvailableStreamUseCases::ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, + static_cast(colorSpaceProf)}; StreamConfiguration config; config.streams = streams; @@ -3332,7 +3347,11 @@ void CameraAidlTest::configureOfflineStillStream( /*groupId*/ 0, {SensorPixelMode::ANDROID_SENSOR_PIXEL_MODE_DEFAULT}, RequestAvailableDynamicRangeProfilesMap:: - ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD}; + ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD, + ScalerAvailableStreamUseCases::ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT, + static_cast( + RequestAvailableColorSpaceProfilesMap:: + ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED)}; StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE, CameraMetadata()}; @@ -3447,15 +3466,12 @@ void CameraAidlTest::processColorSpaceRequest( Stream previewStream; std::shared_ptr cb; - previewStream.usage = - static_cast( - GRALLOC1_CONSUMER_USAGE_HWCOMPOSER); - previewStream.dataSpace = getDataspace(PixelFormat::IMPLEMENTATION_DEFINED); - previewStream.colorSpace = static_cast(colorSpace); + previewStream.usage = static_cast( + GRALLOC1_CONSUMER_USAGE_HWCOMPOSER); configureStreams(name, mProvider, PixelFormat::IMPLEMENTATION_DEFINED, &mSession, - &previewStream, &halStreams, &supportsPartialResults, - &partialResultCount, &useHalBufManager, &cb, 0, - /*maxResolution*/ false, dynamicRangeProfile); + &previewStream, &halStreams, &supportsPartialResults, &partialResultCount, + &useHalBufManager, &cb, 0, + /*maxResolution*/ false, dynamicRangeProfile, colorSpace); ASSERT_NE(mSession, nullptr); ::aidl::android::hardware::common::fmq::MQDescriptor< diff --git a/camera/provider/aidl/vts/camera_aidl_test.h b/camera/provider/aidl/vts/camera_aidl_test.h index 588cb503b9..6f8f380fa4 100644 --- a/camera/provider/aidl/vts/camera_aidl_test.h +++ b/camera/provider/aidl/vts/camera_aidl_test.h @@ -77,6 +77,9 @@ using ::aidl::android::hardware::camera::device::StreamBuffer; using ::aidl::android::hardware::camera::device::StreamBufferRet; using ::aidl::android::hardware::camera::device::StreamConfiguration; using ::aidl::android::hardware::camera::device::StreamConfigurationMode; +using ::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap; +using ::aidl::android::hardware::camera::metadata::RequestAvailableDynamicRangeProfilesMap; +using ::aidl::android::hardware::camera::metadata::ScalerAvailableStreamUseCases; using ::aidl::android::hardware::camera::provider::ConcurrentCameraIdCombination; using ::aidl::android::hardware::camera::provider::ICameraProvider; @@ -205,10 +208,12 @@ class CameraAidlTest : public ::testing::TestWithParam { bool* supportsPartialResults /*out*/, int32_t* partialResultCount /*out*/, bool* useHalBufManager /*out*/, std::shared_ptr* outCb /*out*/, uint32_t streamConfigCounter, bool maxResolution, - aidl::android::hardware::camera::metadata::RequestAvailableDynamicRangeProfilesMap - prof = ::aidl::android::hardware::camera::metadata:: - RequestAvailableDynamicRangeProfilesMap:: - ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD); + RequestAvailableDynamicRangeProfilesMap dynamicRangeProf = + RequestAvailableDynamicRangeProfilesMap:: + ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD, + RequestAvailableColorSpaceProfilesMap colorSpaceProf = + RequestAvailableColorSpaceProfilesMap:: + ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED); void configurePreviewStreams( const std::string& name, const std::shared_ptr& provider, @@ -376,8 +381,7 @@ class CameraAidlTest : public ::testing::TestWithParam { static void get10BitDynamicRangeProfiles( const camera_metadata_t* staticMeta, - std::vector* profiles); + std::vector* profiles); static bool reportsColorSpaces(const camera_metadata_t* staticMeta); @@ -387,17 +391,13 @@ class CameraAidlTest : public ::testing::TestWithParam { RequestAvailableColorSpaceProfilesMap>* profiles); static bool isColorSpaceCompatibleWithDynamicRangeAndPixelFormat( - const camera_metadata_t* staticMeta, - aidl::android::hardware::camera::metadata:: - RequestAvailableColorSpaceProfilesMap colorSpace, - aidl::android::hardware::camera::metadata:: + const camera_metadata_t* staticMeta, RequestAvailableColorSpaceProfilesMap colorSpace, RequestAvailableDynamicRangeProfilesMap dynamicRangeProfile, aidl::android::hardware::graphics::common::PixelFormat pixelFormat); - static const char* getColorSpaceProfileString(aidl::android::hardware::camera::metadata:: - RequestAvailableColorSpaceProfilesMap colorSpace); + static const char* getColorSpaceProfileString(RequestAvailableColorSpaceProfilesMap colorSpace); - static const char* getDynamicRangeProfileString(aidl::android::hardware::camera::metadata:: + static const char* getDynamicRangeProfileString( RequestAvailableDynamicRangeProfilesMap dynamicRangeProfile); static int32_t halFormatToPublicFormat( @@ -408,10 +408,8 @@ class CameraAidlTest : public ::testing::TestWithParam { static Size getMinSize(Size a, Size b); - void processColorSpaceRequest(aidl::android::hardware::camera::metadata:: - RequestAvailableColorSpaceProfilesMap colorSpace, - aidl::android::hardware::camera::metadata:: - RequestAvailableDynamicRangeProfilesMap dynamicRangeProfile); + void processColorSpaceRequest(RequestAvailableColorSpaceProfilesMap colorSpace, + RequestAvailableDynamicRangeProfilesMap dynamicRangeProfile); void processZoomSettingsOverrideRequests( int32_t frameCount, const bool *overrideSequence, const bool *expectedResults); @@ -571,10 +569,8 @@ class CameraAidlTest : public ::testing::TestWithParam { static bool matchDeviceName(const std::string& deviceName, const std::string& providerType, std::string* deviceVersion, std::string* cameraId); - static void verify10BitMetadata( - HandleImporter& importer, const InFlightRequest& request, - aidl::android::hardware::camera::metadata::RequestAvailableDynamicRangeProfilesMap - profile); + static void verify10BitMetadata(HandleImporter& importer, const InFlightRequest& request, + RequestAvailableDynamicRangeProfilesMap profile); static void waitForReleaseFence( std::vector& resultOutputBuffers);