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

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

Merge "Camera: Drain attached and queued input buffers during reconfiguration"

parents 61d4a093 0cf01cbc
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -2802,6 +2802,27 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode,
        mOperatingMode = operatingMode;
    }

    // In case called from configureStreams, abort queued input buffers not belonging to
    // any pending requests.
    if (mInputStream != NULL && notifyRequestThread) {
        while (true) {
            camera3_stream_buffer_t inputBuffer;
            status_t res = mInputStream->getInputBuffer(&inputBuffer,
                    /*respectHalLimit*/ false);
            if (res != OK) {
                // Exhausted acquiring all input buffers.
                break;
            }

            inputBuffer.status = CAMERA3_BUFFER_STATUS_ERROR;
            res = mInputStream->returnInputBuffer(inputBuffer);
            if (res != OK) {
                ALOGE("%s: %d: couldn't return input buffer while clearing input queue: "
                        "%s (%d)", __FUNCTION__, __LINE__, strerror(-res), res);
            }
        }
    }

    if (!mNeedConfig) {
        ALOGV("%s: Skipping config, no stream changes", __FUNCTION__);
        return OK;
@@ -5084,6 +5105,7 @@ status_t Camera3Device::RequestThread::clear(
                    ALOGW("%s: %d: couldn't get input buffer while clearing the request "
                            "list: %s (%d)", __FUNCTION__, __LINE__, strerror(-res), res);
                } else {
                    inputBuffer.status = CAMERA3_BUFFER_STATUS_ERROR;
                    res = (*it)->mInputStream->returnInputBuffer(inputBuffer);
                    if (res != OK) {
                        ALOGE("%s: %d: couldn't return input buffer while clearing the request "
+2 −1
Original line number Diff line number Diff line
@@ -71,7 +71,8 @@ status_t Camera3InputStream::getInputBufferLocked(

    res = mConsumer->acquireBuffer(&bufferItem, /*waitForFence*/false);
    if (res != OK) {
        ALOGE("%s: Stream %d: Can't acquire next output buffer: %s (%d)",
        // This may or may not be an error condition depending on caller.
        ALOGV("%s: Stream %d: Can't acquire next output buffer: %s (%d)",
                __FUNCTION__, mId, strerror(-res), res);
        return res;
    }