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

Commit 31867b30 authored by Ruchit Sharma's avatar Ruchit Sharma Committed by Zhijun He
Browse files

camera: fix frame deletion logic in mInFlightMap

For per-frame error notifications, camera3.h requirements state that all the
buffer handles for a failed frame capture must be returned via
process_capture_result() call(s). Hence, Camera3Device needs to ensure that
the frame entry is not deleted from mInFlightMap until all buffers for that
frame have been returned by HAL.

Bug: 17757940

Change-Id: I2579ca7980d2fd67d53abc530e2706538f7d3d3a
parent bc0f452b
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -2028,8 +2028,12 @@ void Camera3Device::processCaptureResult(const camera3_capture_result *result) {

        // Check if everything has arrived for this result (buffers and metadata), remove it from
        // InFlightMap if both arrived or HAL reports error for this request (i.e. during flush).
        if ((request.requestStatus != OK) ||
                (request.haveResultMetadata && request.numBuffersLeft == 0)) {
        // For per-frame error notifications, camera3.h requirements state that all the
        // buffer handles for a failed frame capture must be returned via process_capture_result()
        // call(s). Hence, Camera3Device needs to ensure that the frame entry is not deleted from
        // mInFlightMap until all buffers for that frame have been returned by HAL.
        if ((request.numBuffersLeft == 0) &&
            ((request.requestStatus != OK) || (request.haveResultMetadata))) {
            ATRACE_ASYNC_END("frame capture", frameNumber);
            mInFlightMap.removeItemsAt(idx, 1);
        }