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

Commit e598e998 authored by Shuzhen Wang's avatar Shuzhen Wang Committed by android-build-merger
Browse files

Merge "Camera: Handle RESULT_ERROR followed by BUFFER_ERROR" into oc-mr1-dev am: 1041ecbb

am: 8b9ac6c0

Change-Id: I0014146aafa867f6b983fb8f6679442e85d945ed
parents 3a52d183 8b9ac6c0
Loading
Loading
Loading
Loading
+6 −20
Original line number Diff line number Diff line
@@ -2439,25 +2439,6 @@ void Camera3Device::removeInFlightRequestIfReadyLocked(int idx) {
    nsecs_t sensorTimestamp = request.sensorTimestamp;
    nsecs_t shutterTimestamp = request.shutterTimestamp;

    bool skipResultMetadata = false;
    if (request.requestStatus != OK) {
        switch (request.requestStatus) {
            case CAMERA3_MSG_ERROR_DEVICE:
            case CAMERA3_MSG_ERROR_REQUEST:
            case CAMERA3_MSG_ERROR_RESULT:
                skipResultMetadata = true;
                break;
            case CAMERA3_MSG_ERROR_BUFFER:
                //Result metadata should return in this case.
                skipResultMetadata = false;
                break;
            default:
                SET_ERR("Unknown error message: %d", request.requestStatus);
                skipResultMetadata = false;
                break;
        }
    }

    // Check if it's okay to remove the request from InFlightMap:
    // In the case of a successful request:
    //      all input and output buffers, all result metadata, shutter callback
@@ -2465,7 +2446,7 @@ void Camera3Device::removeInFlightRequestIfReadyLocked(int idx) {
    // In the case of a unsuccessful request:
    //      all input and output buffers arrived.
    if (request.numBuffersLeft == 0 &&
            (skipResultMetadata ||
            (request.skipResultMetadata ||
            (request.haveResultMetadata && shutterTimestamp != 0))) {
        ATRACE_ASYNC_END("frame capture", frameNumber);

@@ -2941,6 +2922,11 @@ void Camera3Device::notifyError(const camera3_error_msg_t &msg,
                    InFlightRequest &r = mInFlightMap.editValueAt(idx);
                    r.requestStatus = msg.error_code;
                    resultExtras = r.resultExtras;
                    if (hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_RESULT == errorCode
                            ||  hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST ==
                            errorCode) {
                        r.skipResultMetadata = true;
                    }
                    if (hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_RESULT ==
                            errorCode) {
                        // In case of missing result check whether the buffers
+9 −2
Original line number Diff line number Diff line
@@ -885,6 +885,11 @@ class Camera3Device :
        // For auto-exposure modes, equal to 1/(lower end of target FPS range)
        nsecs_t maxExpectedDuration;

        // Whether the result metadata for this request is to be skipped. The
        // result metadata should be skipped in the case of
        // REQUEST/RESULT error.
        bool skipResultMetadata;

        // Default constructor needed by KeyedVector
        InFlightRequest() :
                shutterTimestamp(0),
@@ -894,7 +899,8 @@ class Camera3Device :
                numBuffersLeft(0),
                hasInputBuffer(false),
                hasCallback(true),
                maxExpectedDuration(kDefaultExpectedDuration) {
                maxExpectedDuration(kDefaultExpectedDuration),
                skipResultMetadata(false) {
        }

        InFlightRequest(int numBuffers, CaptureResultExtras extras, bool hasInput,
@@ -907,7 +913,8 @@ class Camera3Device :
                resultExtras(extras),
                hasInputBuffer(hasInput),
                hasCallback(hasAppCallback),
                maxExpectedDuration(maxDuration) {
                maxExpectedDuration(maxDuration),
                skipResultMetadata(false) {
        }
    };