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

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

Merge "Camera: fix NPE in buffer error callback" into qt-qpr1-dev

parents c1d0b9cc 3b93a85b
Loading
Loading
Loading
Loading
+32 −24
Original line number Diff line number Diff line
@@ -1026,6 +1026,9 @@ public class CameraDeviceImpl extends CameraDevice
        // callback is valid
        executor = checkExecutor(executor, callback);

        synchronized(mInterfaceLock) {
            checkIfCameraClosedOrInError();

            // Make sure that there all requests have at least 1 surface; all surfaces are non-null;
            // the surface isn't a physical stream surface for reprocessing request
            for (CaptureRequest request : requestList) {
@@ -1052,8 +1055,6 @@ public class CameraDeviceImpl extends CameraDevice
                }
            }

        synchronized(mInterfaceLock) {
            checkIfCameraClosedOrInError();
            if (repeating) {
                stopRepeating();
            }
@@ -2343,14 +2344,21 @@ public class CameraDeviceImpl extends CameraDevice
            if (errorCode == ERROR_CAMERA_BUFFER) {
                // Because 1 stream id could map to multiple surfaces, we need to specify both
                // streamId and surfaceId.
                List<Surface> surfaces =
                        mConfiguredOutputs.get(resultExtras.getErrorStreamId()).getSurfaces();
                for (Surface surface : surfaces) {
                OutputConfiguration config = mConfiguredOutputs.get(
                        resultExtras.getErrorStreamId());
                if (config == null) {
                    Log.v(TAG, String.format(
                            "Stream %d has been removed. Skipping buffer lost callback",
                            resultExtras.getErrorStreamId()));
                    return;
                }
                for (Surface surface : config.getSurfaces()) {
                    if (!request.containsTarget(surface)) {
                        continue;
                    }
                    if (DEBUG) {
                        Log.v(TAG, String.format("Lost output buffer reported for frame %d, target %s",
                        Log.v(TAG, String.format(
                                "Lost output buffer reported for frame %d, target %s",
                                frameNumber, surface));
                    }
                    failureDispatch = new Runnable() {