diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp index 975fb01347..5f89cde972 100644 --- a/camera/device/3.2/default/CameraDeviceSession.cpp +++ b/camera/device/3.2/default/CameraDeviceSession.cpp @@ -1198,7 +1198,7 @@ Return CameraDeviceSession::close() { return Void(); } -void CameraDeviceSession::constructCaptureResult(CaptureResult& result, +status_t CameraDeviceSession::constructCaptureResult(CaptureResult& result, const camera3_capture_result *hal_result) { uint32_t frameNumber = hal_result->frame_number; bool hasInputBuf = (hal_result->input_buffer != nullptr); @@ -1213,7 +1213,7 @@ void CameraDeviceSession::constructCaptureResult(CaptureResult& result, if (mInflightBuffers.count(key) != 1) { ALOGE("%s: input buffer for stream %d frame %d is not inflight!", __FUNCTION__, streamId, frameNumber); - return; + return -EINVAL; } } @@ -1224,7 +1224,7 @@ void CameraDeviceSession::constructCaptureResult(CaptureResult& result, if (mInflightBuffers.count(key) != 1) { ALOGE("%s: output buffer for stream %d frame %d is not inflight!", __FUNCTION__, streamId, frameNumber); - return; + return -EINVAL; } } } @@ -1344,7 +1344,7 @@ void CameraDeviceSession::constructCaptureResult(CaptureResult& result, ALOGV("%s: inflight buffer queue is now empty!", __FUNCTION__); } } - + return OK; } /** @@ -1356,10 +1356,11 @@ void CameraDeviceSession::sProcessCaptureResult( CameraDeviceSession *d = const_cast(static_cast(cb)); - CaptureResult result; - d->constructCaptureResult(result, hal_result); - - d->mResultBatcher.processCaptureResult(result); + CaptureResult result = {}; + status_t ret = d->constructCaptureResult(result, hal_result); + if (ret == OK) { + d->mResultBatcher.processCaptureResult(result); + } } void CameraDeviceSession::sNotify( diff --git a/camera/device/3.2/default/CameraDeviceSession.h b/camera/device/3.2/default/CameraDeviceSession.h index 61db67106b..269cc06f1b 100644 --- a/camera/device/3.2/default/CameraDeviceSession.h +++ b/camera/device/3.2/default/CameraDeviceSession.h @@ -327,7 +327,7 @@ protected: static callbacks_process_capture_result_t sProcessCaptureResult; static callbacks_notify_t sNotify; - void constructCaptureResult(CaptureResult& result, + status_t constructCaptureResult(CaptureResult& result, const camera3_capture_result *hal_result); private: diff --git a/camera/device/3.4/default/CameraDeviceSession.cpp b/camera/device/3.4/default/CameraDeviceSession.cpp index b032357676..ad7f6f515e 100644 --- a/camera/device/3.4/default/CameraDeviceSession.cpp +++ b/camera/device/3.4/default/CameraDeviceSession.cpp @@ -450,8 +450,12 @@ void CameraDeviceSession::sProcessCaptureResult_3_4( CameraDeviceSession *d = const_cast(static_cast(cb)); - CaptureResult result; - d->constructCaptureResult(result.v3_2, hal_result); + CaptureResult result = {}; + status_t ret = d->constructCaptureResult(result.v3_2, hal_result); + if (ret != OK) { + return; + } + result.physicalCameraMetadata.resize(hal_result->num_physcam_metadata); for (uint32_t i = 0; i < hal_result->num_physcam_metadata; i++) { std::string physicalId = hal_result->physcam_ids[i];