Camera3: only return input buffer when it is sent in request
This is to WAR the case where HAL sends non-NULL input_buffer in capture
result even capture framework doesn't send input buffer in the request.
It's very likely the input_buffer is uninitialized, and we shouldn't
use it. Log a warning for such case as well.
Bug: 16115675
Bug: 16117312
Change-Id: Ib299b45fbfe084059a9f546ded239c8094b039e2
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index d7545d0..ea958b7 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -504,6 +504,8 @@
// and input buffers
int numBuffersLeft;
CaptureResultExtras resultExtras;
+ // If this request has any input buffer
+ bool hasInputBuffer;
// Fields used by the partial result quirk only
struct PartialResultQuirkInFlight {
@@ -522,14 +524,16 @@
captureTimestamp(0),
requestStatus(OK),
haveResultMetadata(false),
- numBuffersLeft(0) {
+ numBuffersLeft(0),
+ hasInputBuffer(false){
}
InFlightRequest(int numBuffers) :
captureTimestamp(0),
requestStatus(OK),
haveResultMetadata(false),
- numBuffersLeft(numBuffers) {
+ numBuffersLeft(numBuffers),
+ hasInputBuffer(false){
}
InFlightRequest(int numBuffers, CaptureResultExtras extras) :
@@ -537,9 +541,19 @@
requestStatus(OK),
haveResultMetadata(false),
numBuffersLeft(numBuffers),
- resultExtras(extras) {
+ resultExtras(extras),
+ hasInputBuffer(false){
}
- };
+
+ InFlightRequest(int numBuffers, CaptureResultExtras extras, bool hasInput) :
+ captureTimestamp(0),
+ requestStatus(OK),
+ haveResultMetadata(false),
+ numBuffersLeft(numBuffers),
+ resultExtras(extras),
+ hasInputBuffer(hasInput){
+ }
+};
// Map from frame number to the in-flight request state
typedef KeyedVector<uint32_t, InFlightRequest> InFlightMap;
@@ -547,7 +561,7 @@
InFlightMap mInFlightMap;
status_t registerInFlight(uint32_t frameNumber,
- int32_t numBuffers, CaptureResultExtras resultExtras);
+ int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput);
/**
* For the partial result quirk, check if all 3A state fields are available