summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorZhijun He <zhijunhe@google.com>2013-10-04 11:09:40 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-10-04 11:09:40 -0700
commit2efc2a5551dc8d48cc4fcec97b29e45eb38c6ee5 (patch)
treeaa94d290934ee08333e49695f36e6cc34c9402dc /services
parent5918e0cb64200f64632595f7aea6062c65d43353 (diff)
parent22077c5962dd2a435caa241cade297e2e3d8afc5 (diff)
downloadframeworks_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.cpp17
-rw-r--r--services/camera/libcameraservice/device3/Camera3Device.h2
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) {
}