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

Commit 879234b2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: API1: Improve ZSL mode activation heuristics" into nyc-mr1-dev

parents 0664aa0b c451d0f8
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -322,6 +322,9 @@ status_t Camera2Client::dumpClient(int fd, const Vector<String16>& args) {
            p.fastInfo.bestStillCaptureFpsRange[0],
            p.fastInfo.bestStillCaptureFpsRange[1]);

    result.appendFormat("    Use zero shutter lag: %s\n",
            p.useZeroShutterLag() ? "yes" : "no");

    result.append("  Current streams:\n");
    result.appendFormat("    Preview stream ID: %d\n",
            getPreviewStreamId());
@@ -813,7 +816,7 @@ status_t Camera2Client::startPreviewL(Parameters &params, bool restart) {
        }
    }

    if (params.zslMode && !params.recordingHint &&
    if (params.useZeroShutterLag() &&
            getRecordingStreamId() == NO_STREAM) {
        res = updateProcessorStream(mZslProcessor, params);
        if (res != OK) {
@@ -1362,7 +1365,7 @@ status_t Camera2Client::cancelAutoFocus() {

            return OK;
        }
        if (l.mParameters.zslMode) {
        if (l.mParameters.allowZslMode) {
            mZslProcessor->clearZslQueue();
        }
    }
@@ -1460,7 +1463,7 @@ status_t Camera2Client::takePicture(int msgType) {

        // Clear ZSL buffer queue when Jpeg size is changed.
        bool jpegStreamChanged = mJpegProcessor->getStreamId() != lastJpegStreamId;
        if (l.mParameters.zslMode && jpegStreamChanged) {
        if (l.mParameters.allowZslMode && jpegStreamChanged) {
            ALOGV("%s: Camera %d: Clear ZSL buffer queue when Jpeg size is changed",
                    __FUNCTION__, mCameraId);
            mZslProcessor->clearZslQueue();
@@ -1495,7 +1498,7 @@ status_t Camera2Client::setParameters(const String8& params) {
    if (res != OK) return res;
    Parameters::focusMode_t focusModeAfter = l.mParameters.focusMode;

    if (l.mParameters.zslMode && focusModeAfter != focusModeBefore) {
    if (l.mParameters.allowZslMode && focusModeAfter != focusModeBefore) {
        mZslProcessor->clearZslQueue();
    }

+1 −1
Original line number Diff line number Diff line
@@ -338,7 +338,7 @@ CaptureSequencer::CaptureState CaptureSequencer::manageStart(
        return DONE;
    }

    else if (l.mParameters.zslMode &&
    else if (l.mParameters.useZeroShutterLag() &&
            l.mParameters.state == Parameters::STILL_CAPTURE &&
            l.mParameters.flashMode != Parameters::FLASH_MODE_ON) {
        nextState = ZSL_START;
+24 −3
Original line number Diff line number Diff line
@@ -908,12 +908,12 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) {
    property_get("camera.disable_zsl_mode", value, "0");
    if (!strcmp(value,"1") || slowJpegMode) {
        ALOGI("Camera %d: Disabling ZSL mode", cameraId);
        zslMode = false;
        allowZslMode = false;
    } else {
        zslMode = true;
        allowZslMode = true;
    }

    ALOGI("%s: zslMode: %d slowJpegMode %d", __FUNCTION__, zslMode, slowJpegMode);
    ALOGI("%s: allowZslMode: %d slowJpegMode %d", __FUNCTION__, allowZslMode, slowJpegMode);

    state = STOPPED;

@@ -1127,6 +1127,8 @@ status_t Parameters::buildFastInfo() {
    ALOGV("Camera %d: Flexible YUV %s supported",
            cameraId, fastInfo.useFlexibleYuv ? "is" : "is not");

    fastInfo.maxJpegSize = getMaxSize(getAvailableJpegSizes());

    return OK;
}

@@ -2231,6 +2233,25 @@ bool Parameters::isJpegSizeOverridden() {
    return pictureSizeOverriden;
}

bool Parameters::useZeroShutterLag() const {
    // If ZSL mode is disabled, don't use it
    if (!allowZslMode) return false;
    // If recording hint is enabled, don't do ZSL
    if (recordingHint) return false;
    // If still capture size is no bigger than preview or video size,
    // don't do ZSL
    if (pictureWidth <= previewWidth || pictureHeight <= previewHeight ||
            pictureWidth <= videoWidth || pictureHeight <= videoHeight) {
        return false;
    }
    // If still capture size is less than quarter of max, don't do ZSL
    if ((pictureWidth * pictureHeight) <
            (fastInfo.maxJpegSize.width * fastInfo.maxJpegSize.height / 4) ) {
        return false;
    }
    return true;
}

const char* Parameters::getStateName(State state) {
#define CASE_ENUM_TO_CHAR(x) case x: return(#x); break;
    switch(state) {
+5 −2
Original line number Diff line number Diff line
@@ -161,9 +161,9 @@ struct Parameters {
    bool previewCallbackOneShot;
    bool previewCallbackSurface;

    bool zslMode;
    bool allowZslMode;
    // Whether the jpeg stream is slower than 30FPS and can slow down preview.
    // When slowJpegMode is true, zslMode must be false to avoid slowing down preview.
    // When slowJpegMode is true, allowZslMode must be false to avoid slowing down preview.
    bool slowJpegMode;

    // Overall camera state
@@ -219,6 +219,7 @@ struct Parameters {
        DefaultKeyedVector<uint8_t, OverrideModes> sceneModeOverrides;
        float minFocalLength;
        bool useFlexibleYuv;
        Size maxJpegSize;
    } fastInfo;

    // Quirks information; these are short-lived flags to enable workarounds for
@@ -271,6 +272,8 @@ struct Parameters {
    status_t recoverOverriddenJpegSize();
    // if video snapshot size is currently overridden
    bool isJpegSizeOverridden();
    // whether zero shutter lag should be used for non-recording operation
    bool useZeroShutterLag() const;

    // Calculate the crop region rectangle, either tightly about the preview
    // resolution, or a region just based on the active array; both take
+1 −1
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ status_t StreamingProcessor::updatePreviewRequest(const Parameters &params) {

        // Use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG for ZSL streaming case.
        if (client->getCameraDeviceVersion() >= CAMERA_DEVICE_API_VERSION_3_0) {
            if (params.zslMode && !params.recordingHint) {
            if (params.useZeroShutterLag() && !params.recordingHint) {
                res = device->createDefaultRequest(CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG,
                        &mPreviewRequest);
            } else {