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

Commit 55507260 authored by Shuzhen Wang's avatar Shuzhen Wang Committed by Automerger Merge Worker
Browse files

Merge "Camera: Override test pattern mode for physical settings keys" into...

Merge "Camera: Override test pattern mode for physical settings keys" into sc-v2-dev am: 3ba08677 am: 61102572

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/16175763

Change-Id: I66194609158ae17bad451b252383f91c495e2522
parents 274954ae 61102572
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -379,6 +379,12 @@ binder::Status CameraDeviceClient::submitRequestList(
            }

            String8 physicalId(it.id.c_str());
            bool hasTestPatternModePhysicalKey = std::find(mSupportedPhysicalRequestKeys.begin(),
                    mSupportedPhysicalRequestKeys.end(), ANDROID_SENSOR_TEST_PATTERN_MODE) !=
                    mSupportedPhysicalRequestKeys.end();
            bool hasTestPatternDataPhysicalKey = std::find(mSupportedPhysicalRequestKeys.begin(),
                    mSupportedPhysicalRequestKeys.end(), ANDROID_SENSOR_TEST_PATTERN_DATA) !=
                    mSupportedPhysicalRequestKeys.end();
            if (physicalId != mDevice->getId()) {
                auto found = std::find(requestedPhysicalIds.begin(), requestedPhysicalIds.end(),
                        it.id);
@@ -404,7 +410,8 @@ binder::Status CameraDeviceClient::submitRequestList(
                        }
                    }

                    physicalSettingsList.push_back({it.id, filteredParams});
                    physicalSettingsList.push_back({it.id, filteredParams,
                            hasTestPatternModePhysicalKey, hasTestPatternDataPhysicalKey});
                }
            } else {
                physicalSettingsList.push_back({it.id, it.settings});
+10 −0
Original line number Diff line number Diff line
@@ -109,6 +109,16 @@ class CameraDeviceBase : public virtual FrameProducer {
    struct PhysicalCameraSettings {
        std::string cameraId;
        CameraMetadata metadata;

        // Whether the physical camera supports testPatternMode/testPatternData
        bool mHasTestPatternModeTag = true;
        bool mHasTestPatternDataTag = true;

        // Original value of TEST_PATTERN_MODE and DATA so that they can be
        // restored when sensor muting is turned off
        int32_t mOriginalTestPatternMode = 0;
        int32_t mOriginalTestPatternData[4] = {};

    };
    typedef List<PhysicalCameraSettings> PhysicalCameraSettingsList;

+60 −53
Original line number Diff line number Diff line
@@ -2471,22 +2471,24 @@ sp<Camera3Device::CaptureRequest> Camera3Device::createCaptureRequest(
    }

    if (mSupportCameraMute) {
        for (auto& settings : newRequest->mSettingsList) {
            auto testPatternModeEntry =
                newRequest->mSettingsList.begin()->metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE);
        newRequest->mOriginalTestPatternMode = testPatternModeEntry.count > 0 ?
                    settings.metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE);
            settings.mOriginalTestPatternMode = testPatternModeEntry.count > 0 ?
                    testPatternModeEntry.data.i32[0] :
                    ANDROID_SENSOR_TEST_PATTERN_MODE_OFF;

            auto testPatternDataEntry =
                newRequest->mSettingsList.begin()->metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA);
                    settings.metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA);
            if (testPatternDataEntry.count >= 4) {
            memcpy(newRequest->mOriginalTestPatternData, testPatternDataEntry.data.i32,
                    sizeof(CaptureRequest::mOriginalTestPatternData));
                memcpy(settings.mOriginalTestPatternData, testPatternDataEntry.data.i32,
                        sizeof(PhysicalCameraSettings::mOriginalTestPatternData));
            } else {
            newRequest->mOriginalTestPatternData[0] = 0;
            newRequest->mOriginalTestPatternData[1] = 0;
            newRequest->mOriginalTestPatternData[2] = 0;
            newRequest->mOriginalTestPatternData[3] = 0;
                settings.mOriginalTestPatternData[0] = 0;
                settings.mOriginalTestPatternData[1] = 0;
                settings.mOriginalTestPatternData[2] = 0;
                settings.mOriginalTestPatternData[3] = 0;
            }
        }
    }

@@ -5962,14 +5964,18 @@ bool Camera3Device::RequestThread::overrideTestPattern(

    bool changed = false;

    int32_t testPatternMode = request->mOriginalTestPatternMode;
    // For a multi-camera, the physical cameras support the same set of
    // test pattern modes as the logical camera.
    for (auto& settings : request->mSettingsList) {
        CameraMetadata &metadata = settings.metadata;

        int32_t testPatternMode = settings.mOriginalTestPatternMode;
        int32_t testPatternData[4] = {
        request->mOriginalTestPatternData[0],
        request->mOriginalTestPatternData[1],
        request->mOriginalTestPatternData[2],
        request->mOriginalTestPatternData[3]
            settings.mOriginalTestPatternData[0],
            settings.mOriginalTestPatternData[1],
            settings.mOriginalTestPatternData[2],
            settings.mOriginalTestPatternData[3]
        };

        if (mCameraMute != ANDROID_SENSOR_TEST_PATTERN_MODE_OFF) {
            testPatternMode = mCameraMute;
            testPatternData[0] = 0;
@@ -5978,21 +5984,21 @@ bool Camera3Device::RequestThread::overrideTestPattern(
            testPatternData[3] = 0;
        }

    CameraMetadata &metadata = request->mSettingsList.begin()->metadata;

        auto testPatternEntry = metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE);
        bool supportTestPatternModeKey = settings.mHasTestPatternModeTag;
        if (testPatternEntry.count > 0) {
            if (testPatternEntry.data.i32[0] != testPatternMode) {
                testPatternEntry.data.i32[0] = testPatternMode;
                changed = true;
            }
    } else {
        } else if (supportTestPatternModeKey) {
            metadata.update(ANDROID_SENSOR_TEST_PATTERN_MODE,
                    &testPatternMode, 1);
            changed = true;
        }

        auto testPatternColor = metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA);
        bool supportTestPatternDataKey = settings.mHasTestPatternDataTag;
        if (testPatternColor.count >= 4) {
            for (size_t i = 0; i < 4; i++) {
                if (testPatternColor.data.i32[i] != testPatternData[i]) {
@@ -6000,11 +6006,12 @@ bool Camera3Device::RequestThread::overrideTestPattern(
                    changed = true;
                }
            }
    } else {
        } else if (supportTestPatternDataKey) {
            metadata.update(ANDROID_SENSOR_TEST_PATTERN_DATA,
                    testPatternData, 4);
            changed = true;
        }
    }

    return changed;
}
+0 −5
Original line number Diff line number Diff line
@@ -579,10 +579,6 @@ class Camera3Device :
        // overriding of ROTATE_AND_CROP value and adjustment of coordinates
        // in several other controls in both the request and the result
        bool                                mRotateAndCropAuto;
        // Original value of TEST_PATTERN_MODE and DATA so that they can be
        // restored when sensor muting is turned off
        int32_t                             mOriginalTestPatternMode;
        int32_t                             mOriginalTestPatternData[4];

        // Whether this capture request has its zoom ratio set to 1.0x before
        // the framework overrides it for camera HAL consumption.
@@ -590,7 +586,6 @@ class Camera3Device :
        // The systemTime timestamp when the request is created.
        nsecs_t                             mRequestTimeNs;


        // Whether this capture request's distortion correction update has
        // been done.
        bool                                mDistortionCorrectionUpdated = false;