summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvincechiu <vincechiu@google.com>2020-06-02 13:15:02 +0800
committerVince Chiu <vincechiu@google.com>2020-06-03 02:04:15 +0000
commit9e688c0d8a9143cc8782f772493ed95b51b31114 (patch)
tree68abd94c41b7238f28aac74c6dfb2b3d17d6f576
parent9aff439811bb7f74fd1f7e091f940ef8d0a9d035 (diff)
downloadcamera-9e688c0d8a9143cc8782f772493ed95b51b31114.tar.gz
camera: Erase pending result only when publish result to FWK
For dummy buffer case, it will lost metadata publish if output and metadata callback at the same time. Moving the pending result erase to make sure metadata publish successfully. Bug: 155597206 Bug: 157879027 Test: GCA, CTS Change-Id: I7f81ed62f8434590e3be3e1f49f3192ed3c42813
-rw-r--r--common/hal/google_camera_hal/camera_device_session.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/common/hal/google_camera_hal/camera_device_session.cc b/common/hal/google_camera_hal/camera_device_session.cc
index 75d024d..421f233 100644
--- a/common/hal/google_camera_hal/camera_device_session.cc
+++ b/common/hal/google_camera_hal/camera_device_session.cc
@@ -115,10 +115,6 @@ status_t CameraDeviceSession::UpdatePendingRequest(CaptureResult* result) {
return BAD_VALUE;
}
- if (result->result_metadata) {
- pending_results_.erase(result->frame_number);
- }
-
if (result->output_buffers.empty()) {
// Nothing to do if the result doesn't contain any output buffers.
return OK;
@@ -211,6 +207,11 @@ void CameraDeviceSession::ProcessCaptureResult(
buffers.insert(buffers.end(), result->output_buffers.begin(),
result->output_buffers.end());
+ if (result->result_metadata) {
+ std::lock_guard<std::mutex> lock(request_record_lock_);
+ pending_results_.erase(result->frame_number);
+ }
+
{
std::shared_lock lock(session_callback_lock_);
session_callback_.process_capture_result(std::move(result));