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

Commit 6fddec7d authored by Eino-Ville Talvala's avatar Eino-Ville Talvala Committed by android-build-merger
Browse files

Merge changes Iae3d6f9d,I79e25d27 into pi-dev

am: da74fce8

Change-Id: I8479550c68c1659d7e4b914277b77c3ff8300d9f
parents 21a00f8e da74fce8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ LOCAL_SRC_FILES := \
    device3/StatusTracker.cpp \
    device3/Camera3BufferManager.cpp \
    device3/Camera3StreamSplitter.cpp \
    device3/DistortionMapper.cpp \
    gui/RingBufferConsumer.cpp \
    utils/CameraTraces.cpp \
    utils/AutoConditionLock.cpp \
@@ -96,3 +97,8 @@ LOCAL_CFLAGS += -Wall -Wextra -Werror
LOCAL_MODULE:= libcameraservice

include $(BUILD_SHARED_LIBRARY)

# Build tests too

include $(LOCAL_PATH)/tests/Android.mk
+0 −1
Original line number Diff line number Diff line
@@ -197,7 +197,6 @@ status_t FrameProcessor::processFaceDetect(const CameraMetadata &frame,
                                faceRects[i*4 + 2], scalerCrop);
            face.rect[3] = l.mParameters.arrayYToNormalizedWithCrop(
                                faceRects[i*4 + 3], scalerCrop);

            face.score = faceScores[i];
            if (faceDetectMode == ANDROID_STATISTICS_FACE_DETECT_MODE_FULL) {
                face.id = faceIds[i];
+22 −2
Original line number Diff line number Diff line
@@ -961,6 +961,17 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) {
        }
    }

    isDistortionCorrectionSupported = false;
    camera_metadata_ro_entry_t distortionCorrectionModes =
            staticInfo(ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES);
    for (size_t i = 0; i < distortionCorrectionModes.count; i++) {
        if (distortionCorrectionModes.data.u8[i] !=
                ANDROID_DISTORTION_CORRECTION_MODE_OFF) {
            isDistortionCorrectionSupported = true;
            break;
        }
    }

    if (isDeviceZslSupported || slowJpegMode ||
            property_get_bool("camera.disable_zsl_mode", false)) {
        ALOGI("Camera %d: Disabling ZSL mode", cameraId);
@@ -2097,15 +2108,24 @@ status_t Parameters::updateRequest(CameraMetadata *request) const {

    if (intent.count == 0) return BAD_VALUE;

    uint8_t distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_OFF;
    if (intent.data.u8[0] == ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE) {
        res = request->update(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
                fastInfo.bestStillCaptureFpsRange, 2);
        distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_HIGH_QUALITY;
    } else {
        res = request->update(ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
                previewFpsRange, 2);
        distortionMode = ANDROID_DISTORTION_CORRECTION_MODE_FAST;
    }
    if (res != OK) return res;

    if (isDistortionCorrectionSupported) {
        res = request->update(ANDROID_DISTORTION_CORRECTION_MODE,
                &distortionMode, 1);
        if (res != OK) return res;
    }

    if (autoWhiteBalanceLockAvailable) {
        uint8_t reqWbLock = autoWhiteBalanceLock ?
                ANDROID_CONTROL_AWB_LOCK_ON : ANDROID_CONTROL_AWB_LOCK_OFF;
+2 −0
Original line number Diff line number Diff line
@@ -177,6 +177,8 @@ struct Parameters {
    bool isZslReprocessPresent;
    // Whether the device supports enableZsl.
    bool isDeviceZslSupported;
    // Whether the device supports geometric distortion correction
    bool isDistortionCorrectionSupported;

    // Overall camera state
    enum State {
+32 −1
Original line number Diff line number Diff line
@@ -249,6 +249,14 @@ status_t Camera3Device::initializeCommonLocked() {
        }
    }

    if (DistortionMapper::isDistortionSupported(mDeviceInfo)) {
        res = mDistortionMapper.setupStaticInfo(mDeviceInfo);
        if (res != OK) {
            SET_ERR_L("Unable to read necessary calibration fields for distortion correction");
            return res;
        }
    }

    return OK;
}

@@ -2983,6 +2991,14 @@ void Camera3Device::sendCaptureResult(CameraMetadata &pendingMetadata,
        }
    }

    // Fix up some result metadata to account for HAL-level distortion correction
    status_t res = mDistortionMapper.correctCaptureResult(&captureResult.mMetadata);
    if (res != OK) {
        SET_ERR("Unable to correct capture result metadata for frame %d: %s (%d)",
                frameNumber, strerror(res), res);
        return;
    }

    mTagMonitor.monitorMetadata(TagMonitor::RESULT,
            frameNumber, timestamp.data.i64[0], captureResult.mMetadata);

@@ -4705,13 +4721,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {

        // Insert any queued triggers (before metadata is locked)
        status_t res = insertTriggers(captureRequest);

        if (res < 0) {
            SET_ERR("RequestThread: Unable to insert triggers "
                    "(capture request %d, HAL device: %s (%d)",
                    halRequest->frame_number, strerror(-res), res);
            return INVALID_OPERATION;
        }

        int triggerCount = res;
        bool triggersMixedIn = (triggerCount > 0 || mPrevTriggers > 0);
        mPrevTriggers = triggerCount;
@@ -4731,6 +4747,21 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {
                return INVALID_OPERATION;
            }

            {
                // Correct metadata regions for distortion correction if enabled
                sp<Camera3Device> parent = mParent.promote();
                if (parent != nullptr) {
                    res = parent->mDistortionMapper.correctCaptureRequest(
                        &(captureRequest->mSettingsList.begin()->metadata));
                    if (res != OK) {
                        SET_ERR("RequestThread: Unable to correct capture requests "
                                "for lens distortion for request %d: %s (%d)",
                                halRequest->frame_number, strerror(-res), res);
                        return INVALID_OPERATION;
                    }
                }
            }

            /**
             * The request should be presorted so accesses in HAL
             *   are O(logn). Sidenote, sorting a sorted metadata is nop.
Loading