From patchwork Mon Jun 29 16:30:13 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 27130 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id BFE88C3304 for ; Mon, 29 Jun 2026 16:31:42 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5588A65FDC; Mon, 29 Jun 2026 18:31:42 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="XQtUNXS3"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9E15065F74 for ; Mon, 29 Jun 2026 18:30:33 +0200 (CEST) Received: from pb-laptop.local (185.221.140.128.nat.pool.zt.hu [185.221.140.128]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 78676E91 for ; Mon, 29 Jun 2026 18:29:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1782750590; bh=/PVXLgJoEYbBeWCuVc9dohFWysXp3d0BxILsrqxmbQc=; h=From:To:Subject:Date:In-Reply-To:References:From; b=XQtUNXS3AppT2k4qGgIIv3yJ37OxGsyV81ok87QXSGFKzUXPHUeaZd+ntnlO/UWCj FU2HzQRQFIjMe7zQwqmx74QTRHknYSB9lMK94Fy8ZPFTXl7HVoqUHzY5A2/Sr4Fi0b hx56xEw3W+J+lfpYZ+LOkv7l5IUNBfeFnjsUEw4s= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [RFC PATCH v1 50/54] android: camera_request: Add helper for buffer conversion Date: Mon, 29 Jun 2026 18:30:13 +0200 Message-ID: <20260629163017.863145-51-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260629163017.863145-1-barnabas.pocze@ideasonboard.com> References: <20260629163017.863145-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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 --- 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(-) 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 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 frameBuffer;