Camera: add batching support for HFR
Test: GCA slow motion recording workin
Bug: 34899394
Change-Id: Icf56458d3fa6f0b4a6b8cfffe6a61da0626e81ec
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index c10b1b4..d873b27 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -241,6 +241,9 @@
// Reset this HalInterface object (does not call close())
void clear();
+ // Check if HalInterface support sending requests in batch
+ bool supportBatchRequest();
+
// Calls into the HAL interface
// Caller takes ownership of requestTemplate
@@ -248,6 +251,9 @@
/*out*/ camera_metadata_t **requestTemplate);
status_t configureStreams(/*inout*/ camera3_stream_configuration *config);
status_t processCaptureRequest(camera3_capture_request_t *request);
+ status_t processBatchCaptureRequests(
+ std::vector<camera3_capture_request_t*>& requests,
+ /*out*/uint32_t* numRequestProcessed);
status_t flush();
status_t dump(int fd);
status_t close();
@@ -262,6 +268,12 @@
std::mutex mInflightLock;
+ // The output HIDL request still depends on input camera3_capture_request_t
+ // Do not free input camera3_capture_request_t before output HIDL request
+ void wrapAsHidlRequest(camera3_capture_request_t* in,
+ /*out*/hardware::camera::device::V3_2::CaptureRequest* out,
+ /*out*/std::vector<native_handle_t*>* handlesCreated);
+
status_t pushInflightBufferLocked(int32_t frameNumber, int32_t streamId,
buffer_handle_t *buffer, int acquireFence);
// Cache of buffer handles keyed off (frameNumber << 32 | streamId)
@@ -438,9 +450,17 @@
*/
hardware::Return<void> processCaptureResult(
- const hardware::camera::device::V3_2::CaptureResult& result) override;
+ const hardware::hidl_vec<
+ hardware::camera::device::V3_2::CaptureResult>& results) override;
hardware::Return<void> notify(
- const hardware::camera::device::V3_2::NotifyMsg& msg) override;
+ const hardware::hidl_vec<
+ hardware::camera::device::V3_2::NotifyMsg>& msgs) override;
+
+ // Handle one capture result
+ void processOneCaptureResult(
+ const hardware::camera::device::V3_2::CaptureResult& results);
+ // Handle one notify message
+ void notify(const hardware::camera::device::V3_2::NotifyMsg& msg);
/**
* Common initialization code shared by both HAL paths
@@ -759,6 +779,12 @@
// Clear repeating requests. Must be called with mRequestLock held.
status_t clearRepeatingRequestsLocked(/*out*/ int64_t *lastFrameNumber = NULL);
+ // send request in mNextRequests to HAL one by one. Return true = sucssess
+ bool sendRequestsOneByOne();
+
+ // send request in mNextRequests to HAL in a batch. Return true = sucssess
+ bool sendRequestsBatch();
+
wp<Camera3Device> mParent;
wp<camera3::StatusTracker> mStatusTracker;
HalInterface* mInterface;