diff options
author | Ruchit Sharma <ruchits@nvidia.com> | 2014-11-14 13:18:16 -0500 |
---|---|---|
committer | Zhijun He <zhijunhe@google.com> | 2014-11-25 01:47:05 +0000 |
commit | 31867b30d3144decd42de0214d8b71c45a2c8cc1 (patch) | |
tree | 1b08391b48c58e42a1d4a60a39b3d2af9ba3b30e /services/camera | |
parent | bc0f452b9a76dd8c8244e775bc9c5aa85cae3ddf (diff) | |
download | frameworks_av-31867b30d3144decd42de0214d8b71c45a2c8cc1.zip frameworks_av-31867b30d3144decd42de0214d8b71c45a2c8cc1.tar.gz frameworks_av-31867b30d3144decd42de0214d8b71c45a2c8cc1.tar.bz2 |
camera: fix frame deletion logic in mInFlightMap
For per-frame error notifications, camera3.h requirements state that all the
buffer handles for a failed frame capture must be returned via
process_capture_result() call(s). Hence, Camera3Device needs to ensure that
the frame entry is not deleted from mInFlightMap until all buffers for that
frame have been returned by HAL.
Bug: 17757940
Change-Id: I2579ca7980d2fd67d53abc530e2706538f7d3d3a
Diffstat (limited to 'services/camera')
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index 6a7f9e7..5281ea6 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -2028,8 +2028,12 @@ void Camera3Device::processCaptureResult(const camera3_capture_result *result) { // Check if everything has arrived for this result (buffers and metadata), remove it from // InFlightMap if both arrived or HAL reports error for this request (i.e. during flush). - if ((request.requestStatus != OK) || - (request.haveResultMetadata && request.numBuffersLeft == 0)) { + // For per-frame error notifications, camera3.h requirements state that all the + // buffer handles for a failed frame capture must be returned via process_capture_result() + // call(s). Hence, Camera3Device needs to ensure that the frame entry is not deleted from + // mInFlightMap until all buffers for that frame have been returned by HAL. + if ((request.numBuffersLeft == 0) && + ((request.requestStatus != OK) || (request.haveResultMetadata))) { ATRACE_ASYNC_END("frame capture", frameNumber); mInFlightMap.removeItemsAt(idx, 1); } |