Merge "Camera: Handle RESULT_ERROR followed by BUFFER_ERROR" into oc-mr1-dev

gugelfrei
TreeHugger Robot 7 years ago committed by Android (Google) Code Review
commit 1041ecbbcc

@ -2439,25 +2439,6 @@ void Camera3Device::removeInFlightRequestIfReadyLocked(int idx) {
nsecs_t sensorTimestamp = request.sensorTimestamp;
nsecs_t shutterTimestamp = request.shutterTimestamp;
bool skipResultMetadata = false;
if (request.requestStatus != OK) {
switch (request.requestStatus) {
case CAMERA3_MSG_ERROR_DEVICE:
case CAMERA3_MSG_ERROR_REQUEST:
case CAMERA3_MSG_ERROR_RESULT:
skipResultMetadata = true;
break;
case CAMERA3_MSG_ERROR_BUFFER:
//Result metadata should return in this case.
skipResultMetadata = false;
break;
default:
SET_ERR("Unknown error message: %d", request.requestStatus);
skipResultMetadata = false;
break;
}
}
// Check if it's okay to remove the request from InFlightMap:
// In the case of a successful request:
// all input and output buffers, all result metadata, shutter callback
@ -2465,7 +2446,7 @@ void Camera3Device::removeInFlightRequestIfReadyLocked(int idx) {
// In the case of a unsuccessful request:
// all input and output buffers arrived.
if (request.numBuffersLeft == 0 &&
(skipResultMetadata ||
(request.skipResultMetadata ||
(request.haveResultMetadata && shutterTimestamp != 0))) {
ATRACE_ASYNC_END("frame capture", frameNumber);
@ -2941,6 +2922,11 @@ void Camera3Device::notifyError(const camera3_error_msg_t &msg,
InFlightRequest &r = mInFlightMap.editValueAt(idx);
r.requestStatus = msg.error_code;
resultExtras = r.resultExtras;
if (hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_RESULT == errorCode
|| hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST ==
errorCode) {
r.skipResultMetadata = true;
}
if (hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_RESULT ==
errorCode) {
// In case of missing result check whether the buffers

@ -885,6 +885,11 @@ class Camera3Device :
// For auto-exposure modes, equal to 1/(lower end of target FPS range)
nsecs_t maxExpectedDuration;
// Whether the result metadata for this request is to be skipped. The
// result metadata should be skipped in the case of
// REQUEST/RESULT error.
bool skipResultMetadata;
// Default constructor needed by KeyedVector
InFlightRequest() :
shutterTimestamp(0),
@ -894,7 +899,8 @@ class Camera3Device :
numBuffersLeft(0),
hasInputBuffer(false),
hasCallback(true),
maxExpectedDuration(kDefaultExpectedDuration) {
maxExpectedDuration(kDefaultExpectedDuration),
skipResultMetadata(false) {
}
InFlightRequest(int numBuffers, CaptureResultExtras extras, bool hasInput,
@ -907,7 +913,8 @@ class Camera3Device :
resultExtras(extras),
hasInputBuffer(hasInput),
hasCallback(hasAppCallback),
maxExpectedDuration(maxDuration) {
maxExpectedDuration(maxDuration),
skipResultMetadata(false) {
}
};

Loading…
Cancel
Save