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

Commit f7057ca9 authored by Yin-Chia Yeh's avatar Yin-Chia Yeh
Browse files

Camera: fix wrong metadata pointer

Fixed the issue when halRequest->settings is nullptr some
inflight request calculation is wrong.

Test: partner testing
Bug: 169310293
Change-Id: Iccbf0c543299065d8beac79f4e5c87e4514fceba
parent b96da753
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -4658,15 +4658,21 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {
        }
        bool isStillCapture = false;
        bool isZslCapture = false;
        const camera_metadata_t* settings = halRequest->settings;
        bool shouldUnlockSettings = false;
        if (settings == nullptr) {
            shouldUnlockSettings = true;
            settings = captureRequest->mSettingsList.begin()->metadata.getAndLock();
        }
        if (!mNextRequests[0].captureRequest->mSettingsList.begin()->metadata.isEmpty()) {
            camera_metadata_ro_entry_t e = camera_metadata_ro_entry_t();
            find_camera_metadata_ro_entry(halRequest->settings, ANDROID_CONTROL_CAPTURE_INTENT, &e);
            find_camera_metadata_ro_entry(settings, ANDROID_CONTROL_CAPTURE_INTENT, &e);
            if ((e.count > 0) && (e.data.u8[0] == ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE)) {
                isStillCapture = true;
                ATRACE_ASYNC_BEGIN("still capture", mNextRequests[i].halRequest.frame_number);
            }

            find_camera_metadata_ro_entry(halRequest->settings, ANDROID_CONTROL_ENABLE_ZSL, &e);
            find_camera_metadata_ro_entry(settings, ANDROID_CONTROL_ENABLE_ZSL, &e);
            if ((e.count > 0) && (e.data.u8[0] == ANDROID_CONTROL_ENABLE_ZSL_TRUE)) {
                isZslCapture = true;
            }
@@ -4675,7 +4681,7 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {
                totalNumBuffers, captureRequest->mResultExtras,
                /*hasInput*/halRequest->input_buffer != NULL,
                hasCallback,
                calculateMaxExpectedDuration(halRequest->settings),
                calculateMaxExpectedDuration(settings),
                requestedPhysicalCameras, isStillCapture, isZslCapture,
                captureRequest->mRotateAndCropAuto, mPrevCameraIdsWithZoom,
                (mUseHalBufManager) ? uniqueSurfaceIdMap :
@@ -4685,6 +4691,11 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {
                __FUNCTION__,
                captureRequest->mResultExtras.requestId, captureRequest->mResultExtras.frameNumber,
                captureRequest->mResultExtras.burstId);

        if (shouldUnlockSettings) {
            captureRequest->mSettingsList.begin()->metadata.unlock(settings);
        }

        if (res != OK) {
            SET_ERR("RequestThread: Unable to register new in-flight request:"
                    " %s (%d)", strerror(-res), res);