Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffdee868 authored by Jayant Chowdhary's avatar Jayant Chowdhary
Browse files

camera vts: Skip regular vts tests for secure only cameras.



Bug: 156749607

Test: Vendor Testing

Change-Id: Ibe428b663bd8024f46f0273ed5dfaa108a90dd43
Signed-off-by: default avatarJayant Chowdhary <jchowdhary@google.com>
parent 3cc5d92c
Loading
Loading
Loading
Loading
+46 −3
Original line number Diff line number Diff line
@@ -565,6 +565,8 @@ public:

 hidl_vec<hidl_string> getCameraDeviceNames(sp<ICameraProvider> provider);

 bool isSecureOnly(sp<ICameraProvider> provider, const hidl_string& name);

 struct EmptyDeviceCb : public V3_5::ICameraDeviceCallback {
     virtual Return<void> processCaptureResult(
         const hidl_vec<CaptureResult>& /*results*/) override {
@@ -1498,13 +1500,54 @@ hidl_vec<hidl_string> CameraHidlTest::getCameraDeviceNames(sp<ICameraProvider> p
        }
    }

    hidl_vec<hidl_string> retList(cameraDeviceNames.size());
    std::vector<hidl_string> nonSecureCameraDeviceNames;
    for (size_t i = 0; i < cameraDeviceNames.size(); i++) {
        retList[i] = cameraDeviceNames[i];
        // Skip adding secure only cameras, since we don't know their exact
        // capabilities.
        if (!isSecureOnly(mProvider, cameraDeviceNames[i])) {
            nonSecureCameraDeviceNames.emplace_back(cameraDeviceNames[i]);
        }
    }
    hidl_vec<hidl_string> retList(std::move(nonSecureCameraDeviceNames));
    return retList;
}

bool CameraHidlTest::isSecureOnly(sp<ICameraProvider> provider, const hidl_string& name) {
    Return<void> ret;
    ::android::sp<ICameraDevice> device3_x;
    bool retVal = false;
    if (getCameraDeviceVersion(mProviderType, name) == CAMERA_DEVICE_API_VERSION_1_0) {
        return false;
    }
    ret = provider->getCameraDeviceInterface_V3_x(name, [&](auto status, const auto& device) {
        ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
        ASSERT_EQ(Status::OK, status);
        ASSERT_NE(device, nullptr);
        device3_x = device;
    });
    if (!ret.isOk()) {
        ADD_FAILURE() << "Failed to get camera device interface for " << name;
    }
    ret = device3_x->getCameraCharacteristics([&](Status s, CameraMetadata metadata) {
        ASSERT_EQ(Status::OK, s);
        camera_metadata_ro_entry scalarEntry;
        camera_metadata_t* chars = (camera_metadata_t*)metadata.data();
        int rc = find_camera_metadata_ro_entry(chars, ANDROID_REQUEST_AVAILABLE_CAPABILITIES,
                                               &scalarEntry);
        if (rc) {
            ADD_FAILURE();
        }
        if (scalarEntry.count == 1 &&
            scalarEntry.data.u8[0] == ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA) {
            retVal = true;
        }
    });
    if (!ret.isOk()) {
        ADD_FAILURE() << "Failed to get camera characteristics for device " << name;
    }
    return retVal;
}

// Test devices with first_api_level >= P does not advertise device@1.0
TEST_F(CameraHidlTest, noHal1AfterP) {
    constexpr int32_t HAL1_PHASE_OUT_API_LEVEL = 28;