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

Commit 3c76fa3e authored by Jianing Wei's avatar Jianing Wei
Browse files

CameraService: fix waitUntilIdle bug revealed by TestingCamera2.

* clear mStreamingRequestList in flush
* fix frame number checker in notify and processCaptureResult

Bug: 14166437
Change-Id: I022421080d05138f9068c1b9b85d83bd613b04fb
parent 77d4f613
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -497,6 +497,7 @@ status_t CameraDeviceClient::flush(int64_t* lastFrameNumber) {

    if (!mDevice.get()) return DEAD_OBJECT;

    mStreamingRequestList.clear();
    return mDevice->flush(lastFrameNumber);
}

+6 −4
Original line number Diff line number Diff line
@@ -1749,13 +1749,14 @@ void Camera3Device::processCaptureResult(const camera3_capture_result *result) {

        gotResult = true;

        if (frameNumber != mNextResultFrameNumber) {
        // TODO: need to track errors for tighter bounds on expected frame number
        if (frameNumber < mNextResultFrameNumber) {
            SET_ERR("Out-of-order capture result metadata submitted! "
                    "(got frame number %d, expecting %d)",
                    frameNumber, mNextResultFrameNumber);
            return;
        }
        mNextResultFrameNumber++;
        mNextResultFrameNumber = frameNumber + 1;

        CaptureResult captureResult;
        captureResult.mResultExtras = resultExtras;
@@ -1889,13 +1890,14 @@ void Camera3Device::notify(const camera3_notify_msg *msg) {
            // Verify ordering of shutter notifications
            {
                Mutex::Autolock l(mOutputLock);
                if (frameNumber != mNextShutterFrameNumber) {
                // TODO: need to track errors for tighter bounds on expected frame number.
                if (frameNumber < mNextShutterFrameNumber) {
                    SET_ERR("Shutter notification out-of-order. Expected "
                            "notification for frame %d, got frame %d",
                            mNextShutterFrameNumber, frameNumber);
                    break;
                }
                mNextShutterFrameNumber++;
                mNextShutterFrameNumber = frameNumber + 1;
            }

            CaptureResultExtras resultExtras;