Camera: Handle physical camera metadata tracking for multi-res output
The Inflight metadata tracking needs to be modified to handle
multi-resolution output stream. Because the HAL gets to decide which
physical camera outputs the image, the physical result metadata may
originate from a different physical camera.
The status tracker is fine because the tracking starts when buffer is
dequeued from the stream.
Bug: 156254356
Test: Camera CTS
Change-Id: I9487ae4df1b4f37ab41771ce90ad8b71239eb105
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index 018dbe5..855d2e3 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -497,6 +497,8 @@
sp<camera3::Camera3Stream> mInputStream;
bool mIsInputStreamMultiResolution;
SessionStatsBuilder mSessionStatsBuilder;
+ // Map from stream group ID to physical cameras backing the stream group
+ std::map<int32_t, std::set<String8>> mGroupIdPhysicalCameraMap;
int mNextStreamId;
bool mNeedConfig;
@@ -800,7 +802,8 @@
* Call after stream (re)-configuration is completed.
*/
void configurationComplete(bool isConstrainedHighSpeed,
- const CameraMetadata& sessionParams);
+ const CameraMetadata& sessionParams,
+ const std::map<int32_t, std::set<String8>>& groupIdPhysicalCameraMap);
/**
* Set or clear the list of repeating requests. Does not block
@@ -1057,6 +1060,8 @@
Vector<int32_t> mSessionParamKeys;
CameraMetadata mLatestSessionParams;
+ std::map<int32_t, std::set<String8>> mGroupIdPhysicalCameraMap;
+
const bool mUseHalBufManager;
};
sp<RequestThread> mRequestThread;
@@ -1076,7 +1081,8 @@
status_t registerInFlight(uint32_t frameNumber,
int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput,
- bool callback, nsecs_t maxExpectedDuration, std::set<String8>& physicalCameraIds,
+ bool callback, nsecs_t maxExpectedDuration,
+ const std::set<std::set<String8>>& physicalCameraIds,
bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto,
const std::set<std::string>& cameraIdsWithZoom, const SurfaceMap& outputSurfaces,
nsecs_t requestTimeNs);