From patchwork Tue Sep 8 08:45:44 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Samuel LEGROS X-Patchwork-Id: 28201 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 56EC9C3273 for ; Tue, 8 Sep 2026 08:53:42 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 90B006861D; Tue, 8 Sep 2026 10:53:39 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="GpiK152x"; dkim-atps=neutral Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7FE7568615 for ; Tue, 8 Sep 2026 10:45:48 +0200 (CEST) Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-49cd77e0f95so35677405e9.3 for ; Tue, 08 Sep 2026 01:45:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788857148; x=1789461948; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dJd+mKQzDXf2Ebkgg5dEz0cg7N2YIqqL08irlO+eYnY=; b=GpiK152x1gjcvodPCA8+XNAz4Sg98dOZ2ARgkh7we4Tkbq22DZpPfUjUrBRyaJVk1/ ZSokKYtvUz2HyIdO/RCUiA0bQTnFrvR90gi6TBGh6jyEH9MlvS8yT7P+jgWT4VdnNSsF C3znkbghLZaN24FJaw2kFt6hCNPUhEu720s/U5yuSwrsNydHuRR5snO4id8VMkV/ssks gTh1R5x3aOUAePIoyHrUkAurBnyYZuJyxVBak57ljNmvT0disbnfvBcFJzf5sK+AyFz7 8tWYxdL1KT9x3uZ7bCIKu+L0fl/I3k3hXe3xt62xgWOdbgT1jWFXEsI5MfhwvvKvvz02 hpcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788857148; x=1789461948; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=dJd+mKQzDXf2Ebkgg5dEz0cg7N2YIqqL08irlO+eYnY=; b=P8a/YHmIkHCAFUG3Efisqgu1h5T5Scx9EKoKGtUZG22mGsMP+b8WLgoEcwDzaIUuda wjPmmkOOIXmvs6KdjC3VWrEu18s7xrsAdp5g/rQTMthwP8qoSVhiGktSpNWxPo5Qyxra SOK332hFKaWTiNX5douCpFNFKpu9YszbKOEF5fD8NJLPlRIqCEXqXz/THDKBwtB/fJNi CwgZVga7rxkMxvmB3uKZne0m0PbdROJKTmDTuMLECdsaOHzUqK4uhQNJWK9eaSMFDRe8 wRr8W4J9GXVRxlhCTYsq8Rg7WdKUoHFUCfjnQxSZwxARjK+iFeJvviyDdkXTqHntbtjl 3LhA== X-Gm-Message-State: AFuF++mLGiBs/WSMSW259IjrUDl81WpsrDOLOUHgB4Lr+heXiFUdf+2a yyY5bTuJTNnKSXsVDz3U+/BvJsX95z9imsQp3xihXLAG3t5j3qivP4FsdFhfwfIeL9E= X-Gm-Gg: AYBFou0maVd6I3Trtw4ig6b2LXImT2aa45cXYCwJwq7hfTgKeM98sMOXmh42aNqOkmN R1k3NsUQr0V8XyvLb6ggFCYp1PNMPTtzy0ZWzR1YLoD1jss7PPIt54d+D4+nEkKsuy4GnM2KcnC yKqkOtw/3mqroycd1PCWklpPBT1yxoZ3GE7sJ3Ygh7k9u6boVAqCXHrxoZ/Ht0+fj17A5QMXbtJ gJ/zFnqp1NWmHVYkP7c+CDXKxx5L/y2kSaNlA/dsjeHB3UP0yZnGJHUTKW+IG9krIdVbXpJBCOP /CN9/v0MRdgrxLvAHy0fhsbB3IbZ5ir+/GgKjo9ZFOb55bfbzxZX9tFHG4J6s8RZSTJyYm1cj5e oHfR1yQarmiVcfwCDdc1RnN9B7KCRGMx8FS35PbE72wDN0ci95tKIKI/xYBkUdwYwt0gdynmfQJ 2uMg/O8F+EJp4b1XdhF2uhO70J2F5rHNQQFNYz34l0fCa5IQYxr9O9OxZycV81gbmuOBHcjjU7I NKOrER4dERRWlcuubsX2BpGMJLbvmapVjRLFC+7YWq5HGiL3PZVkR7nHKaFdg== X-Received: by 2002:a05:600c:138e:b0:49d:daa:af6e with SMTP id 5b1f17b1804b1-49d1c7b732amr15307565e9.16.1788857147931; Tue, 08 Sep 2026 01:45:47 -0700 (PDT) Received: from laptop-sam.ss2i-services.local (lneuilly-657-1-3-33.w81-250.abo.wanadoo.fr. [81.250.130.33]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cee7fec25sm538427965e9.13.2026.09.08.01.45.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 01:45:46 -0700 (PDT) From: Samuel LEGROS To: libcamera-devel@lists.libcamera.org Cc: naush@raspberrypi.com, robert.mader@collabora.com, Samuel LEGROS Subject: [PATCH 2/2] libcamera: camera_sensor: Add Sony IMX363 sensor properties and helper Date: Tue, 8 Sep 2026 10:45:44 +0200 Message-ID: <20260908084544.274613-2-sam.legros@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260908084544.274613-1-sam.legros@gmail.com> References: <20260908084544.274613-1-sam.legros@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 08 Sep 2026 10:53:38 +0200 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" Add the camera sensor properties and camera sensor helper entries for the Sony IMX363, the rear sensor of the Google Pixel 3 and Pixel 3a. Values were taken from the driver and confirmed on a Pixel 3a running postmarketOS (imx363 3-001a): - The pixel array is 4032x3024 within a 4048x3168 native area, and the sensor is a 12.2 MP type 1/2.55" part, giving a 1.4 um pixel pitch (4032 * 1.4 um = 5.64 mm across). - The driver exposes the same test pattern menu as the IMX258 and the IMX355: static const char * const imx363_test_pattern_menu[] = { "Disabled", "Solid Colour", "Eight Vertical Colour Bars", "Colour Bars With Fade to Grey", "Pseudorandom Sequence (PN9)", }; - Analogue gain is written to ANALOG_GAIN_GLOBAL (0x0204) and ranges from 0 to 480, the same limit as the IMX258, which corresponds to the 512/(512 - x) gain model and a 16x maximum. The IMX355 uses the same formula scaled to 1024 with a limit of 960. - The black level follows the value documented for the sibling sensors, 0x40 at 10 bits. Signed-off-by: Samuel LEGROS --- src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++ .../sensor/camera_sensor_properties.cpp | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp index 82bf255..c3ae412 100644 --- a/src/ipa/libipa/camera_sensor_helper.cpp +++ b/src/ipa/libipa/camera_sensor_helper.cpp @@ -629,6 +629,18 @@ public: }; REGISTER_CAMERA_SENSOR_HELPER("imx355", CameraSensorHelperImx355) +class CameraSensorHelperImx363 : public CameraSensorHelper +{ +public: + CameraSensorHelperImx363() + { + /* From datasheet: 0x40 at 10bits. */ + blackLevel_ = 4096; + gain_ = AnalogueGainLinear{ 0, 512, -1, 512 }; + } +}; +REGISTER_CAMERA_SENSOR_HELPER("imx363", CameraSensorHelperImx363) + class CameraSensorHelperImx415 : public CameraSensorHelper { public: diff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp index ecf523c..10095f2 100644 --- a/src/libcamera/sensor/camera_sensor_properties.cpp +++ b/src/libcamera/sensor/camera_sensor_properties.cpp @@ -281,6 +281,22 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen .hblankDelay = 2 }, } }, + { "imx363", { + .unitCellSize = { 1400, 1400 }, + .testPatternModes = { + { controls::draft::TestPatternModeOff, 0 }, + { controls::draft::TestPatternModeSolidColor, 1 }, + { controls::draft::TestPatternModeColorBars, 2 }, + { controls::draft::TestPatternModeColorBarsFadeToGray, 3 }, + { controls::draft::TestPatternModePn9, 4 }, + }, + .sensorDelays = { + .exposureDelay = 2, + .gainDelay = 2, + .vblankDelay = 2, + .hblankDelay = 2 + }, + } }, { "imx415", { .unitCellSize = { 1450, 1450 }, .testPatternModes = {},