From patchwork Fri Aug 15 11:33:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 24135 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 F37E4BEFBE for ; Fri, 15 Aug 2025 11:34:37 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B1EF86925D; Fri, 15 Aug 2025 13:34:37 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="bEFX2zPp"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 71D8169251 for ; Fri, 15 Aug 2025 13:34:28 +0200 (CEST) Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 70E1C63B; Fri, 15 Aug 2025 13:33:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1755257613; bh=yZc1jB0bY0Wa6dNl9pZAzm5dpSoIOCPGERzEMBhYw4Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bEFX2zPpByIgHxY1rEEyPuQeTavjJgrfbLJAZM3BUgYxA5rRdeGPXi46Sya5PA7by gDf9kd3Y+CWnayN8o9J6SDeZublCfncYmsAMsqD8kpJhptvMTY16NecPCIBboL4aMT NF4kfmVAns5sCnwM1xqK2kplT0xP0oPUPq7HWLBY= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Cc: =?utf-8?q?Daniel_R=C3=A1kos?= Subject: [PATCH v2 5/8] pipelines: Use lambda functions to factor out buffer mapping code Date: Fri, 15 Aug 2025 14:33:57 +0300 Message-ID: <20250815113400.20623-6-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.49.1 In-Reply-To: <20250815113400.20623-1-laurent.pinchart@ideasonboard.com> References: <20250815113400.20623-1-laurent.pinchart@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" Multiple pipeline handlers duplicate code related to mapping params and stats buffers to IPA modules. Factor out the code to lambda functions to share it between the two buffer types. Signed-off-by: Laurent Pinchart --- src/libcamera/pipeline/ipu3/ipu3.cpp | 16 +++++++------ src/libcamera/pipeline/mali-c55/mali-c55.cpp | 24 ++++++++++---------- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 22 +++++++++--------- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index ad20810e6a26..7ae85e5063db 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -678,15 +678,17 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera) /* Map buffers to the IPA. */ unsigned int ipaBufferId = 1; - for (const std::unique_ptr &buffer : imgu->paramBuffers_) { + auto pushBuffer = [&](std::vector &buffers, + const std::unique_ptr &buffer) { buffer->setCookie(ipaBufferId++); - ipaBuffers_.emplace_back(buffer->cookie(), buffer->planes()); - } + buffers.emplace_back(buffer->cookie(), buffer->planes()); + }; - for (const std::unique_ptr &buffer : imgu->statBuffers_) { - buffer->setCookie(ipaBufferId++); - ipaBuffers_.emplace_back(buffer->cookie(), buffer->planes()); - } + for (const std::unique_ptr &buffer : imgu->paramBuffers_) + pushBuffer(ipaBuffers_, buffer); + + for (const std::unique_ptr &buffer : imgu->statBuffers_) + pushBuffer(ipaBuffers_, buffer); data->ipa_->mapBuffers(ipaBuffers_); diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp index 76341ed3f363..f03a03fef35c 100644 --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp @@ -1133,27 +1133,27 @@ int PipelineHandlerMaliC55::allocateBuffers(Camera *camera) data->dsStream_.configuration().bufferCount, }); + auto pushBuffer = [&](std::queue &queue, + std::vector &buffers, + const std::unique_ptr &buffer) { + buffer->setCookie(ipaBufferId++); + buffers.emplace_back(buffer->cookie(), buffer->planes()); + queue.push(buffer.get()); + }; + ret = stats_->allocateBuffers(bufferCount, &statsBuffers_); if (ret < 0) return ret; - for (std::unique_ptr &buffer : statsBuffers_) { - buffer->setCookie(ipaBufferId++); - data->ipaStatBuffers_.emplace_back(buffer->cookie(), - buffer->planes()); - availableStatsBuffers_.push(buffer.get()); - } + for (std::unique_ptr &buffer : statsBuffers_) + pushBuffer(availableStatsBuffers_, data->ipaStatBuffers_, buffer); ret = params_->allocateBuffers(bufferCount, ¶msBuffers_); if (ret < 0) return ret; - for (std::unique_ptr &buffer : paramsBuffers_) { - buffer->setCookie(ipaBufferId++); - data->ipaParamBuffers_.emplace_back(buffer->cookie(), - buffer->planes()); - availableParamsBuffers_.push(buffer.get()); - } + for (std::unique_ptr &buffer : paramsBuffers_) + pushBuffer(availableParamsBuffers_, data->ipaParamBuffers_, buffer); if (data->ipa_) { data->ipa_->mapBuffers(data->ipaStatBuffers_, true); diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 55d7d4442caf..99347c9f6258 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -1028,19 +1028,19 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera) availableMainPathBuffers_.push(buffer.get()); } - for (std::unique_ptr &buffer : paramBuffers_) { + auto pushBuffer = [&](std::vector &buffers, + std::queue &queue, + const std::unique_ptr &buffer) { buffer->setCookie(ipaBufferId++); - data->ipaBuffers_.emplace_back(buffer->cookie(), - buffer->planes()); - availableParamBuffers_.push(buffer.get()); - } + buffers.emplace_back(buffer->cookie(), buffer->planes()); + queue.push(buffer.get()); + }; - for (std::unique_ptr &buffer : statBuffers_) { - buffer->setCookie(ipaBufferId++); - data->ipaBuffers_.emplace_back(buffer->cookie(), - buffer->planes()); - availableStatBuffers_.push(buffer.get()); - } + for (std::unique_ptr &buffer : paramBuffers_) + pushBuffer(data->ipaBuffers_, availableParamBuffers_, buffer); + + for (std::unique_ptr &buffer : statBuffers_) + pushBuffer(data->ipaBuffers_, availableStatBuffers_, buffer); data->ipa_->mapBuffers(data->ipaBuffers_);