diff options
author | Zhijun He <zhijunhe@google.com> | 2013-10-04 11:09:40 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-10-04 11:09:40 -0700 |
commit | 2efc2a5551dc8d48cc4fcec97b29e45eb38c6ee5 (patch) | |
tree | aa94d290934ee08333e49695f36e6cc34c9402dc /services | |
parent | 5918e0cb64200f64632595f7aea6062c65d43353 (diff) | |
parent | 22077c5962dd2a435caa241cade297e2e3d8afc5 (diff) | |
download | frameworks_av-2efc2a5551dc8d48cc4fcec97b29e45eb38c6ee5.zip frameworks_av-2efc2a5551dc8d48cc4fcec97b29e45eb38c6ee5.tar.gz frameworks_av-2efc2a5551dc8d48cc4fcec97b29e45eb38c6ee5.tar.bz2 |
am 22077c59: am 19fffcbd: Merge "Camera3: track request status in inflight queue" into klp-dev
* commit '22077c5962dd2a435caa241cade297e2e3d8afc5':
Camera3: track request status in inflight queue
Diffstat (limited to 'services')
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.cpp | 17 | ||||
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.h | 2 |
2 files changed, 18 insertions, 1 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index ed6458c..1f853ab 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -1417,7 +1417,12 @@ void Camera3Device::processCaptureResult(const camera3_capture_result *result) { } InFlightRequest &request = mInFlightMap.editValueAt(idx); timestamp = request.captureTimestamp; - if (timestamp == 0) { + /** + * One of the following must happen before it's legal to call process_capture_result: + * - CAMERA3_MSG_SHUTTER (expected during normal operation) + * - CAMERA3_MSG_ERROR (expected during flush) + */ + if (request.requestStatus == OK && timestamp == 0) { SET_ERR("Called before shutter notify for frame %d", frameNumber); return; @@ -1541,6 +1546,16 @@ void Camera3Device::notify(const camera3_notify_msg *msg) { ALOGV("Camera %d: %s: HAL error, frame %d, stream %d: %d", mId, __FUNCTION__, msg->message.error.frame_number, streamId, msg->message.error.error_code); + + // Set request error status for the request in the in-flight tracking + { + Mutex::Autolock l(mInFlightLock); + ssize_t idx = mInFlightMap.indexOfKey(msg->message.error.frame_number); + if (idx >= 0) { + mInFlightMap.editValueAt(idx).requestStatus = msg->message.error.error_code; + } + } + if (listener != NULL) { listener->notifyError(msg->message.error.error_code, msg->message.error.frame_number, streamId); diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h index 6295c80..c2b0867 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.h +++ b/services/camera/libcameraservice/device3/Camera3Device.h @@ -438,6 +438,7 @@ class Camera3Device : int requestId; // Set by notify() SHUTTER call. nsecs_t captureTimestamp; + int requestStatus; // Set by process_capture_result call with valid metadata bool haveResultMetadata; // Decremented by calls to process_capture_result with valid output @@ -448,6 +449,7 @@ class Camera3Device : InFlightRequest() : requestId(0), captureTimestamp(0), + requestStatus(OK), haveResultMetadata(false), numBuffersLeft(0) { } |