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

Commit 7549241c authored by kongchenrui's avatar kongchenrui Committed by Shuzhen Wang
Browse files

Fix the problem that the data field of Entry in the...


Fix the problem that the data field of Entry in the verifyLogicalOrUltraHighResCameraMetadata function is empty

The reason for this problem is: local variables are used when saving
PhysicalCameraCharacteristics. When its life cycle ends, physChars will
be released. Since Entry uses a pointer, data will be null. So physChars
should be defined outside else to ensure that physChars is not released
during use

Bug: 248221707
Test: VtsHalCameraProviderV2_4TargetTest
Test: VtsAidlHalCameraProvider_TargetTest
Signed-off-by: default avatarkongchenrui <kongchenrui@xiaomi.com>
Change-Id: I4c05e695d255f210f310f8ce78ec2fa71a42cee9
parent e3cba937
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -7883,6 +7883,7 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(
            }
        }

        camera_metadata_t* staticMetadata;
        camera_metadata_ro_entry physicalMultiResStreamConfigs;
        camera_metadata_ro_entry physicalStreamConfigs;
        camera_metadata_ro_entry physicalMaxResolutionStreamConfigs;
@@ -7901,8 +7902,9 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(

            ret = subDevice->getCameraCharacteristics([&](auto status, const auto& chars) {
                ASSERT_EQ(Status::OK, status);
                const camera_metadata_t* staticMetadata =
                        reinterpret_cast<const camera_metadata_t*>(chars.data());
                staticMetadata = clone_camera_metadata(
                        reinterpret_cast<const camera_metadata_t*>(chars.data()));
                ASSERT_NE(nullptr, staticMetadata);
                rc = getSystemCameraKind(staticMetadata, &physSystemCameraKind);
                ASSERT_EQ(rc, Status::OK);
                // Make sure that the system camera kind of a non-hidden
@@ -7936,7 +7938,9 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(
                        verifyCameraCharacteristics(status, chars);
                        verifyMonochromeCharacteristics(chars, deviceVersion);

                        auto staticMetadata = (const camera_metadata_t*)chars.data();
                        staticMetadata = clone_camera_metadata(
                                reinterpret_cast<const camera_metadata_t*>(chars.data()));
                        ASSERT_NE(nullptr, staticMetadata);
                        retcode = find_camera_metadata_ro_entry(
                                staticMetadata, ANDROID_CONTROL_ZOOM_RATIO_RANGE, &entry);
                        bool subCameraHasZoomRatioRange = (0 == retcode && entry.count == 2);
@@ -8064,6 +8068,7 @@ void CameraHidlTest::verifyLogicalOrUltraHighResCameraMetadata(
                }
            }
        }
        free_camera_metadata(staticMetadata);
    }

    // If a multi-resolution stream is supported, there must be at least one
+3 −4
Original line number Diff line number Diff line
@@ -1181,6 +1181,7 @@ void CameraAidlTest::verifyLogicalOrUltraHighResCameraMetadata(
        camera_metadata_ro_entry physicalMultiResStreamConfigs;
        camera_metadata_ro_entry physicalStreamConfigs;
        camera_metadata_ro_entry physicalMaxResolutionStreamConfigs;
        CameraMetadata physChars;
        bool isUltraHighRes = false;
        std::unordered_set<int32_t> subCameraPrivacyTestPatterns;
        if (isPublicId) {
@@ -1189,12 +1190,11 @@ void CameraAidlTest::verifyLogicalOrUltraHighResCameraMetadata(
            ASSERT_TRUE(ret.isOk());
            ASSERT_NE(subDevice, nullptr);

            CameraMetadata subDeviceChars;
            ret = subDevice->getCameraCharacteristics(&subDeviceChars);
            ret = subDevice->getCameraCharacteristics(&physChars);
            ASSERT_TRUE(ret.isOk());

            const camera_metadata_t* staticMetadata =
                    reinterpret_cast<const camera_metadata_t*>(subDeviceChars.metadata.data());
                    reinterpret_cast<const camera_metadata_t*>(physChars.metadata.data());
            retStatus = getSystemCameraKind(staticMetadata, &physSystemCameraKind);
            ASSERT_EQ(retStatus, Status::OK);

@@ -1215,7 +1215,6 @@ void CameraAidlTest::verifyLogicalOrUltraHighResCameraMetadata(
            getPrivacyTestPatternModes(staticMetadata, &subCameraPrivacyTestPatterns);
        } else {
            // Check camera characteristics for hidden camera id
            CameraMetadata physChars;
            ndk::ScopedAStatus ret =
                    device->getPhysicalCameraCharacteristics(physicalId, &physChars);
            ASSERT_TRUE(ret.isOk());