[RFC,v1,50/54] android: camera_request: Add helper for buffer conversion
diff mbox series

Message ID 20260629163017.863145-51-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • libcamera: Split requests and buffers
Related show

Commit Message

Barnabás Pőcze June 29, 2026, 4:30 p.m. UTC
Add a function to the `StreamBuffer` type that creates an appropriate
`camera3_stream_buffer_t` for returning it to the camera framework.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 src/android/camera_device.cpp  | 18 ++----------------
 src/android/camera_request.cpp | 20 ++++++++++++++++++++
 src/android/camera_request.h   |  2 ++
 3 files changed, 24 insertions(+), 16 deletions(-)

Patch
diff mbox series

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 80ff248c2a..0d5b5b97eb 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1308,22 +1308,8 @@  void CameraDevice::sendCaptureResults()
 		std::vector<camera3_stream_buffer_t> resultBuffers;
 		resultBuffers.reserve(descriptor->buffers_.size());
 
-		for (auto &buffer : descriptor->buffers_) {
-			camera3_buffer_status status = CAMERA3_BUFFER_STATUS_ERROR;
-
-			if (buffer.status == Camera3RequestDescriptor::Status::Success)
-				status = CAMERA3_BUFFER_STATUS_OK;
-
-			/*
-			 * Pass the buffer fence back to the camera framework as
-			 * a release fence. This instructs the framework to wait
-			 * on the acquire fence in case we haven't done so
-			 * ourselves for any reason.
-			 */
-			resultBuffers.push_back({ buffer.stream->camera3Stream(),
-						  buffer.camera3Buffer, status,
-						  -1, buffer.fence.release() });
-		}
+		for (auto &buffer : descriptor->buffers_)
+			resultBuffers.push_back(buffer.prepareToReturn());
 
 		captureResult.num_output_buffers = resultBuffers.size();
 		captureResult.output_buffers = resultBuffers.data();
diff --git a/src/android/camera_request.cpp b/src/android/camera_request.cpp
index 0d45960d90..feac7a3e19 100644
--- a/src/android/camera_request.cpp
+++ b/src/android/camera_request.cpp
@@ -192,3 +192,23 @@  Camera3RequestDescriptor::StreamBuffer::StreamBuffer(StreamBuffer &&) = default;
 
 Camera3RequestDescriptor::StreamBuffer &
 Camera3RequestDescriptor::StreamBuffer::operator=(Camera3RequestDescriptor::StreamBuffer &&) = default;
+
+camera3_stream_buffer_t Camera3RequestDescriptor::StreamBuffer::prepareToReturn()
+{
+	/*
+	 * Pass the buffer fence back to the camera framework as
+	 * a release fence. This instructs the framework to wait
+	 * on the acquire fence in case we haven't done so
+	 * ourselves for any reason.
+	 */
+
+	return {
+		.stream = stream->camera3Stream(),
+		.buffer = camera3Buffer,
+		.status = status == Camera3RequestDescriptor::Status::Success
+				? CAMERA3_BUFFER_STATUS_OK
+				: CAMERA3_BUFFER_STATUS_ERROR,
+		.acquire_fence = -1,
+		.release_fence = fence.release(),
+	};
+}
diff --git a/src/android/camera_request.h b/src/android/camera_request.h
index 5b479180f0..164b095b28 100644
--- a/src/android/camera_request.h
+++ b/src/android/camera_request.h
@@ -43,6 +43,8 @@  public:
 		StreamBuffer(StreamBuffer &&);
 		StreamBuffer &operator=(StreamBuffer &&);
 
+		[[nodiscard]] camera3_stream_buffer_t prepareToReturn();
+
 		CameraStream *stream;
 		buffer_handle_t *camera3Buffer;
 		std::unique_ptr<HALFrameBuffer> frameBuffer;