[PATCH v3 5/7] android: Drop notify CAMERA3_MSG_ERROR_REQUEST when a request fails
Harvey Yang
chenghaoyang at chromium.org
Wed Dec 4 17:36:30 CET 2024
According to Android Camera API v3.2, CAMERA3_MSG_ERROR_REQUEST is used
for requests that have not done any processing. When a request is
completed with failure, CAMERA3_MSG_ERROR_RESULT should be used instead.
To avoid code duplication, when CameraMetadata cannot be generated,
CAMERA3_MSG_ERROR_RESULT is notified after process_capture_result.
Signed-off-by: Han-Lin Chen <hanlinchen at chromium.org>
Co-developed-by: Harvey Yang <chenghaoyang at chromium.org>
Signed-off-by: Harvey Yang <chenghaoyang at chromium.org>
---
src/android/camera_device.cpp | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 497d363d6..dd2c603e0 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1211,10 +1211,7 @@ void CameraDevice::requestComplete(Request *request)
<< " not successfully completed: "
<< request->status();
- abortRequest(descriptor);
- completeDescriptor(descriptor);
-
- return;
+ descriptor->status_ = Camera3RequestDescriptor::Status::Error;
}
/*
@@ -1239,7 +1236,7 @@ void CameraDevice::requestComplete(Request *request)
*/
descriptor->resultMetadata_ = getResultMetadata(*descriptor);
if (!descriptor->resultMetadata_) {
- notifyError(descriptor->frameNumber_, nullptr, CAMERA3_MSG_ERROR_RESULT);
+ descriptor->status_ = Camera3RequestDescriptor::Status::Error;
/*
* The camera framework expects an empty metadata pack on error.
@@ -1325,6 +1322,16 @@ void CameraDevice::sendCaptureResults()
descriptors_.pop();
sendCaptureResult(descriptor.get());
+
+ /*
+ * Call notify with CAMERA3_MSG_ERROR_RESULT to indicate some
+ * of the expected result metadata might not be available
+ * because the capture is cancelled by the camera. Only notify
+ * it when the final result is sent, since Android will ignore
+ * the following metadata.
+ */
+ if (descriptor->status_ == Camera3RequestDescriptor::Status::Error)
+ notifyError(descriptor->frameNumber_, nullptr, CAMERA3_MSG_ERROR_RESULT);
}
}
--
2.47.0.338.g60cca15819-goog
More information about the libcamera-devel
mailing list