From patchwork Tue Jun 24 17:12:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 23645 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 2ED58C3237 for ; Tue, 24 Jun 2025 17:12:34 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id AF75668DEF; Tue, 24 Jun 2025 19:12:30 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="tADlDAr+"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6B91468DDD for ; Tue, 24 Jun 2025 19:12:27 +0200 (CEST) Received: from Monstersaurus.hippo-penny.ts.net (cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A79383D5; Tue, 24 Jun 2025 19:12:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1750785129; bh=4h/zOOYNTmEk+ptkmff2Xq2AtxC5eI7iSZg4FPiZPfU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tADlDAr+9Q9DJI42LYAP9Af+dT0W6PaUyzjOIyN5LYg2hkw3Odp23ss1un8gntZum fjSNvJzeLhMJ3eoe+ex5vc7FBv/2EtOWO6QuWTTLyQM7YUfhUVMcuKc8QU5YWloEpp P+9VD2nqM1X+mq+3mcYSzUiNZZ7c8eXZBmC66+00= From: Kieran Bingham To: libcamera devel Cc: "van Veen, Stephan" , "Zenker, Sebastian" , Kieran Bingham Subject: [PATCH 1/3] ipa: rkisp1: cproc: Report metadata Date: Tue, 24 Jun 2025 18:12:21 +0100 Message-ID: <20250624171223.2181226-2-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250624171223.2181226-1-kieran.bingham@ideasonboard.com> References: <20250624171223.2181226-1-kieran.bingham@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" From: "van Veen, Stephan" Presently the colour processing component exposes controls for brightness, saturation, and contrast to the applications which are handled and processed accordingly on the ISP. The implementation lacks reporting the values that are set back to the application. Provide the inverse conversion functions to convert the values applied and report them in the completed request metadata. Signed-off-by: van Veen, Stephan Signed-off-by: Zenker, Sebastian [Kieran: Refactor commit message, fix checkstyle warnings] Signed-off-by: Kieran Bingham --- src/ipa/rkisp1/algorithms/cproc.cpp | 22 ++++++++++++++++++++++ src/ipa/rkisp1/algorithms/cproc.h | 4 ++++ 2 files changed, 26 insertions(+) diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp index d1fff6990d37..9213ee49b374 100644 --- a/src/ipa/rkisp1/algorithms/cproc.cpp +++ b/src/ipa/rkisp1/algorithms/cproc.cpp @@ -44,11 +44,21 @@ int convertBrightness(const float v) return std::clamp(std::lround(v * 128), -128, 127); } +float convertBrightness(const int v) +{ + return static_cast(v) / 128.0f; +} + int convertContrastOrSaturation(const float v) { return std::clamp(std::lround(v * 128), 0, 255); } +float convertContrastOrSaturation(const int v) +{ + return static_cast(v) / 128.0f; +} + } /* namespace */ /** @@ -153,6 +163,18 @@ void ColorProcessing::prepare([[maybe_unused]] IPAContext &context, config->sat = frameContext.cproc.saturation; } +/** + * \copydoc libcamera::ipa::Algorithm::process + */ +void ColorProcessing::process([[maybe_unused]] IPAContext &context, [[maybe_unused]] const uint32_t frame, + IPAFrameContext &frameContext, [[maybe_unused]] const rkisp1_stat_buffer *stats, + ControlList &metadata) +{ + metadata.set(controls::Brightness, convertBrightness(frameContext.cproc.brightness)); + metadata.set(controls::Contrast, convertContrastOrSaturation(frameContext.cproc.contrast)); + metadata.set(controls::Saturation, convertContrastOrSaturation(frameContext.cproc.saturation)); +} + REGISTER_IPA_ALGORITHM(ColorProcessing, "ColorProcessing") } /* namespace ipa::rkisp1::algorithms */ diff --git a/src/ipa/rkisp1/algorithms/cproc.h b/src/ipa/rkisp1/algorithms/cproc.h index fd38fd17e8bb..9b589ebd4ad7 100644 --- a/src/ipa/rkisp1/algorithms/cproc.h +++ b/src/ipa/rkisp1/algorithms/cproc.h @@ -30,6 +30,10 @@ public: void prepare(IPAContext &context, const uint32_t frame, IPAFrameContext &frameContext, RkISP1Params *params) override; + void process(IPAContext &context, const uint32_t frame, + IPAFrameContext &frameContext, + const rkisp1_stat_buffer *stats, + ControlList &metadata) override; }; } /* namespace ipa::rkisp1::algorithms */