From a0dd95d45d72f6c2f4c60c4ab1908e67b4bb28da Mon Sep 17 00:00:00 2001 From: Yin-Chia Yeh Date: Wed, 26 Jul 2017 16:53:20 -0700 Subject: [PATCH] Camera: fix various VTS issues Also fix wrong return values for processCaptureRequest in default wrapper. Test: running camera VTS Bug: 64041692 Change-Id: I397390af7c85a776713f6287bef1c4d11c721c9a Merged-In: I397390af7c85a776713f6287bef1c4d11c721c9a --- .../VtsHalCameraProviderV2_4TargetTest.cpp | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp index 97e1b90ec1..9d0cf8839e 100644 --- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp +++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp @@ -131,22 +131,34 @@ namespace { const char *kHAL1_0 = "1.0"; bool matchDeviceName(const hidl_string& deviceName, - const hidl_string &providerType, std::smatch& sm) { + const hidl_string &providerType, + std::string* deviceVersion, + std::string* cameraId) { ::android::String8 pattern; pattern.appendFormat(kDeviceNameRE, providerType.c_str()); std::regex e(pattern.string()); std::string deviceNameStd(deviceName.c_str()); - return std::regex_match(deviceNameStd, sm, e); + std::smatch sm; + if (std::regex_match(deviceNameStd, sm, e)) { + if (deviceVersion != nullptr) { + *deviceVersion = sm[1]; + } + if (cameraId != nullptr) { + *cameraId = sm[2]; + } + return true; + } + return false; } int getCameraDeviceVersion(const hidl_string& deviceName, const hidl_string &providerType) { - std::smatch sm; - bool match = matchDeviceName(deviceName, providerType, sm); + std::string version; + bool match = matchDeviceName(deviceName, providerType, &version, nullptr); if (!match) { return -1; } - std::string version = sm[1].str(); + if (version.compare(kHAL3_2) == 0) { // maybe switched to 3.4 or define the hidl version enumlater return CAMERA_DEVICE_API_VERSION_3_2; @@ -2977,6 +2989,9 @@ TEST_F(CameraHidlTest, processCaptureRequestPreview) { //Empty settings should be supported after the first call //for repeating requests. request.settings.setToExternal(nullptr, 0, true); + // The buffer has been registered to HAL by bufferId, so per + // API contract we should send a null handle for this buffer + request.outputBuffers[0].buffer = nullptr; mInflightMap.clear(); inflightReq = {1, false, supportsPartialResults, partialResultCount, resultQueue}; @@ -3073,7 +3088,10 @@ TEST_F(CameraHidlTest, processCaptureRequestInvalidSinglePreview) { numRequestProcessed = n; }); ASSERT_TRUE(ret.isOk()); - ASSERT_EQ(Status::INTERNAL_ERROR, status); + // b/64041692: Temporariy accept ILLEGAL_ARGUMENT or INTERNAL_ERROR + // It will be changed to only accept ILLEGAL_ARGUMENT in next release + ASSERT_TRUE(status == Status::ILLEGAL_ARGUMENT || + status == Status::INTERNAL_ERROR); ASSERT_EQ(numRequestProcessed, 0u); ret = session->close(); @@ -3134,7 +3152,10 @@ TEST_F(CameraHidlTest, processCaptureRequestInvalidBuffer) { numRequestProcessed = n; }); ASSERT_TRUE(ret.isOk()); - ASSERT_EQ(Status::INTERNAL_ERROR, status); + // b/64041692: Temporariy accept ILLEGAL_ARGUMENT or INTERNAL_ERROR + // It will be changed to only accept ILLEGAL_ARGUMENT in next release + ASSERT_TRUE(status == Status::ILLEGAL_ARGUMENT || + status == Status::INTERNAL_ERROR); ASSERT_EQ(numRequestProcessed, 0u); ret = session->close();