From c753223ad6b90550fae31aedd79fbedc13da2e75 Mon Sep 17 00:00:00 2001 From: Paul Elder Date: Wed, 23 Sep 2020 19:05:41 +0900 Subject: libcamera, android, cam, gstreamer, qcam, v4l2: Reuse Request MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allow reuse of the Request object by implementing reuse(). This means the applications now have the responsibility of freeing the Request objects, so make all libcamera users (cam, qcam, v4l2-compat, gstreamer, android) do so. Signed-off-by: Paul Elder Reviewed-by: Laurent Pinchart Reviewed-by: Niklas Söderlund Reviewed-by: Jacopo Mondi --- include/libcamera/camera.h | 2 +- include/libcamera/request.h | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h index a2ee4e7e..79ff8d6b 100644 --- a/include/libcamera/camera.h +++ b/include/libcamera/camera.h @@ -96,7 +96,7 @@ public: std::unique_ptr generateConfiguration(const StreamRoles &roles = {}); int configure(CameraConfiguration *config); - Request *createRequest(uint64_t cookie = 0); + std::unique_ptr createRequest(uint64_t cookie = 0); int queueRequest(Request *request); int start(); diff --git a/include/libcamera/request.h b/include/libcamera/request.h index 5976ac50..655b1324 100644 --- a/include/libcamera/request.h +++ b/include/libcamera/request.h @@ -31,6 +31,11 @@ public: RequestCancelled, }; + enum ReuseFlag { + Default = 0, + ReuseBuffers = (1 << 0), + }; + using BufferMap = std::map; Request(Camera *camera, uint64_t cookie = 0); @@ -38,6 +43,8 @@ public: Request &operator=(const Request &) = delete; ~Request(); + void reuse(ReuseFlag flags = Default); + ControlList &controls() { return *controls_; } ControlList &metadata() { return *metadata_; } const BufferMap &buffers() const { return bufferMap_; } -- cgit v1.2.1