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

This commit is contained in:
TreeHugger Robot
2019-09-14 07:46:58 +00:00
committed by Android (Google) Code Review

View File

@@ -1026,6 +1026,9 @@ public class CameraDeviceImpl extends CameraDevice
// callback is valid // callback is valid
executor = checkExecutor(executor, callback); executor = checkExecutor(executor, callback);
synchronized(mInterfaceLock) {
checkIfCameraClosedOrInError();
// Make sure that there all requests have at least 1 surface; all surfaces are non-null; // 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 // the surface isn't a physical stream surface for reprocessing request
for (CaptureRequest request : requestList) { for (CaptureRequest request : requestList) {
@@ -1052,8 +1055,6 @@ public class CameraDeviceImpl extends CameraDevice
} }
} }
synchronized(mInterfaceLock) {
checkIfCameraClosedOrInError();
if (repeating) { if (repeating) {
stopRepeating(); stopRepeating();
} }
@@ -2343,14 +2344,21 @@ public class CameraDeviceImpl extends CameraDevice
if (errorCode == ERROR_CAMERA_BUFFER) { if (errorCode == ERROR_CAMERA_BUFFER) {
// Because 1 stream id could map to multiple surfaces, we need to specify both // Because 1 stream id could map to multiple surfaces, we need to specify both
// streamId and surfaceId. // streamId and surfaceId.
List<Surface> surfaces = OutputConfiguration config = mConfiguredOutputs.get(
mConfiguredOutputs.get(resultExtras.getErrorStreamId()).getSurfaces(); resultExtras.getErrorStreamId());
for (Surface surface : surfaces) { 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)) { if (!request.containsTarget(surface)) {
continue; continue;
} }
if (DEBUG) { 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)); frameNumber, surface));
} }
failureDispatch = new Runnable() { failureDispatch = new Runnable() {