From patchwork Sat Nov 13 08:49:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jean-Michel Hautbois X-Patchwork-Id: 14590 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 2536DBDB1C for ; Sat, 13 Nov 2021 08:49:53 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 3BAEC60378; Sat, 13 Nov 2021 09:49:52 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="SWbTqDQW"; 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 E1BE760121 for ; Sat, 13 Nov 2021 09:49:50 +0100 (CET) Received: from tatooine.ideasonboard.com (unknown [IPv6:2a01:e0a:169:7140:4d35:9445:6881:4ffd]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 73C6355C; Sat, 13 Nov 2021 09:49:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1636793390; bh=ilIsDrtQSrRLAA6Aw6R34DSR6yWE2fl4R5dgD5+otGY=; h=From:To:Cc:Subject:Date:From; b=SWbTqDQWCuV6aomSSoN8mp/ax7ormQKzsYt88FgnERsG+AYU1jVtcy93qiGEbNlYU ktnG7hhCOUBR6xHT9yw2crbLmem1Dt/ppq80AGQxf/phkXg+96zHc61SN5NIw22l0s goaVCNByFQ1HND+KhCEpNYOAgXztx9Syr7jWuFVc= From: Jean-Michel Hautbois To: libcamera-devel@lists.libcamera.org Date: Sat, 13 Nov 2021 09:49:33 +0100 Message-Id: <20211113084947.21892-1-jeanmichel.hautbois@ideasonboard.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v5 00/14] IPA: IPU3: Introduce per-frame controls 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" Hello, This is v5 of the patch series, but only half of v1 is here, as the second part, which adds the std::queue, is subject to discussion. v5 modifies some commit messages, and removes a double bad checking added in "ipa: ipu3: agc: Improve gain calculation". v4 only modified some commit messages, with the exception of patch 8/14 which makes the variable used for previous exposure a local one. This patch series is not only introducing per-frame controls, using the sensor controls directly in the EventStatReady, it also improves the AGC in some difficult cases (saturated scenes, backlight, etc.) thanks to the possibility to use the effective exposure and gains values for a given frame. The first two patches 1/14 and 2/14 are Han-Lin Chan series, splitted to keep only the sensor controls part. I have modified the first patch to remove the lens controls references, and another series containing only the lens controls should be sent separately as it requires a bit more review. In v2, I also modified the patch 2/14 to call the reset on DelayedControl at start and not at configure. For the next patches, v3 introduces a sensor structure in the frameContext, to distinguish input and output for the algorithms. From patches 3/14 to 9/14 we use those sensor controls as input when a EventStatReady event is received, by updating the frameContext values. With those values, we can be better at estimating the exposure value, and we introduce a brightness measure to have a better behaviour in saturated cases. Patches 10/14 to 14/14 are here to improve the per-frame control updates by the IPA, introducing the colour temperature control, and updating the ExposureTime and AnalogueGain controls. Han-Lin Chen (2): ipa: ipu3: Extend ipu3 ipa interface for sensor controls ipu3: ipa: Report effective sensor controls with statistics to IPA Jean-Michel Hautbois (12): ipa: ipu3: Use sensor controls to update frameContext ipa: ipu3: agc: Limit the number of saturated cells ipa: ipu3: agc: Compute the gain for each frame ipa: ipu3: agc: Refactor ev gain calculation and testing ipa: ipu3: agc: Improve gain calculation ipa: ipu3: agc: Update previous exposure value ipa: ipu3: agc: Store exposure in units of time ipa: ipu3: awb: Add support for color temperature ipa: ipu3: Send color temperature in the metadata ipa: ipu3: Cache line duration at configure call ipa: ipu3: Move ExposureTime to IPA ipa: ipu3: Set the AnalogueGain control include/libcamera/ipa/ipu3.mojom | 2 + src/ipa/ipu3/algorithms/agc.cpp | 196 +++++++++++++++++++-------- src/ipa/ipu3/algorithms/agc.h | 11 +- src/ipa/ipu3/algorithms/awb.cpp | 1 + src/ipa/ipu3/ipa_context.cpp | 14 ++ src/ipa/ipu3/ipa_context.h | 7 + src/ipa/ipu3/ipu3.cpp | 48 ++++--- src/libcamera/pipeline/ipu3/frames.h | 4 + src/libcamera/pipeline/ipu3/ipu3.cpp | 23 +--- 9 files changed, 215 insertions(+), 91 deletions(-)