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

Commit c6747867 authored by Emilian Peev's avatar Emilian Peev Committed by Zhijun He
Browse files

Camera: Collect result metadata in case of output buffer errors

Output buffer error notifications during result processing shouldn't
impact the metadata result. As per API contract the result is still
valid and we should wait for it to arrive.

Bug: 62485653
Test: Manual using application,
Complete Camera/Camera2 CTS.

Change-Id: I58de1b7c48d10e25a71a1ffb709e66e619a6bdcf
parent f4cd3b27
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -2360,6 +2360,25 @@ 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
@@ -2367,7 +2386,7 @@ void Camera3Device::removeInFlightRequestIfReadyLocked(int idx) {
    // In the case of a unsuccessful request:
    //      all input and output buffers arrived.
    if (request.numBuffersLeft == 0 &&
            (request.requestStatus != OK ||
            (skipResultMetadata ||
            (request.haveResultMetadata && shutterTimestamp != 0))) {
        ATRACE_ASYNC_END("frame capture", frameNumber);