From patchwork Wed Mar 25 09:31:45 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stuart J Mackintosh X-Patchwork-Id: 26331 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 DFD02BE086 for ; Wed, 25 Mar 2026 09:31:52 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id F17B862837; Wed, 25 Mar 2026 10:31:51 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=opendigital.cc header.i=@opendigital.cc header.b="LFc0oXW7"; dkim-atps=neutral Received: from isp.services.fr2.cloudient.net (services.fr2.cloudient.net [2.59.188.206]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0649062788 for ; Wed, 25 Mar 2026 10:31:51 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=opendigital.cc; s=mail; h=Content-Transfer-Encoding:Content-Type:From: Subject:To:MIME-Version:Date:Message-ID:Sender:Reply-To:Cc:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=ZuT7pdifTa0BuCKmh+UB9tvTccXKmcllGxhL25WPc5I=; b=LFc0oXW7U5keq12XkBWjWKsg2h s/SDYZaUHbED54bDJpxCLcpXLFtqvHq7BWBMcOaXO15685UxPHSMIpS2KIgIH6nvbuU1jeMlK/nXi Y42vZ/DBd3x6/enZQ0leMEVDf/NiObrY/2lmqm3WD0pk9TY8IfMZLtBhe4l+DgSyKbXZeXd1ywr65 /FGNuSY17h/O24IZqVCCd4yq5IFwsRy6R2oQmb1XqWPJHqZpkxYnSw0/mBVGCYaji1zRg1S/LZao/ yxK8NPHcnATvk3zHoReFTwgGvpoe5u9CndIa4MK90zOHuLR6p83Ik0xbr4LDQF0rjTX1PEekiW2Sv MfzAttyw==; Received: from 103.82.220.81.rev.sfr.net ([81.220.82.103] helo=[192.168.125.173]) by isp.cloudient.net with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1w5KaY-00E6aA-02 for libcamera-devel@lists.libcamera.org; Wed, 25 Mar 2026 09:31:50 +0000 Message-ID: Date: Wed, 25 Mar 2026 10:31:45 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: libcamera-devel@lists.libcamera.org Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10 From: Stuart J Mackintosh Content-Language: en-GB 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 ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001 From: Stuart J Mackintosh Date: Wed, 25 Mar 2026 10:19:05 +0100 Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10 Add a CameraSensorHelper for the OmniVision OV01A10 image sensor, used in Dell XPS 13 and other laptops with the Intel IPU6 camera subsystem. The analogue gain model is derived from the V4L2 control range reported by the sensor driver. The minimum gain code is 256 with a step of 1, giving the linear model: gain = code / 256 This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent with the pattern used by other OmniVision sensors in this file. The black level of 0x40 at 10 bits (4096 scaled to 16 bits) was confirmed by dark frame measurement with the lens covered. Without this helper, libcamera's AGC algorithm cannot convert between gain codes and real gain values, causing auto-exposure oscillation and the following warning: IPASoft: Failed to create camera sensor helper for ov01a10 Signed-off-by: Stuart J Mackintosh --- Note: Colour calibration (CCM) for this sensor is not yet available. A tuning file exists at /usr/share/libcamera/ipa/simple/ov01a10.yaml but contains no calibrated parameters. This is deferred to a follow-up contribution once calibration data is available. src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp index e3e3e535..72466867 100644 --- a/src/ipa/libipa/camera_sensor_helper.cpp +++ b/src/ipa/libipa/camera_sensor_helper.cpp @@ -653,6 +653,18 @@ public: }; REGISTER_CAMERA_SENSOR_HELPER("imx708", CameraSensorHelperImx708) +class CameraSensorHelperOv01a10 : public CameraSensorHelper +{ +public: + CameraSensorHelperOv01a10() + { + /* From dark frame measurement: 0x40 at 10bits. */ + blackLevel_ = 4096; + gain_ = AnalogueGainLinear{ 1, 0, 0, 256 }; + } +}; +REGISTER_CAMERA_SENSOR_HELPER("ov01a10", CameraSensorHelperOv01a10) + class CameraSensorHelperOv2685 : public CameraSensorHelper { public: -- 2.47.3