Implement flushing and improve request tracking.
BUG: https://b/29937783, https://b/32941326
TEST: unit tests pass, fixes 8 failing cts tests
Change-Id: Idc390bdc1e51ba2bdbda91d90acc459a09a5f174
diff --git a/modules/camera/3_4/v4l2_camera.h b/modules/camera/3_4/v4l2_camera.h
index 29583b0..3dae649 100644
--- a/modules/camera/3_4/v4l2_camera.h
+++ b/modules/camera/3_4/v4l2_camera.h
@@ -21,6 +21,7 @@
#include <array>
#include <condition_variable>
+#include <map>
#include <queue>
#include <string>
@@ -80,6 +81,8 @@
// Enqueue a request to receive data from the camera.
int enqueueRequest(
std::shared_ptr<default_camera_hal::CaptureRequest> request) override;
+ // Flush in flight buffers.
+ int flushBuffers() override;
// Async request processing helpers.
// Dequeue a request from the waiting queue.
@@ -100,7 +103,9 @@
std::queue<std::shared_ptr<default_camera_hal::CaptureRequest>>
request_queue_;
std::mutex in_flight_lock_;
- std::queue<std::shared_ptr<default_camera_hal::CaptureRequest>> in_flight_;
+ // Maps buffer index : request.
+ std::map<uint32_t, std::shared_ptr<default_camera_hal::CaptureRequest>>
+ in_flight_;
// Threads require holding an Android strong pointer.
android::sp<android::Thread> buffer_enqueuer_;
android::sp<android::Thread> buffer_dequeuer_;