From b48702225b6b48438a8b1306f662da4c2a1074a1 Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Mon, 17 Aug 2026 02:58:31 +0200 Subject: [PATCH] libcamera: ship the IMX896 colour tuning (r6) Adds imx896.yaml (CCMs for 2800/4000/5750 K) so the main camera gets real colour instead of the uncalibrated fallback. The matrices are numeric calibration data read out of the stock Android tuning blob - measured spectral response of this sensor, not authored expression - and are shipped by the project owner's decision, consistent with the vendor-derived data this image already carries. Durable replacement is to measure our own from a colour chart. Note the file lists Adjust/Agc/Af as well as BlackLevel/Awb/Ccm: a sensor-specific tuning file REPLACES the fallback's algorithm list, so omitting them silently disables auto-exposure and autofocus. Co-Authored-By: Claude Fable 5 --- aports/temp/libcamera/APKBUILD | 4 ++- aports/temp/libcamera/imx896.yaml | 51 +++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 aports/temp/libcamera/imx896.yaml diff --git a/aports/temp/libcamera/APKBUILD b/aports/temp/libcamera/APKBUILD index bc7c415..b36b60a 100644 --- a/aports/temp/libcamera/APKBUILD +++ b/aports/temp/libcamera/APKBUILD @@ -3,7 +3,7 @@ maintainer="Robert Mader " pkgname=libcamera _pkgver=0.7.2 pkgver=9999$_pkgver -pkgrel=5 +pkgrel=6 pkgdesc="Linux camera framework" url="https://libcamera.org/" arch="all" @@ -53,6 +53,7 @@ _tuning_files=" imx376.yaml imx519.yaml imx858.yaml + imx896.yaml s5k3l6xx.yaml s5kjn1.yaml " @@ -206,6 +207,7 @@ dce81c2863ff6b9374115325f4af14ac5d396a6e2aee12f87d55a47d1d0bda860ae2af5a9d6885b1 55dab9dcb9b1982143b9d63e4e51138c5bffd7c8f4a8e4e122750b3ad9d475446956bc297d9f564819ade4be75a575d06633a064e14f8ba3ef77986783c5f067 imx376.yaml 2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f imx519.yaml 55dab9dcb9b1982143b9d63e4e51138c5bffd7c8f4a8e4e122750b3ad9d475446956bc297d9f564819ade4be75a575d06633a064e14f8ba3ef77986783c5f067 imx858.yaml +821f4ebfe73b98bade5ee44696680693370a33f076466d662b6bc1c6ffef3c5bd5b1f7a7bd8529d1df63ae58299e770e175dcda9a67f8b0796a724e6e90be0a5 imx896.yaml 2ee566653b17d565d2c0de67cbe6ebad25df5aac6051cad78e6bae52016fa2ca0247e964d735ac776b3e0bd447ead9c4fcb26cd7629228cdba3ceb91b46f378f s5k3l6xx.yaml d59020e62520ee622282c85ce7bcdfe453c99becf48cc1005c5f8a4bb8b2511b19c89f38fb3c994e7c6a79d1f84e2ed5f5a09b4c5bdc1dc4a44b071dbccf0d44 s5kjn1.yaml " diff --git a/aports/temp/libcamera/imx896.yaml b/aports/temp/libcamera/imx896.yaml new file mode 100644 index 0000000..aa0402b --- /dev/null +++ b/aports/temp/libcamera/imx896.yaml @@ -0,0 +1,51 @@ +# libcamera softISP tuning for the Fairphone 6 main camera (Sony IMX896). +# +# CCMs extracted from the FP6 stock Android tuning blob +# com.qti.tuned.fp6_tsp_imx896.bin (vendor_a.img, sha256 0500766f...c1a5d29f), +# CamX cc13_ope_v2 module, tree root at 0x2709fe: 3 lux zones, 3-5 CCT +# regions each, offsets all zero, rows sum to 1.0. This file carries the +# BRIGHT zone (lux-index trigger 1-200) — the true-color tuning, same +# convention as the sibling ov13b10.yaml. Note the bright zone has only +# three CT nodes and merges D50/D65 into one 4800-6700 K region (node +# placed at its 5750 K midpoint); the lowlight zone has proper 5000/6500 K +# nodes but at reduced saturation (chroma-noise hiding) — see +# chromatix/imx896-ccm-awb-extracted.txt for all 12 matrices. +# CT nodes = the chromatix CCT trigger midpoints: 2800 (A), 4000 (TL84), +# 5750 (merged D50/D65 region). +# +# No blackLevel is set: the IMX896 pedestal has not been measured on this +# hardware and no datasheet value is available (the softISP then estimates +# it dynamically per frame). Once a dark-frame measurement exists, add +# - BlackLevel: +# blackLevel: <16-bit value> +# +# PROVENANCE / LICENSE: the matrices are numeric calibration data read out +# of the proprietary vendor blob (measured spectral response of this +# sensor, not authored expression). Shipping decided 2026-08-17 by the +# project owner, consistent with existing practice in this image; NOT +# marked CC0. Durable replacement: measure our own matrices from a colour +# chart with libcamera's tuning tooling. +%YAML 1.1 +--- +version: 1 +algorithms: + - BlackLevel: + - Awb: + - Ccm: + ccms: + - ct: 2800 + ccm: [ 1.593410, -0.552769, -0.040641, + -0.166429, 1.170414, -0.003985, + 0.004114, -0.855526, 1.851411 ] + - ct: 4000 + ccm: [ 1.612519, -0.785270, 0.172751, + -0.110672, 1.189965, -0.079293, + 0.091939, -0.965137, 1.873197 ] + - ct: 5750 + ccm: [ 1.900000, -0.581250, -0.318750, + -0.292500, 1.778126, -0.485626, + 0.014573, -0.734843, 1.720270 ] + - Adjust: + - Agc: + - Af: +...