From 468dbb8d9ffb7e8c23a238c9cb8c912c1e5fc6e6 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Wed, 31 Jul 2019 11:35:33 -0700 Subject: [PATCH] Camera: Do not expect dropped physical camera metadata The HAL is allowed to notify RESULT_ERROR for physical sub-cameras. Fix the condition check to allow absent physical metadata in such case. Test: Partner testing and camera CTS Bug: 138727686 Change-Id: I411a64d6fec2e06bc60a82fade65a02caab0ceca --- services/camera/libcameraservice/device3/Camera3Device.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index 4227a3b9de..dd5a62bed2 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -3679,7 +3679,7 @@ void Camera3Device::processCaptureResult(const camera3_capture_result *result) { // Did we get the (final) result metadata for this capture? if (result->result != NULL && !isPartialResult) { if (request.physicalCameraIds.size() != result->num_physcam_metadata) { - SET_ERR("Requested physical Camera Ids %d not equal to number of metadata %d", + SET_ERR("Expected physical Camera metadata count %d not equal to actual count %d", request.physicalCameraIds.size(), result->num_physcam_metadata); return; } @@ -3873,12 +3873,14 @@ void Camera3Device::notifyError(const camera3_error_msg_t &msg, errorCode) { if (physicalCameraId.size() > 0) { String8 cameraId(physicalCameraId); - if (r.physicalCameraIds.find(cameraId) == r.physicalCameraIds.end()) { + auto iter = r.physicalCameraIds.find(cameraId); + if (iter == r.physicalCameraIds.end()) { ALOGE("%s: Reported result failure for physical camera device: %s " " which is not part of the respective request!", __FUNCTION__, cameraId.string()); break; } + r.physicalCameraIds.erase(iter); resultExtras.errorPhysicalCameraId = physicalCameraId; } else { logicalDeviceResultError = true;