Merge "Camera: Allow out of order ZSL shutter vs regular shutter" into qt-dev

gugelfrei
TreeHugger Robot 5 years ago committed by Android (Google) Code Review
commit 5f31276553

@ -77,8 +77,10 @@ Camera3Device::Camera3Device(const String8 &id):
mTimestampOffset(0),
mNextResultFrameNumber(0),
mNextReprocessResultFrameNumber(0),
mNextZslStillResultFrameNumber(0),
mNextShutterFrameNumber(0),
mNextReprocessShutterFrameNumber(0),
mNextZslStillShutterFrameNumber(0),
mListener(NULL),
mVendorTagId(CAMERA_METADATA_INVALID_VENDOR_ID),
mLastTemplateId(-1),
@ -3464,7 +3466,7 @@ void Camera3Device::sendCaptureResult(CameraMetadata &pendingMetadata,
CaptureResultExtras &resultExtras,
CameraMetadata &collectedPartialResult,
uint32_t frameNumber,
bool reprocess,
bool reprocess, bool zslStillCapture,
const std::vector<PhysicalCaptureResultInfo>& physicalMetadatas) {
ATRACE_CALL();
if (pendingMetadata.isEmpty())
@ -3481,6 +3483,14 @@ void Camera3Device::sendCaptureResult(CameraMetadata &pendingMetadata,
return;
}
mNextReprocessResultFrameNumber = frameNumber + 1;
} else if (zslStillCapture) {
if (frameNumber < mNextZslStillResultFrameNumber) {
SET_ERR("Out-of-order ZSL still capture result metadata submitted! "
"(got frame number %d, expecting %d)",
frameNumber, mNextZslStillResultFrameNumber);
return;
}
mNextZslStillResultFrameNumber = frameNumber + 1;
} else {
if (frameNumber < mNextResultFrameNumber) {
SET_ERR("Out-of-order capture result metadata submitted! "
@ -3741,7 +3751,8 @@ void Camera3Device::processCaptureResult(const camera3_capture_result *result) {
metadata = result->result;
sendCaptureResult(metadata, request.resultExtras,
collectedPartialResult, frameNumber,
hasInputBufferInRequest, request.physicalMetadatas);
hasInputBufferInRequest, request.zslCapture && request.stillCapture,
request.physicalMetadatas);
}
}
@ -3919,12 +3930,20 @@ void Camera3Device::notifyShutter(const camera3_shutter_msg_t &msg,
// TODO: need to track errors for tighter bounds on expected frame number.
if (r.hasInputBuffer) {
if (msg.frame_number < mNextReprocessShutterFrameNumber) {
SET_ERR("Shutter notification out-of-order. Expected "
SET_ERR("Reprocess shutter notification out-of-order. Expected "
"notification for frame %d, got frame %d",
mNextReprocessShutterFrameNumber, msg.frame_number);
return;
}
mNextReprocessShutterFrameNumber = msg.frame_number + 1;
} else if (r.zslCapture && r.stillCapture) {
if (msg.frame_number < mNextZslStillShutterFrameNumber) {
SET_ERR("ZSL still capture shutter notification out-of-order. Expected "
"notification for frame %d, got frame %d",
mNextZslStillShutterFrameNumber, msg.frame_number);
return;
}
mNextZslStillShutterFrameNumber = msg.frame_number + 1;
} else {
if (msg.frame_number < mNextShutterFrameNumber) {
SET_ERR("Shutter notification out-of-order. Expected "
@ -3948,7 +3967,8 @@ void Camera3Device::notifyShutter(const camera3_shutter_msg_t &msg,
// send pending result and buffers
sendCaptureResult(r.pendingMetadata, r.resultExtras,
r.collectedPartialResult, msg.frame_number,
r.hasInputBuffer, r.physicalMetadatas);
r.hasInputBuffer, r.zslCapture && r.stillCapture,
r.physicalMetadatas);
}
bool timestampIncreasing = !(r.zslCapture || r.hasInputBuffer);
returnOutputBuffers(r.pendingOutputBuffers.array(),

@ -1186,10 +1186,14 @@ class Camera3Device :
uint32_t mNextResultFrameNumber;
// the minimal frame number of the next reprocess result
uint32_t mNextReprocessResultFrameNumber;
// the minimal frame number of the next ZSL still capture result
uint32_t mNextZslStillResultFrameNumber;
// the minimal frame number of the next non-reprocess shutter
uint32_t mNextShutterFrameNumber;
// the minimal frame number of the next reprocess shutter
uint32_t mNextReprocessShutterFrameNumber;
// the minimal frame number of the next ZSL still capture shutter
uint32_t mNextZslStillShutterFrameNumber;
List<CaptureResult> mResultQueue;
Condition mResultSignal;
wp<NotificationListener> mListener;
@ -1226,7 +1230,8 @@ class Camera3Device :
void sendCaptureResult(CameraMetadata &pendingMetadata,
CaptureResultExtras &resultExtras,
CameraMetadata &collectedPartialResult, uint32_t frameNumber,
bool reprocess, const std::vector<PhysicalCaptureResultInfo>& physicalMetadatas);
bool reprocess, bool zslStillCapture,
const std::vector<PhysicalCaptureResultInfo>& physicalMetadatas);
bool isLastFullResult(const InFlightRequest& inFlightRequest);

Loading…
Cancel
Save