Camera: Add lastCompletedFrameNumber in CaptureResultExtras
The new fields in CaptureResultExtras notify the application the last
completed frame numbers. A frame number is completed if:
- All buffers are returned
- Final capture result is returned, or CAPTURE_ERROR is called,
- For buffers that are cancelled, all notifyError() is called.
This makes sure client doesn't ignore BUFFER_ERROR after capture
result metadata callback.
Public API and NDK logic are fixed. VNDK is yet to be done.
Test: Camera CTS
Bug: 155353799
Change-Id: I43f0f5ea18a670dfa00872ebc581567e2df76ad4
diff --git a/services/camera/libcameraservice/device3/InFlightRequest.h b/services/camera/libcameraservice/device3/InFlightRequest.h
index 424043b..3cb8324 100644
--- a/services/camera/libcameraservice/device3/InFlightRequest.h
+++ b/services/camera/libcameraservice/device3/InFlightRequest.h
@@ -43,6 +43,19 @@
// Decremented by calls to process_capture_result with valid output
// and input buffers
int numBuffersLeft;
+ // Total number of output buffers for this request
+ int numOutputBuffers;
+
+ // The inflight request is considered complete if all buffers are returned
+ // and numErrorBuffersReturned == numErrorBuffersNotified.
+
+ // The number of buffers returned with STATUS_ERROR;
+ int numErrorBuffersReturned;
+ // The number of buffers that are notified as error:
+ // +1 for each notifyError(ERROR_BUFFER), and
+ // +numOutputBuffers for notifyError(ERROR_REQUEST)
+ int numErrorBuffersNotified;
+
CaptureResultExtras resultExtras;
// If this request has any input buffer
bool hasInputBuffer;
@@ -110,6 +123,9 @@
requestStatus(OK),
haveResultMetadata(false),
numBuffersLeft(0),
+ numOutputBuffers(0),
+ numErrorBuffersReturned(0),
+ numErrorBuffersNotified(0),
hasInputBuffer(false),
hasCallback(true),
maxExpectedDuration(kDefaultExpectedDuration),
@@ -129,6 +145,9 @@
requestStatus(OK),
haveResultMetadata(false),
numBuffersLeft(numBuffers),
+ numOutputBuffers(hasInput ? numBuffers-1 : numBuffers),
+ numErrorBuffersReturned(0),
+ numErrorBuffersNotified(0),
resultExtras(extras),
hasInputBuffer(hasInput),
hasCallback(hasAppCallback),