Camera: Fix null pointer exception in onResultReceived
It's possible that a pending request is removed from
CaptureCallbackMap before its result is received.
In that case, the callback holder will be null. And we should
not dereference the null pointer.
A minor code cleanup is also made.
Test: Camera CTS
Bug: 295066682
Change-Id: I70b04ac4bb4bd4c5786677fd2117aa15eafafef6
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 181ab2c..994037b 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -1149,11 +1149,7 @@
"remove holder for requestId %d, "
+ "because lastFrame is %d.",
requestId, lastFrameNumber));
- }
- }
- if (holder != null) {
- if (DEBUG) {
Log.v(TAG, "immediately trigger onCaptureSequenceAborted because"
+ " request did not reach HAL");
}
@@ -2180,11 +2176,9 @@
final CaptureCallbackHolder holder =
CameraDeviceImpl.this.mCaptureCallbackMap.get(requestId);
- final CaptureRequest request = holder.getRequest(resultExtras.getSubsequenceId());
boolean isPartialResult =
(resultExtras.getPartialResultCount() < mTotalPartialCount);
- int requestType = request.getRequestType();
// Check if we have a callback for this
if (holder == null) {
@@ -2194,12 +2188,11 @@
+ frameNumber);
}
- updateTracker(requestId, frameNumber, requestType, /*result*/null,
- isPartialResult);
-
return;
}
+ final CaptureRequest request = holder.getRequest(resultExtras.getSubsequenceId());
+ int requestType = request.getRequestType();
if (isClosed()) {
if (DEBUG) {
Log.d(TAG,