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

Commit a5209c2e authored by Eino-Ville Talvala's avatar Eino-Ville Talvala Committed by Android (Google) Code Review
Browse files

Merge "Camera3: Improve resilience to stream failures" into klp-dev

parents aab5b08c 07d2169d
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1506,7 +1506,7 @@ void Camera3Device::processCaptureResult(const camera3_capture_result *result) {
        // Note: stream may be deallocated at this point, if this buffer was the
        // last reference to it.
        if (res != OK) {
            SET_ERR("Can't return buffer %d for frame %d to its stream: "
            ALOGE("Can't return buffer %d for frame %d to its stream: "
                    " %s (%d)", i, frameNumber, strerror(-res), res);
        }
    }
@@ -1867,7 +1867,7 @@ bool Camera3Device::RequestThread::threadLoop() {
        request.input_buffer = &inputBuffer;
        res = nextRequest->mInputStream->getInputBuffer(&inputBuffer);
        if (res != OK) {
            SET_ERR("RequestThread: Can't get input buffer, skipping request:"
            ALOGE("RequestThread: Can't get input buffer, skipping request:"
                    " %s (%d)", strerror(-res), res);
            cleanUpFailedRequest(request, nextRequest, outputBuffers);
            return true;
@@ -1883,7 +1883,7 @@ bool Camera3Device::RequestThread::threadLoop() {
        res = nextRequest->mOutputStreams.editItemAt(i)->
                getBuffer(&outputBuffers.editItemAt(i));
        if (res != OK) {
            SET_ERR("RequestThread: Can't get output buffer, skipping request:"
            ALOGE("RequestThread: Can't get output buffer, skipping request:"
                    " %s (%d)", strerror(-res), res);
            cleanUpFailedRequest(request, nextRequest, outputBuffers);
            return true;
+9 −9
Original line number Diff line number Diff line
@@ -214,19 +214,19 @@ status_t Camera3IOStreamBase::returnAnyBufferLocked(
    sp<Fence> releaseFence;
    res = returnBufferCheckedLocked(buffer, timestamp, output,
                                    &releaseFence);
    if (res != OK) {
        // NO_INIT means the buffer queue is abandoned, so to be resilient,
        // still want to decrement in-flight counts.
        if (res != NO_INIT) {
            return res;
        }
    }
    // Res may be an error, but we still want to decrement our owned count
    // to enable clean shutdown. So we'll just return the error but otherwise
    // carry on

    if (releaseFence != 0) {
        mCombinedFence = Fence::merge(mName, mCombinedFence, releaseFence);
    }

    mDequeuedBufferCount--;
    if (mDequeuedBufferCount == 0 && mState != STATE_IN_CONFIG &&
            mState != STATE_IN_RECONFIG) {
        ALOGV("%s: Stream %d: All buffers returned; now idle", __FUNCTION__,
                mId);
        sp<StatusTracker> statusTracker = mStatusTracker.promote();
        if (statusTracker != 0) {
            statusTracker->markComponentIdle(mStatusId, mCombinedFence);
@@ -239,7 +239,7 @@ status_t Camera3IOStreamBase::returnAnyBufferLocked(
        mLastTimestamp = timestamp;
    }

    return OK;
    return res;
}