From patchwork Fri Jul 3 15:38:02 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: 27179 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 53D40C3261 for ; Fri, 3 Jul 2026 15:38:26 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 843F365FD9; Fri, 3 Jul 2026 17:38:24 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="i3Tc+DGk"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 081CD65F9F for ; Fri, 3 Jul 2026 17:38:23 +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 B8458DF3 for ; Fri, 3 Jul 2026 17:37:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1783093056; bh=EfavAryUew1DTfbXFwjO+S8OTsVYRFlpeamgmGfX9/g=; h=From:To:Subject:Date:From; b=i3Tc+DGkIL+l1alSkNZCvcUyQp1KFvon11XwiQdOtUsejBl5DO0SQVU5lixe7J199 zNGh9F3LfEoB94cW37W0k9MbmMCkDmO9Z5yVUjFx9o9TqxCVZdGHT4vqrIhCFaBjsy KZqOGnn/EM0g1VFtOcFl8rnb6SzbhZTgGmdc1KcE= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [RFC PATCH v1 00/17] ipa: libipa: agc rework Date: Fri, 3 Jul 2026 17:38:02 +0200 Message-ID: <20260703153819.1088752-1-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.54.0 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" This is a first early of the AGC rework that is supposed to remove duplication of AGC related code from multiple IPA modules. It also enables the use of AgcMeanLuminance in the simple pipeline handler if a camera sensor helper is available. This applies on top of the current master branch, not rebased on any of the libipa rework yet. Conflicts should be minimal. TODO: handling of DigitalGain + AeEnable needs to be clarified Barnabás Pőcze (17): ipa: simple: Fix control presence sanity check ipa: rkisp1: Remove `IPASessionConfiguration::sensor.defVBlank` ipa: simple: agc: Do not overwrite sensor exposure/gain ipa: libipa: agc_mean_luminance: Remove the need for inheritance ipa: rkisp1: Move sensor control info map to context ipa: rkisp1: Update sensor info when configuring ipa: rkisp1: updateControls(): Use sensor info from context ipa: rkisp1: Move AGC related controls into AGC algorithm ipa: mali-c55: Remove `DigitalGain` support ipa: libipa: Add `AgcMeanLuminance` wrapper ipa: rkisp1: Port to `AgcMeanLuminanceAlgorithm` ipa: mali-c55: Port to `AgcMeanLuminanceAlgorithm` ipa: ipu3: Port to `AgcMeanLuminanceAlgorithm` ipa: libipa: agc_mean_luminance: controls(): Return const ref ipa: libipa: Add `AgcAlgorithm` ipa: simple: agc: Port to `AgcAlgorithm` ipa: simple: agc: Use `AgcMeanLuminance` if sensor helper is available src/ipa/ipu3/algorithms/agc.cpp | 199 +++++------ src/ipa/ipu3/algorithms/agc.h | 19 +- src/ipa/ipu3/ipa_context.cpp | 49 +-- src/ipa/ipu3/ipa_context.h | 27 +- src/ipa/ipu3/ipu3.cpp | 138 ++------ src/ipa/libipa/agc.cpp | 488 ++++++++++++++++++++++++++ src/ipa/libipa/agc.h | 100 ++++++ src/ipa/libipa/agc_mean_luminance.cpp | 268 ++++++++++++-- src/ipa/libipa/agc_mean_luminance.h | 65 +++- src/ipa/libipa/meson.build | 2 + src/ipa/mali-c55/algorithms/agc.cpp | 205 +++-------- src/ipa/mali-c55/algorithms/agc.h | 7 +- src/ipa/mali-c55/ipa_context.h | 38 +- src/ipa/mali-c55/mali-c55.cpp | 163 ++------- src/ipa/rkisp1/algorithms/agc.cpp | 478 ++++++------------------- src/ipa/rkisp1/algorithms/agc.h | 13 +- src/ipa/rkisp1/algorithms/lux.cpp | 2 +- src/ipa/rkisp1/algorithms/wdr.cpp | 2 +- src/ipa/rkisp1/ipa_context.cpp | 104 +----- src/ipa/rkisp1/ipa_context.h | 48 +-- src/ipa/rkisp1/rkisp1.cpp | 120 +------ src/ipa/simple/agc_simple.cpp | 197 +++++++++++ src/ipa/simple/agc_simple.h | 59 ++++ src/ipa/simple/algorithms/agc.cpp | 296 ++++++++-------- src/ipa/simple/algorithms/agc.h | 16 +- src/ipa/simple/ipa_context.h | 25 +- src/ipa/simple/meson.build | 1 + src/ipa/simple/soft_simple.cpp | 80 ++--- 28 files changed, 1743 insertions(+), 1466 deletions(-) create mode 100644 src/ipa/libipa/agc.cpp create mode 100644 src/ipa/libipa/agc.h create mode 100644 src/ipa/simple/agc_simple.cpp create mode 100644 src/ipa/simple/agc_simple.h --- 2.54.0