Camera: Don't update frameNumberTracker for physical camera result error

In case of physical camera result error, the corresponding frameNumber shouldn't
be removed from the tracker because the totalCaptureResult is still
be pending.

Test: vendor testing, Camera CTS
Bug: 279612822
Change-Id: I69aca02245f86c62bf14017b3d8788485e783cac
This commit is contained in:
Shuzhen Wang
2023-04-25 10:49:24 -07:00
parent 63d3be161a
commit a4adaecace
2 changed files with 17 additions and 9 deletions

View File

@@ -1397,6 +1397,11 @@ public abstract class CameraCaptureSession implements AutoCloseable {
* the capture may have been pushed to their respective output
* streams.</p>
*
* <p>If a logical multi-camera fails to generate capture result for one of
* its physical cameras, this method will be called with a {@link CaptureFailure}
* for that physical camera. In such cases, as long as the logical camera capture
* result is valid, {@link #onCaptureCompleted} will still be called.</p>
*
* <p>The default implementation of this method does nothing.</p>
*
* @param session

View File

@@ -1908,18 +1908,21 @@ public class CameraDeviceImpl extends CameraDevice
Log.v(TAG, String.format("got error frame %d", frameNumber));
}
// Update FrameNumberTracker for every frame during HFR mode.
if (mBatchOutputMap.containsKey(requestId)) {
for (int i = 0; i < mBatchOutputMap.get(requestId); i++) {
mFrameNumberTracker.updateTracker(frameNumber - (subsequenceId - i),
// Do not update frame number tracker for physical camera result error.
if (errorPhysicalCameraId == null) {
// Update FrameNumberTracker for every frame during HFR mode.
if (mBatchOutputMap.containsKey(requestId)) {
for (int i = 0; i < mBatchOutputMap.get(requestId); i++) {
mFrameNumberTracker.updateTracker(frameNumber - (subsequenceId - i),
/*error*/true, request.getRequestType());
}
} else {
mFrameNumberTracker.updateTracker(frameNumber,
/*error*/true, request.getRequestType());
}
} else {
mFrameNumberTracker.updateTracker(frameNumber,
/*error*/true, request.getRequestType());
}
checkAndFireSequenceComplete();
checkAndFireSequenceComplete();
}
// Dispatch the failure callback
final long ident = Binder.clearCallingIdentity();