[libcamera-devel] [PATCH v3] android: Camera3RequestDescriptor: Provide a constructor for StreamBuffer

Umang Jain umang.jain at ideasonboard.com
Thu Oct 28 19:02:54 CEST 2021


Provide a constructor for StreamBuffer and use that while populating
Camera3RequestDescriptor::buffers_ vector. Also provide the default
move-constructor (required as StreamBuffer is stored in a vector in
Camera3RequestDescriptor) and destructor for the StreamBuffer struct.

Also declare a default move assignment operator and disable the
copy constructor and move operator explicitly with
LIBCAMERA_DISABLE_COPY().

While at it, initialize pointers members in the StreamBuffer struct
to nullptr, with StreamBuffer::status set to Status::Success by default.

Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/android/camera_request.cpp | 19 ++++++++++++++++---
 src/android/camera_request.h   | 17 ++++++++++++++---
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/src/android/camera_request.cpp b/src/android/camera_request.cpp
index 5bac1b8f..8eced51d 100644
--- a/src/android/camera_request.cpp
+++ b/src/android/camera_request.cpp
@@ -37,9 +37,7 @@ Camera3RequestDescriptor::Camera3RequestDescriptor(
 		CameraStream *stream =
 			static_cast<CameraStream *>(buffer.stream->priv);
 
-		buffers_.push_back({ stream, buffer.buffer, nullptr,
-				     buffer.acquire_fence, Status::Success,
-				     nullptr, nullptr, nullptr, this });
+		buffers_.emplace_back(stream, buffer, this);
 	}
 
 	/* Clone the controls associated with the camera3 request. */
@@ -54,3 +52,18 @@ Camera3RequestDescriptor::Camera3RequestDescriptor(
 }
 
 Camera3RequestDescriptor::~Camera3RequestDescriptor() = default;
+
+Camera3RequestDescriptor::StreamBuffer::StreamBuffer(
+	CameraStream *stream, const camera3_stream_buffer_t &buffer,
+	Camera3RequestDescriptor *request)
+	: camera3Buffer(buffer.buffer), fence(buffer.acquire_fence),
+	  stream(stream), request(request)
+{
+}
+
+Camera3RequestDescriptor::StreamBuffer::~StreamBuffer() = default;
+
+Camera3RequestDescriptor::StreamBuffer::StreamBuffer(StreamBuffer &&other) = default;
+
+Camera3RequestDescriptor::StreamBuffer &
+Camera3RequestDescriptor::StreamBuffer::operator=(Camera3RequestDescriptor::StreamBuffer &&) = default;
diff --git a/src/android/camera_request.h b/src/android/camera_request.h
index cfafa445..d2935c99 100644
--- a/src/android/camera_request.h
+++ b/src/android/camera_request.h
@@ -34,15 +34,26 @@ public:
 	};
 
 	struct StreamBuffer {
+		StreamBuffer(CameraStream *stream,
+			     const camera3_stream_buffer_t &buffer,
+			     Camera3RequestDescriptor *request);
+		~StreamBuffer();
+
+		StreamBuffer(StreamBuffer &&other);
+		StreamBuffer &operator=(StreamBuffer &&);
+
 		CameraStream *stream;
 		buffer_handle_t *camera3Buffer;
 		std::unique_ptr<libcamera::FrameBuffer> frameBuffer;
 		int fence;
-		Status status;
-		libcamera::FrameBuffer *internalBuffer;
-		const libcamera::FrameBuffer *srcBuffer;
+		Status status = Status::Success;
+		libcamera::FrameBuffer *internalBuffer = nullptr;
+		const libcamera::FrameBuffer *srcBuffer = nullptr;
 		std::unique_ptr<CameraBuffer> dstBuffer;
 		Camera3RequestDescriptor *request;
+
+	private:
+		LIBCAMERA_DISABLE_COPY(StreamBuffer)
 	};
 
 	/* Keeps track of streams requiring post-processing. */
-- 
2.31.0



More information about the libcamera-devel mailing list