diff options
author | vincechiu <vincechiu@google.com> | 2020-06-02 13:15:02 +0800 |
---|---|---|
committer | Vince Chiu <vincechiu@google.com> | 2020-06-03 02:04:15 +0000 |
commit | 9e688c0d8a9143cc8782f772493ed95b51b31114 (patch) | |
tree | 68abd94c41b7238f28aac74c6dfb2b3d17d6f576 | |
parent | 9aff439811bb7f74fd1f7e091f940ef8d0a9d035 (diff) | |
download | camera-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.cc | 9 |
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)); |