[3/4] ipa: raspberrypi: Add tuning file for IMX462 sensor
diff mbox series

Message ID 20241113223556.413637-4-geoffrey.vl@gmail.com
State New
Headers show
Series
  • [1/4] libcamera: libipa: camera_sensor: Add Sony IMX462 sensor properties
Related show

Commit Message

Geoffrey Van Landeghem Nov. 13, 2024, 10:35 p.m. UTC
Signed-off-by: Geoffrey Van Landeghem <geoffrey.vl@gmail.com>
---
 src/ipa/rpi/vc4/data/imx462.json | 214 +++++++++++++++++++++++++++++++
 src/ipa/rpi/vc4/data/meson.build |   1 +
 2 files changed, 215 insertions(+)
 create mode 100644 src/ipa/rpi/vc4/data/imx462.json

Comments

David Plowman Nov. 15, 2024, 1:47 p.m. UTC | #1
Hi Geoffrey

Thanks for sending this, always pleased to get support for new
cameras! Just a few questions...

There isn't much in the way of colour tuning - can you say if this is
perhaps a mono sensor, or is it the case that someone might need to do
more colour tuning in future?

Generally we like to support the same sensors on Pi 5 as Pi 4, but I'm
guessing it's not possible for you to make a Pi 5 tuning as well, is
that right?

Thanks
David

On Wed, 13 Nov 2024 at 22:44, Geoffrey Van Landeghem
<geoffrey.vl@gmail.com> wrote:
>
> Signed-off-by: Geoffrey Van Landeghem <geoffrey.vl@gmail.com>
> ---
>  src/ipa/rpi/vc4/data/imx462.json | 214 +++++++++++++++++++++++++++++++
>  src/ipa/rpi/vc4/data/meson.build |   1 +
>  2 files changed, 215 insertions(+)
>  create mode 100644 src/ipa/rpi/vc4/data/imx462.json
>
> diff --git a/src/ipa/rpi/vc4/data/imx462.json b/src/ipa/rpi/vc4/data/imx462.json
> new file mode 100644
> index 00000000..8f41bf51
> --- /dev/null
> +++ b/src/ipa/rpi/vc4/data/imx462.json
> @@ -0,0 +1,214 @@
> +{
> +    "version": 2.0,
> +    "target": "bcm2835",
> +    "algorithms": [
> +        {
> +            "rpi.black_level":
> +            {
> +                "black_level": 3840
> +            }
> +        },
> +        {
> +            "rpi.dpc": { }
> +        },
> +        {
> +            "rpi.lux":
> +            {
> +                "reference_shutter_speed": 6813,
> +                "reference_gain": 1.0,
> +                "reference_aperture": 1.0,
> +                "reference_lux": 890,
> +                "reference_Y": 12900
> +            }
> +        },
> +        {
> +            "rpi.noise":
> +            {
> +                "reference_constant": 0,
> +                "reference_slope": 2.67
> +            }
> +        },
> +        {
> +            "rpi.geq":
> +            {
> +                "offset": 187,
> +                "slope": 0.00842
> +            }
> +        },
> +        {
> +            "rpi.sdn": { }
> +        },
> +        {
> +            "rpi.awb":
> +            {
> +                "bayes": 0
> +            }
> +        },
> +        {
> +            "rpi.agc":
> +            {
> +                "speed": 0.2,
> +                "metering_modes":
> +                {
> +                    "matrix":
> +                    {
> +                        "weights":
> +                        [
> +                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
> +                        ]
> +                    },
> +                    "centre-weighted":
> +                    {
> +                        "weights":
> +                        [
> +                            3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
> +                        ]
> +                    },
> +                    "spot":
> +                    {
> +                        "weights":
> +                        [
> +                            2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
> +                        ]
> +                    }
> +                },
> +                "exposure_modes":
> +                {
> +                    "normal":
> +                    {
> +                        "shutter": [ 10, 30000, 60000 ],
> +                        "gain": [ 1.0, 2.0, 8.0 ]
> +                    },
> +                    "short":
> +                    {
> +                        "shutter": [ 10, 5000, 10000, 20000, 120000 ],
> +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                    },
> +                    "long":
> +                    {
> +                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                    }
> +                },
> +                "constraint_modes":
> +                {
> +                    "normal": [  ],
> +                    "highlight": [
> +                        {
> +                            "bound": "LOWER",
> +                            "q_lo": 0.98,
> +                            "q_hi": 1.0,
> +                            "y_target":
> +                            [
> +                                0, 0.5,
> +                                1000, 0.5
> +                            ]
> +                        },
> +                        {
> +                            "bound": "UPPER",
> +                            "q_lo": 0.98,
> +                            "q_hi": 1.0,
> +                            "y_target":
> +                            [
> +                                0, 0.8,
> +                                1000, 0.8
> +                            ]
> +                        }
> +                    ]
> +                },
> +                "y_target":
> +                [
> +                    0, 0.16,
> +                    1000, 0.16,
> +                    10000, 0.16
> +                ]
> +            }
> +        },
> +        {
> +            "rpi.alsc":
> +            {
> +                "omega": 1.3,
> +                "n_iter": 100,
> +                "luminance_strength": 0.7,
> +                "luminance_lut":
> +                [
> +                    2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221,
> +                    2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067,
> +                    2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943,
> +                    2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861,
> +                    2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801,
> +                    2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766,
> +                    2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766,
> +                    2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795,
> +                    2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846,
> +                    2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933,
> +                    2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052,
> +                    2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227
> +                ],
> +                "sigma": 0.005,
> +                "sigma_Cb": 0.005
> +            }
> +        },
> +        {
> +            "rpi.contrast":
> +            {
> +                "ce_enable": 1,
> +                "gamma_curve":
> +                [
> +                    0, 0,
> +                    1024, 5040,
> +                    2048, 9338,
> +                    3072, 12356,
> +                    4096, 15312,
> +                    5120, 18051,
> +                    6144, 20790,
> +                    7168, 23193,
> +                    8192, 25744,
> +                    9216, 27942,
> +                    10240, 30035,
> +                    11264, 32005,
> +                    12288, 33975,
> +                    13312, 35815,
> +                    14336, 37600,
> +                    15360, 39168,
> +                    16384, 40642,
> +                    18432, 43379,
> +                    20480, 45749,
> +                    22528, 47753,
> +                    24576, 49621,
> +                    26624, 51253,
> +                    28672, 52698,
> +                    30720, 53796,
> +                    32768, 54876,
> +                    36864, 57012,
> +                    40960, 58656,
> +                    45056, 59954,
> +                    49152, 61183,
> +                    53248, 62355,
> +                    57344, 63419,
> +                    61440, 64476,
> +                    65535, 65535
> +                ]
> +            }
> +        },
> +        {
> +            "rpi.sharpen": { }
> +        },
> +        {
> +            "rpi.ccm":
> +            {
> +                "ccms": [
> +                    {
> +                        "ct": 3900,
> +                        "ccm":
> +                        [
> +                            1.54659, -0.17707, -0.36953,
> +                            -0.51471, 1.72733, -0.21262,
> +                            0.06667, -0.92279, 1.85612
> +                        ]
> +                    }
> +                ]
> +            }
> +        }
> +    ]
> +}
> \ No newline at end of file
> diff --git a/src/ipa/rpi/vc4/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
> index 8c34a1a5..6b4d443f 100644
> --- a/src/ipa/rpi/vc4/data/meson.build
> +++ b/src/ipa/rpi/vc4/data/meson.build
> @@ -8,6 +8,7 @@ conf_files = files([
>      'imx296.json',
>      'imx296_mono.json',
>      'imx378.json',
> +    'imx462.json',
>      'imx477.json',
>      'imx477_noir.json',
>      'imx477_scientific.json',
> --
> 2.43.0
>
Geoffrey Van Landeghem Nov. 15, 2024, 2:29 p.m. UTC | #2
Hi David,

Neither the IMX327, nor the IMX426 tuning files actually present good
camera calibration. They're just a copy of IMX290 (color). I've been
hesitating to add those copies because of that, as without them it
would be obvious that customers need to bring their own tuning. On the
other hand, adding them makes it more of a plug and play solution, and
if someone is not pleased with the output they can always start tuning
the camera themselves. In the end, as discussed in the libcamera fork
for RPI, we decided on adding the plain copies. Unfortunately I don't
own the equipment to perform good camera tuning, otherwise I would
have done the job. I don't even own the IMX327, I only own the
Inno-maker IMX426 (which is of questionable quality).
The approach for Pi5 would be similar, in that we copy the IMX290
tuning just to get it going, and see if someone in the future is
interested in providing a better tune. Actually, regarding those
copies, there is already my PR for that on the Raspberry Pi fork for
libcamera. I hope that's good enough.

Kind regards,
Geoffrey Van Landeghem

Op vr 15 nov 2024 om 14:47 schreef David Plowman
<david.plowman@raspberrypi.com>:
>
> Hi Geoffrey
>
> Thanks for sending this, always pleased to get support for new
> cameras! Just a few questions...
>
> There isn't much in the way of colour tuning - can you say if this is
> perhaps a mono sensor, or is it the case that someone might need to do
> more colour tuning in future?
>
> Generally we like to support the same sensors on Pi 5 as Pi 4, but I'm
> guessing it's not possible for you to make a Pi 5 tuning as well, is
> that right?
>
> Thanks
> David
>
> On Wed, 13 Nov 2024 at 22:44, Geoffrey Van Landeghem
> <geoffrey.vl@gmail.com> wrote:
> >
> > Signed-off-by: Geoffrey Van Landeghem <geoffrey.vl@gmail.com>
> > ---
> >  src/ipa/rpi/vc4/data/imx462.json | 214 +++++++++++++++++++++++++++++++
> >  src/ipa/rpi/vc4/data/meson.build |   1 +
> >  2 files changed, 215 insertions(+)
> >  create mode 100644 src/ipa/rpi/vc4/data/imx462.json
> >
> > diff --git a/src/ipa/rpi/vc4/data/imx462.json b/src/ipa/rpi/vc4/data/imx462.json
> > new file mode 100644
> > index 00000000..8f41bf51
> > --- /dev/null
> > +++ b/src/ipa/rpi/vc4/data/imx462.json
> > @@ -0,0 +1,214 @@
> > +{
> > +    "version": 2.0,
> > +    "target": "bcm2835",
> > +    "algorithms": [
> > +        {
> > +            "rpi.black_level":
> > +            {
> > +                "black_level": 3840
> > +            }
> > +        },
> > +        {
> > +            "rpi.dpc": { }
> > +        },
> > +        {
> > +            "rpi.lux":
> > +            {
> > +                "reference_shutter_speed": 6813,
> > +                "reference_gain": 1.0,
> > +                "reference_aperture": 1.0,
> > +                "reference_lux": 890,
> > +                "reference_Y": 12900
> > +            }
> > +        },
> > +        {
> > +            "rpi.noise":
> > +            {
> > +                "reference_constant": 0,
> > +                "reference_slope": 2.67
> > +            }
> > +        },
> > +        {
> > +            "rpi.geq":
> > +            {
> > +                "offset": 187,
> > +                "slope": 0.00842
> > +            }
> > +        },
> > +        {
> > +            "rpi.sdn": { }
> > +        },
> > +        {
> > +            "rpi.awb":
> > +            {
> > +                "bayes": 0
> > +            }
> > +        },
> > +        {
> > +            "rpi.agc":
> > +            {
> > +                "speed": 0.2,
> > +                "metering_modes":
> > +                {
> > +                    "matrix":
> > +                    {
> > +                        "weights":
> > +                        [
> > +                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
> > +                        ]
> > +                    },
> > +                    "centre-weighted":
> > +                    {
> > +                        "weights":
> > +                        [
> > +                            3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
> > +                        ]
> > +                    },
> > +                    "spot":
> > +                    {
> > +                        "weights":
> > +                        [
> > +                            2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
> > +                        ]
> > +                    }
> > +                },
> > +                "exposure_modes":
> > +                {
> > +                    "normal":
> > +                    {
> > +                        "shutter": [ 10, 30000, 60000 ],
> > +                        "gain": [ 1.0, 2.0, 8.0 ]
> > +                    },
> > +                    "short":
> > +                    {
> > +                        "shutter": [ 10, 5000, 10000, 20000, 120000 ],
> > +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                    },
> > +                    "long":
> > +                    {
> > +                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                    }
> > +                },
> > +                "constraint_modes":
> > +                {
> > +                    "normal": [  ],
> > +                    "highlight": [
> > +                        {
> > +                            "bound": "LOWER",
> > +                            "q_lo": 0.98,
> > +                            "q_hi": 1.0,
> > +                            "y_target":
> > +                            [
> > +                                0, 0.5,
> > +                                1000, 0.5
> > +                            ]
> > +                        },
> > +                        {
> > +                            "bound": "UPPER",
> > +                            "q_lo": 0.98,
> > +                            "q_hi": 1.0,
> > +                            "y_target":
> > +                            [
> > +                                0, 0.8,
> > +                                1000, 0.8
> > +                            ]
> > +                        }
> > +                    ]
> > +                },
> > +                "y_target":
> > +                [
> > +                    0, 0.16,
> > +                    1000, 0.16,
> > +                    10000, 0.16
> > +                ]
> > +            }
> > +        },
> > +        {
> > +            "rpi.alsc":
> > +            {
> > +                "omega": 1.3,
> > +                "n_iter": 100,
> > +                "luminance_strength": 0.7,
> > +                "luminance_lut":
> > +                [
> > +                    2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221,
> > +                    2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067,
> > +                    2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943,
> > +                    2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861,
> > +                    2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801,
> > +                    2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766,
> > +                    2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766,
> > +                    2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795,
> > +                    2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846,
> > +                    2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933,
> > +                    2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052,
> > +                    2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227
> > +                ],
> > +                "sigma": 0.005,
> > +                "sigma_Cb": 0.005
> > +            }
> > +        },
> > +        {
> > +            "rpi.contrast":
> > +            {
> > +                "ce_enable": 1,
> > +                "gamma_curve":
> > +                [
> > +                    0, 0,
> > +                    1024, 5040,
> > +                    2048, 9338,
> > +                    3072, 12356,
> > +                    4096, 15312,
> > +                    5120, 18051,
> > +                    6144, 20790,
> > +                    7168, 23193,
> > +                    8192, 25744,
> > +                    9216, 27942,
> > +                    10240, 30035,
> > +                    11264, 32005,
> > +                    12288, 33975,
> > +                    13312, 35815,
> > +                    14336, 37600,
> > +                    15360, 39168,
> > +                    16384, 40642,
> > +                    18432, 43379,
> > +                    20480, 45749,
> > +                    22528, 47753,
> > +                    24576, 49621,
> > +                    26624, 51253,
> > +                    28672, 52698,
> > +                    30720, 53796,
> > +                    32768, 54876,
> > +                    36864, 57012,
> > +                    40960, 58656,
> > +                    45056, 59954,
> > +                    49152, 61183,
> > +                    53248, 62355,
> > +                    57344, 63419,
> > +                    61440, 64476,
> > +                    65535, 65535
> > +                ]
> > +            }
> > +        },
> > +        {
> > +            "rpi.sharpen": { }
> > +        },
> > +        {
> > +            "rpi.ccm":
> > +            {
> > +                "ccms": [
> > +                    {
> > +                        "ct": 3900,
> > +                        "ccm":
> > +                        [
> > +                            1.54659, -0.17707, -0.36953,
> > +                            -0.51471, 1.72733, -0.21262,
> > +                            0.06667, -0.92279, 1.85612
> > +                        ]
> > +                    }
> > +                ]
> > +            }
> > +        }
> > +    ]
> > +}
> > \ No newline at end of file
> > diff --git a/src/ipa/rpi/vc4/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
> > index 8c34a1a5..6b4d443f 100644
> > --- a/src/ipa/rpi/vc4/data/meson.build
> > +++ b/src/ipa/rpi/vc4/data/meson.build
> > @@ -8,6 +8,7 @@ conf_files = files([
> >      'imx296.json',
> >      'imx296_mono.json',
> >      'imx378.json',
> > +    'imx462.json',
> >      'imx477.json',
> >      'imx477_noir.json',
> >      'imx477_scientific.json',
> > --
> > 2.43.0
> >
David Plowman Nov. 15, 2024, 3:31 p.m. UTC | #3
Hi Geoffrey

Thanks for the reply!

On Fri, 15 Nov 2024 at 14:30, Geoffrey Van Landeghem
<geoffrey.vl@gmail.com> wrote:
>
> Hi David,
>
> Neither the IMX327, nor the IMX426 tuning files actually present good
> camera calibration. They're just a copy of IMX290 (color). I've been
> hesitating to add those copies because of that, as without them it
> would be obvious that customers need to bring their own tuning. On the
> other hand, adding them makes it more of a plug and play solution, and
> if someone is not pleased with the output they can always start tuning
> the camera themselves. In the end, as discussed in the libcamera fork
> for RPI, we decided on adding the plain copies. Unfortunately I don't
> own the equipment to perform good camera tuning, otherwise I would
> have done the job. I don't even own the IMX327, I only own the
> Inno-maker IMX426 (which is of questionable quality).
> The approach for Pi5 would be similar, in that we copy the IMX290
> tuning just to get it going, and see if someone in the future is
> interested in providing a better tune. Actually, regarding those
> copies, there is already my PR for that on the Raspberry Pi fork for
> libcamera. I hope that's good enough.

Great, thanks for the clarification. I certainly don't want to stop us
from accepting changes that make life easier for other developers, so
I think this is fine.

I wonder if we might add a comment to the file to the effect that this
is an interim tuning. That would at least clarify the status for folks
(like me) who aren't familiar with the file's provenance.
Unfortunately JSON doesn't (strictly speaking) allow comments, so
perhaps we could add

"comment": "This is an interim tuning only. Please consider doing a
more formal tuning for your application.",

just below "target". I think the parser ignores fields it's not
expecting, so this should be fine (better double-check, though!).

With that change I'd be happy to add my tag to both these files.

@Naush, would you be OK with that too?

Thanks again!
David

>
> Kind regards,
> Geoffrey Van Landeghem
>
> Op vr 15 nov 2024 om 14:47 schreef David Plowman
> <david.plowman@raspberrypi.com>:
> >
> > Hi Geoffrey
> >
> > Thanks for sending this, always pleased to get support for new
> > cameras! Just a few questions...
> >
> > There isn't much in the way of colour tuning - can you say if this is
> > perhaps a mono sensor, or is it the case that someone might need to do
> > more colour tuning in future?
> >
> > Generally we like to support the same sensors on Pi 5 as Pi 4, but I'm
> > guessing it's not possible for you to make a Pi 5 tuning as well, is
> > that right?
> >
> > Thanks
> > David
> >
> > On Wed, 13 Nov 2024 at 22:44, Geoffrey Van Landeghem
> > <geoffrey.vl@gmail.com> wrote:
> > >
> > > Signed-off-by: Geoffrey Van Landeghem <geoffrey.vl@gmail.com>
> > > ---
> > >  src/ipa/rpi/vc4/data/imx462.json | 214 +++++++++++++++++++++++++++++++
> > >  src/ipa/rpi/vc4/data/meson.build |   1 +
> > >  2 files changed, 215 insertions(+)
> > >  create mode 100644 src/ipa/rpi/vc4/data/imx462.json
> > >
> > > diff --git a/src/ipa/rpi/vc4/data/imx462.json b/src/ipa/rpi/vc4/data/imx462.json
> > > new file mode 100644
> > > index 00000000..8f41bf51
> > > --- /dev/null
> > > +++ b/src/ipa/rpi/vc4/data/imx462.json
> > > @@ -0,0 +1,214 @@
> > > +{
> > > +    "version": 2.0,
> > > +    "target": "bcm2835",
> > > +    "algorithms": [
> > > +        {
> > > +            "rpi.black_level":
> > > +            {
> > > +                "black_level": 3840
> > > +            }
> > > +        },
> > > +        {
> > > +            "rpi.dpc": { }
> > > +        },
> > > +        {
> > > +            "rpi.lux":
> > > +            {
> > > +                "reference_shutter_speed": 6813,
> > > +                "reference_gain": 1.0,
> > > +                "reference_aperture": 1.0,
> > > +                "reference_lux": 890,
> > > +                "reference_Y": 12900
> > > +            }
> > > +        },
> > > +        {
> > > +            "rpi.noise":
> > > +            {
> > > +                "reference_constant": 0,
> > > +                "reference_slope": 2.67
> > > +            }
> > > +        },
> > > +        {
> > > +            "rpi.geq":
> > > +            {
> > > +                "offset": 187,
> > > +                "slope": 0.00842
> > > +            }
> > > +        },
> > > +        {
> > > +            "rpi.sdn": { }
> > > +        },
> > > +        {
> > > +            "rpi.awb":
> > > +            {
> > > +                "bayes": 0
> > > +            }
> > > +        },
> > > +        {
> > > +            "rpi.agc":
> > > +            {
> > > +                "speed": 0.2,
> > > +                "metering_modes":
> > > +                {
> > > +                    "matrix":
> > > +                    {
> > > +                        "weights":
> > > +                        [
> > > +                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
> > > +                        ]
> > > +                    },
> > > +                    "centre-weighted":
> > > +                    {
> > > +                        "weights":
> > > +                        [
> > > +                            3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
> > > +                        ]
> > > +                    },
> > > +                    "spot":
> > > +                    {
> > > +                        "weights":
> > > +                        [
> > > +                            2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
> > > +                        ]
> > > +                    }
> > > +                },
> > > +                "exposure_modes":
> > > +                {
> > > +                    "normal":
> > > +                    {
> > > +                        "shutter": [ 10, 30000, 60000 ],
> > > +                        "gain": [ 1.0, 2.0, 8.0 ]
> > > +                    },
> > > +                    "short":
> > > +                    {
> > > +                        "shutter": [ 10, 5000, 10000, 20000, 120000 ],
> > > +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > > +                    },
> > > +                    "long":
> > > +                    {
> > > +                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > > +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > > +                    }
> > > +                },
> > > +                "constraint_modes":
> > > +                {
> > > +                    "normal": [  ],
> > > +                    "highlight": [
> > > +                        {
> > > +                            "bound": "LOWER",
> > > +                            "q_lo": 0.98,
> > > +                            "q_hi": 1.0,
> > > +                            "y_target":
> > > +                            [
> > > +                                0, 0.5,
> > > +                                1000, 0.5
> > > +                            ]
> > > +                        },
> > > +                        {
> > > +                            "bound": "UPPER",
> > > +                            "q_lo": 0.98,
> > > +                            "q_hi": 1.0,
> > > +                            "y_target":
> > > +                            [
> > > +                                0, 0.8,
> > > +                                1000, 0.8
> > > +                            ]
> > > +                        }
> > > +                    ]
> > > +                },
> > > +                "y_target":
> > > +                [
> > > +                    0, 0.16,
> > > +                    1000, 0.16,
> > > +                    10000, 0.16
> > > +                ]
> > > +            }
> > > +        },
> > > +        {
> > > +            "rpi.alsc":
> > > +            {
> > > +                "omega": 1.3,
> > > +                "n_iter": 100,
> > > +                "luminance_strength": 0.7,
> > > +                "luminance_lut":
> > > +                [
> > > +                    2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221,
> > > +                    2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067,
> > > +                    2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943,
> > > +                    2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861,
> > > +                    2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801,
> > > +                    2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766,
> > > +                    2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766,
> > > +                    2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795,
> > > +                    2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846,
> > > +                    2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933,
> > > +                    2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052,
> > > +                    2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227
> > > +                ],
> > > +                "sigma": 0.005,
> > > +                "sigma_Cb": 0.005
> > > +            }
> > > +        },
> > > +        {
> > > +            "rpi.contrast":
> > > +            {
> > > +                "ce_enable": 1,
> > > +                "gamma_curve":
> > > +                [
> > > +                    0, 0,
> > > +                    1024, 5040,
> > > +                    2048, 9338,
> > > +                    3072, 12356,
> > > +                    4096, 15312,
> > > +                    5120, 18051,
> > > +                    6144, 20790,
> > > +                    7168, 23193,
> > > +                    8192, 25744,
> > > +                    9216, 27942,
> > > +                    10240, 30035,
> > > +                    11264, 32005,
> > > +                    12288, 33975,
> > > +                    13312, 35815,
> > > +                    14336, 37600,
> > > +                    15360, 39168,
> > > +                    16384, 40642,
> > > +                    18432, 43379,
> > > +                    20480, 45749,
> > > +                    22528, 47753,
> > > +                    24576, 49621,
> > > +                    26624, 51253,
> > > +                    28672, 52698,
> > > +                    30720, 53796,
> > > +                    32768, 54876,
> > > +                    36864, 57012,
> > > +                    40960, 58656,
> > > +                    45056, 59954,
> > > +                    49152, 61183,
> > > +                    53248, 62355,
> > > +                    57344, 63419,
> > > +                    61440, 64476,
> > > +                    65535, 65535
> > > +                ]
> > > +            }
> > > +        },
> > > +        {
> > > +            "rpi.sharpen": { }
> > > +        },
> > > +        {
> > > +            "rpi.ccm":
> > > +            {
> > > +                "ccms": [
> > > +                    {
> > > +                        "ct": 3900,
> > > +                        "ccm":
> > > +                        [
> > > +                            1.54659, -0.17707, -0.36953,
> > > +                            -0.51471, 1.72733, -0.21262,
> > > +                            0.06667, -0.92279, 1.85612
> > > +                        ]
> > > +                    }
> > > +                ]
> > > +            }
> > > +        }
> > > +    ]
> > > +}
> > > \ No newline at end of file
> > > diff --git a/src/ipa/rpi/vc4/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
> > > index 8c34a1a5..6b4d443f 100644
> > > --- a/src/ipa/rpi/vc4/data/meson.build
> > > +++ b/src/ipa/rpi/vc4/data/meson.build
> > > @@ -8,6 +8,7 @@ conf_files = files([
> > >      'imx296.json',
> > >      'imx296_mono.json',
> > >      'imx378.json',
> > > +    'imx462.json',
> > >      'imx477.json',
> > >      'imx477_noir.json',
> > >      'imx477_scientific.json',
> > > --
> > > 2.43.0
> > >
Laurent Pinchart Nov. 15, 2024, 5:05 p.m. UTC | #4
On Fri, Nov 15, 2024 at 03:31:50PM +0000, David Plowman wrote:
> Hi Geoffrey
> 
> Thanks for the reply!
> 
> On Fri, 15 Nov 2024 at 14:30, Geoffrey Van Landeghem
> <geoffrey.vl@gmail.com> wrote:
> >
> > Hi David,
> >
> > Neither the IMX327, nor the IMX426 tuning files actually present good
> > camera calibration. They're just a copy of IMX290 (color). I've been
> > hesitating to add those copies because of that, as without them it
> > would be obvious that customers need to bring their own tuning. On the
> > other hand, adding them makes it more of a plug and play solution, and
> > if someone is not pleased with the output they can always start tuning
> > the camera themselves. In the end, as discussed in the libcamera fork
> > for RPI, we decided on adding the plain copies. Unfortunately I don't
> > own the equipment to perform good camera tuning, otherwise I would
> > have done the job. I don't even own the IMX327, I only own the
> > Inno-maker IMX426 (which is of questionable quality).
> > The approach for Pi5 would be similar, in that we copy the IMX290
> > tuning just to get it going, and see if someone in the future is
> > interested in providing a better tune. Actually, regarding those
> > copies, there is already my PR for that on the Raspberry Pi fork for
> > libcamera. I hope that's good enough.
> 
> Great, thanks for the clarification. I certainly don't want to stop us
> from accepting changes that make life easier for other developers, so
> I think this is fine.
> 
> I wonder if we might add a comment to the file to the effect that this
> is an interim tuning. That would at least clarify the status for folks
> (like me) who aren't familiar with the file's provenance.
> Unfortunately JSON doesn't (strictly speaking) allow comments, so

We parse JSON files as YAML, so comments shouldn't make the parser
choke. It depends if you want to keep compatibility with JSON parsers.

> perhaps we could add
> 
> "comment": "This is an interim tuning only. Please consider doing a
> more formal tuning for your application.",

Or maybe "description" instead of "comment" ? Maybe I'm too influenced
by DT bindings :-)

> just below "target". I think the parser ignores fields it's not
> expecting, so this should be fine (better double-check, though!).
> 
> With that change I'd be happy to add my tag to both these files.
> 
> @Naush, would you be OK with that too?
> 
> Thanks again!
> David
> 
> >
> > Kind regards,
> > Geoffrey Van Landeghem
> >
> > Op vr 15 nov 2024 om 14:47 schreef David Plowman
> > <david.plowman@raspberrypi.com>:
> > >
> > > Hi Geoffrey
> > >
> > > Thanks for sending this, always pleased to get support for new
> > > cameras! Just a few questions...
> > >
> > > There isn't much in the way of colour tuning - can you say if this is
> > > perhaps a mono sensor, or is it the case that someone might need to do
> > > more colour tuning in future?
> > >
> > > Generally we like to support the same sensors on Pi 5 as Pi 4, but I'm
> > > guessing it's not possible for you to make a Pi 5 tuning as well, is
> > > that right?
> > >
> > > Thanks
> > > David
> > >
> > > On Wed, 13 Nov 2024 at 22:44, Geoffrey Van Landeghem
> > > <geoffrey.vl@gmail.com> wrote:
> > > >
> > > > Signed-off-by: Geoffrey Van Landeghem <geoffrey.vl@gmail.com>
> > > > ---
> > > >  src/ipa/rpi/vc4/data/imx462.json | 214 +++++++++++++++++++++++++++++++
> > > >  src/ipa/rpi/vc4/data/meson.build |   1 +
> > > >  2 files changed, 215 insertions(+)
> > > >  create mode 100644 src/ipa/rpi/vc4/data/imx462.json
> > > >
> > > > diff --git a/src/ipa/rpi/vc4/data/imx462.json b/src/ipa/rpi/vc4/data/imx462.json
> > > > new file mode 100644
> > > > index 00000000..8f41bf51
> > > > --- /dev/null
> > > > +++ b/src/ipa/rpi/vc4/data/imx462.json
> > > > @@ -0,0 +1,214 @@
> > > > +{
> > > > +    "version": 2.0,
> > > > +    "target": "bcm2835",
> > > > +    "algorithms": [
> > > > +        {
> > > > +            "rpi.black_level":
> > > > +            {
> > > > +                "black_level": 3840
> > > > +            }
> > > > +        },
> > > > +        {
> > > > +            "rpi.dpc": { }
> > > > +        },
> > > > +        {
> > > > +            "rpi.lux":
> > > > +            {
> > > > +                "reference_shutter_speed": 6813,
> > > > +                "reference_gain": 1.0,
> > > > +                "reference_aperture": 1.0,
> > > > +                "reference_lux": 890,
> > > > +                "reference_Y": 12900
> > > > +            }
> > > > +        },
> > > > +        {
> > > > +            "rpi.noise":
> > > > +            {
> > > > +                "reference_constant": 0,
> > > > +                "reference_slope": 2.67
> > > > +            }
> > > > +        },
> > > > +        {
> > > > +            "rpi.geq":
> > > > +            {
> > > > +                "offset": 187,
> > > > +                "slope": 0.00842
> > > > +            }
> > > > +        },
> > > > +        {
> > > > +            "rpi.sdn": { }
> > > > +        },
> > > > +        {
> > > > +            "rpi.awb":
> > > > +            {
> > > > +                "bayes": 0
> > > > +            }
> > > > +        },
> > > > +        {
> > > > +            "rpi.agc":
> > > > +            {
> > > > +                "speed": 0.2,
> > > > +                "metering_modes":
> > > > +                {
> > > > +                    "matrix":
> > > > +                    {
> > > > +                        "weights":
> > > > +                        [
> > > > +                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
> > > > +                        ]
> > > > +                    },
> > > > +                    "centre-weighted":
> > > > +                    {
> > > > +                        "weights":
> > > > +                        [
> > > > +                            3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
> > > > +                        ]
> > > > +                    },
> > > > +                    "spot":
> > > > +                    {
> > > > +                        "weights":
> > > > +                        [
> > > > +                            2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
> > > > +                        ]
> > > > +                    }
> > > > +                },
> > > > +                "exposure_modes":
> > > > +                {
> > > > +                    "normal":
> > > > +                    {
> > > > +                        "shutter": [ 10, 30000, 60000 ],
> > > > +                        "gain": [ 1.0, 2.0, 8.0 ]
> > > > +                    },
> > > > +                    "short":
> > > > +                    {
> > > > +                        "shutter": [ 10, 5000, 10000, 20000, 120000 ],
> > > > +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > > > +                    },
> > > > +                    "long":
> > > > +                    {
> > > > +                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > > > +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > > > +                    }
> > > > +                },
> > > > +                "constraint_modes":
> > > > +                {
> > > > +                    "normal": [  ],
> > > > +                    "highlight": [
> > > > +                        {
> > > > +                            "bound": "LOWER",
> > > > +                            "q_lo": 0.98,
> > > > +                            "q_hi": 1.0,
> > > > +                            "y_target":
> > > > +                            [
> > > > +                                0, 0.5,
> > > > +                                1000, 0.5
> > > > +                            ]
> > > > +                        },
> > > > +                        {
> > > > +                            "bound": "UPPER",
> > > > +                            "q_lo": 0.98,
> > > > +                            "q_hi": 1.0,
> > > > +                            "y_target":
> > > > +                            [
> > > > +                                0, 0.8,
> > > > +                                1000, 0.8
> > > > +                            ]
> > > > +                        }
> > > > +                    ]
> > > > +                },
> > > > +                "y_target":
> > > > +                [
> > > > +                    0, 0.16,
> > > > +                    1000, 0.16,
> > > > +                    10000, 0.16
> > > > +                ]
> > > > +            }
> > > > +        },
> > > > +        {
> > > > +            "rpi.alsc":
> > > > +            {
> > > > +                "omega": 1.3,
> > > > +                "n_iter": 100,
> > > > +                "luminance_strength": 0.7,
> > > > +                "luminance_lut":
> > > > +                [
> > > > +                    2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221,
> > > > +                    2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067,
> > > > +                    2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943,
> > > > +                    2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861,
> > > > +                    2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801,
> > > > +                    2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766,
> > > > +                    2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766,
> > > > +                    2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795,
> > > > +                    2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846,
> > > > +                    2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933,
> > > > +                    2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052,
> > > > +                    2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227
> > > > +                ],
> > > > +                "sigma": 0.005,
> > > > +                "sigma_Cb": 0.005
> > > > +            }
> > > > +        },
> > > > +        {
> > > > +            "rpi.contrast":
> > > > +            {
> > > > +                "ce_enable": 1,
> > > > +                "gamma_curve":
> > > > +                [
> > > > +                    0, 0,
> > > > +                    1024, 5040,
> > > > +                    2048, 9338,
> > > > +                    3072, 12356,
> > > > +                    4096, 15312,
> > > > +                    5120, 18051,
> > > > +                    6144, 20790,
> > > > +                    7168, 23193,
> > > > +                    8192, 25744,
> > > > +                    9216, 27942,
> > > > +                    10240, 30035,
> > > > +                    11264, 32005,
> > > > +                    12288, 33975,
> > > > +                    13312, 35815,
> > > > +                    14336, 37600,
> > > > +                    15360, 39168,
> > > > +                    16384, 40642,
> > > > +                    18432, 43379,
> > > > +                    20480, 45749,
> > > > +                    22528, 47753,
> > > > +                    24576, 49621,
> > > > +                    26624, 51253,
> > > > +                    28672, 52698,
> > > > +                    30720, 53796,
> > > > +                    32768, 54876,
> > > > +                    36864, 57012,
> > > > +                    40960, 58656,
> > > > +                    45056, 59954,
> > > > +                    49152, 61183,
> > > > +                    53248, 62355,
> > > > +                    57344, 63419,
> > > > +                    61440, 64476,
> > > > +                    65535, 65535
> > > > +                ]
> > > > +            }
> > > > +        },
> > > > +        {
> > > > +            "rpi.sharpen": { }
> > > > +        },
> > > > +        {
> > > > +            "rpi.ccm":
> > > > +            {
> > > > +                "ccms": [
> > > > +                    {
> > > > +                        "ct": 3900,
> > > > +                        "ccm":
> > > > +                        [
> > > > +                            1.54659, -0.17707, -0.36953,
> > > > +                            -0.51471, 1.72733, -0.21262,
> > > > +                            0.06667, -0.92279, 1.85612
> > > > +                        ]
> > > > +                    }
> > > > +                ]
> > > > +            }
> > > > +        }
> > > > +    ]
> > > > +}
> > > > \ No newline at end of file
> > > > diff --git a/src/ipa/rpi/vc4/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
> > > > index 8c34a1a5..6b4d443f 100644
> > > > --- a/src/ipa/rpi/vc4/data/meson.build
> > > > +++ b/src/ipa/rpi/vc4/data/meson.build
> > > > @@ -8,6 +8,7 @@ conf_files = files([
> > > >      'imx296.json',
> > > >      'imx296_mono.json',
> > > >      'imx378.json',
> > > > +    'imx462.json',
> > > >      'imx477.json',
> > > >      'imx477_noir.json',
> > > >      'imx477_scientific.json',
> > > > --
> > > > 2.43.0
> > > >
David Plowman Nov. 15, 2024, 5:24 p.m. UTC | #5
On Fri, 15 Nov 2024 at 17:05, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> On Fri, Nov 15, 2024 at 03:31:50PM +0000, David Plowman wrote:
> > Hi Geoffrey
> >
> > Thanks for the reply!
> >
> > On Fri, 15 Nov 2024 at 14:30, Geoffrey Van Landeghem
> > <geoffrey.vl@gmail.com> wrote:
> > >
> > > Hi David,
> > >
> > > Neither the IMX327, nor the IMX426 tuning files actually present good
> > > camera calibration. They're just a copy of IMX290 (color). I've been
> > > hesitating to add those copies because of that, as without them it
> > > would be obvious that customers need to bring their own tuning. On the
> > > other hand, adding them makes it more of a plug and play solution, and
> > > if someone is not pleased with the output they can always start tuning
> > > the camera themselves. In the end, as discussed in the libcamera fork
> > > for RPI, we decided on adding the plain copies. Unfortunately I don't
> > > own the equipment to perform good camera tuning, otherwise I would
> > > have done the job. I don't even own the IMX327, I only own the
> > > Inno-maker IMX426 (which is of questionable quality).
> > > The approach for Pi5 would be similar, in that we copy the IMX290
> > > tuning just to get it going, and see if someone in the future is
> > > interested in providing a better tune. Actually, regarding those
> > > copies, there is already my PR for that on the Raspberry Pi fork for
> > > libcamera. I hope that's good enough.
> >
> > Great, thanks for the clarification. I certainly don't want to stop us
> > from accepting changes that make life easier for other developers, so
> > I think this is fine.
> >
> > I wonder if we might add a comment to the file to the effect that this
> > is an interim tuning. That would at least clarify the status for folks
> > (like me) who aren't familiar with the file's provenance.
> > Unfortunately JSON doesn't (strictly speaking) allow comments, so
>
> We parse JSON files as YAML, so comments shouldn't make the parser
> choke. It depends if you want to keep compatibility with JSON parsers.
>
> > perhaps we could add
> >
> > "comment": "This is an interim tuning only. Please consider doing a
> > more formal tuning for your application.",
>
> Or maybe "description" instead of "comment" ? Maybe I'm too influenced
> by DT bindings :-)

Yep, I like "description" too, it sounds slightly more important,
which I think it actually is!

David

>
> > just below "target". I think the parser ignores fields it's not
> > expecting, so this should be fine (better double-check, though!).
> >
> > With that change I'd be happy to add my tag to both these files.
> >
> > @Naush, would you be OK with that too?
> >
> > Thanks again!
> > David
> >
> > >
> > > Kind regards,
> > > Geoffrey Van Landeghem
> > >
> > > Op vr 15 nov 2024 om 14:47 schreef David Plowman
> > > <david.plowman@raspberrypi.com>:
> > > >
> > > > Hi Geoffrey
> > > >
> > > > Thanks for sending this, always pleased to get support for new
> > > > cameras! Just a few questions...
> > > >
> > > > There isn't much in the way of colour tuning - can you say if this is
> > > > perhaps a mono sensor, or is it the case that someone might need to do
> > > > more colour tuning in future?
> > > >
> > > > Generally we like to support the same sensors on Pi 5 as Pi 4, but I'm
> > > > guessing it's not possible for you to make a Pi 5 tuning as well, is
> > > > that right?
> > > >
> > > > Thanks
> > > > David
> > > >
> > > > On Wed, 13 Nov 2024 at 22:44, Geoffrey Van Landeghem
> > > > <geoffrey.vl@gmail.com> wrote:
> > > > >
> > > > > Signed-off-by: Geoffrey Van Landeghem <geoffrey.vl@gmail.com>
> > > > > ---
> > > > >  src/ipa/rpi/vc4/data/imx462.json | 214 +++++++++++++++++++++++++++++++
> > > > >  src/ipa/rpi/vc4/data/meson.build |   1 +
> > > > >  2 files changed, 215 insertions(+)
> > > > >  create mode 100644 src/ipa/rpi/vc4/data/imx462.json
> > > > >
> > > > > diff --git a/src/ipa/rpi/vc4/data/imx462.json b/src/ipa/rpi/vc4/data/imx462.json
> > > > > new file mode 100644
> > > > > index 00000000..8f41bf51
> > > > > --- /dev/null
> > > > > +++ b/src/ipa/rpi/vc4/data/imx462.json
> > > > > @@ -0,0 +1,214 @@
> > > > > +{
> > > > > +    "version": 2.0,
> > > > > +    "target": "bcm2835",
> > > > > +    "algorithms": [
> > > > > +        {
> > > > > +            "rpi.black_level":
> > > > > +            {
> > > > > +                "black_level": 3840
> > > > > +            }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.dpc": { }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.lux":
> > > > > +            {
> > > > > +                "reference_shutter_speed": 6813,
> > > > > +                "reference_gain": 1.0,
> > > > > +                "reference_aperture": 1.0,
> > > > > +                "reference_lux": 890,
> > > > > +                "reference_Y": 12900
> > > > > +            }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.noise":
> > > > > +            {
> > > > > +                "reference_constant": 0,
> > > > > +                "reference_slope": 2.67
> > > > > +            }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.geq":
> > > > > +            {
> > > > > +                "offset": 187,
> > > > > +                "slope": 0.00842
> > > > > +            }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.sdn": { }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.awb":
> > > > > +            {
> > > > > +                "bayes": 0
> > > > > +            }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.agc":
> > > > > +            {
> > > > > +                "speed": 0.2,
> > > > > +                "metering_modes":
> > > > > +                {
> > > > > +                    "matrix":
> > > > > +                    {
> > > > > +                        "weights":
> > > > > +                        [
> > > > > +                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
> > > > > +                        ]
> > > > > +                    },
> > > > > +                    "centre-weighted":
> > > > > +                    {
> > > > > +                        "weights":
> > > > > +                        [
> > > > > +                            3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
> > > > > +                        ]
> > > > > +                    },
> > > > > +                    "spot":
> > > > > +                    {
> > > > > +                        "weights":
> > > > > +                        [
> > > > > +                            2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
> > > > > +                        ]
> > > > > +                    }
> > > > > +                },
> > > > > +                "exposure_modes":
> > > > > +                {
> > > > > +                    "normal":
> > > > > +                    {
> > > > > +                        "shutter": [ 10, 30000, 60000 ],
> > > > > +                        "gain": [ 1.0, 2.0, 8.0 ]
> > > > > +                    },
> > > > > +                    "short":
> > > > > +                    {
> > > > > +                        "shutter": [ 10, 5000, 10000, 20000, 120000 ],
> > > > > +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > > > > +                    },
> > > > > +                    "long":
> > > > > +                    {
> > > > > +                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > > > > +                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > > > > +                    }
> > > > > +                },
> > > > > +                "constraint_modes":
> > > > > +                {
> > > > > +                    "normal": [  ],
> > > > > +                    "highlight": [
> > > > > +                        {
> > > > > +                            "bound": "LOWER",
> > > > > +                            "q_lo": 0.98,
> > > > > +                            "q_hi": 1.0,
> > > > > +                            "y_target":
> > > > > +                            [
> > > > > +                                0, 0.5,
> > > > > +                                1000, 0.5
> > > > > +                            ]
> > > > > +                        },
> > > > > +                        {
> > > > > +                            "bound": "UPPER",
> > > > > +                            "q_lo": 0.98,
> > > > > +                            "q_hi": 1.0,
> > > > > +                            "y_target":
> > > > > +                            [
> > > > > +                                0, 0.8,
> > > > > +                                1000, 0.8
> > > > > +                            ]
> > > > > +                        }
> > > > > +                    ]
> > > > > +                },
> > > > > +                "y_target":
> > > > > +                [
> > > > > +                    0, 0.16,
> > > > > +                    1000, 0.16,
> > > > > +                    10000, 0.16
> > > > > +                ]
> > > > > +            }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.alsc":
> > > > > +            {
> > > > > +                "omega": 1.3,
> > > > > +                "n_iter": 100,
> > > > > +                "luminance_strength": 0.7,
> > > > > +                "luminance_lut":
> > > > > +                [
> > > > > +                    2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221,
> > > > > +                    2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067,
> > > > > +                    2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943,
> > > > > +                    2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861,
> > > > > +                    2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801,
> > > > > +                    2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766,
> > > > > +                    2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766,
> > > > > +                    2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795,
> > > > > +                    2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846,
> > > > > +                    2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933,
> > > > > +                    2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052,
> > > > > +                    2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227
> > > > > +                ],
> > > > > +                "sigma": 0.005,
> > > > > +                "sigma_Cb": 0.005
> > > > > +            }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.contrast":
> > > > > +            {
> > > > > +                "ce_enable": 1,
> > > > > +                "gamma_curve":
> > > > > +                [
> > > > > +                    0, 0,
> > > > > +                    1024, 5040,
> > > > > +                    2048, 9338,
> > > > > +                    3072, 12356,
> > > > > +                    4096, 15312,
> > > > > +                    5120, 18051,
> > > > > +                    6144, 20790,
> > > > > +                    7168, 23193,
> > > > > +                    8192, 25744,
> > > > > +                    9216, 27942,
> > > > > +                    10240, 30035,
> > > > > +                    11264, 32005,
> > > > > +                    12288, 33975,
> > > > > +                    13312, 35815,
> > > > > +                    14336, 37600,
> > > > > +                    15360, 39168,
> > > > > +                    16384, 40642,
> > > > > +                    18432, 43379,
> > > > > +                    20480, 45749,
> > > > > +                    22528, 47753,
> > > > > +                    24576, 49621,
> > > > > +                    26624, 51253,
> > > > > +                    28672, 52698,
> > > > > +                    30720, 53796,
> > > > > +                    32768, 54876,
> > > > > +                    36864, 57012,
> > > > > +                    40960, 58656,
> > > > > +                    45056, 59954,
> > > > > +                    49152, 61183,
> > > > > +                    53248, 62355,
> > > > > +                    57344, 63419,
> > > > > +                    61440, 64476,
> > > > > +                    65535, 65535
> > > > > +                ]
> > > > > +            }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.sharpen": { }
> > > > > +        },
> > > > > +        {
> > > > > +            "rpi.ccm":
> > > > > +            {
> > > > > +                "ccms": [
> > > > > +                    {
> > > > > +                        "ct": 3900,
> > > > > +                        "ccm":
> > > > > +                        [
> > > > > +                            1.54659, -0.17707, -0.36953,
> > > > > +                            -0.51471, 1.72733, -0.21262,
> > > > > +                            0.06667, -0.92279, 1.85612
> > > > > +                        ]
> > > > > +                    }
> > > > > +                ]
> > > > > +            }
> > > > > +        }
> > > > > +    ]
> > > > > +}
> > > > > \ No newline at end of file
> > > > > diff --git a/src/ipa/rpi/vc4/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
> > > > > index 8c34a1a5..6b4d443f 100644
> > > > > --- a/src/ipa/rpi/vc4/data/meson.build
> > > > > +++ b/src/ipa/rpi/vc4/data/meson.build
> > > > > @@ -8,6 +8,7 @@ conf_files = files([
> > > > >      'imx296.json',
> > > > >      'imx296_mono.json',
> > > > >      'imx378.json',
> > > > > +    'imx462.json',
> > > > >      'imx477.json',
> > > > >      'imx477_noir.json',
> > > > >      'imx477_scientific.json',
> > > > > --
> > > > > 2.43.0
> > > > >
>
> --
> Regards,
>
> Laurent Pinchart

Patch
diff mbox series

diff --git a/src/ipa/rpi/vc4/data/imx462.json b/src/ipa/rpi/vc4/data/imx462.json
new file mode 100644
index 00000000..8f41bf51
--- /dev/null
+++ b/src/ipa/rpi/vc4/data/imx462.json
@@ -0,0 +1,214 @@ 
+{
+    "version": 2.0,
+    "target": "bcm2835",
+    "algorithms": [
+        {
+            "rpi.black_level":
+            {
+                "black_level": 3840
+            }
+        },
+        {
+            "rpi.dpc": { }
+        },
+        {
+            "rpi.lux":
+            {
+                "reference_shutter_speed": 6813,
+                "reference_gain": 1.0,
+                "reference_aperture": 1.0,
+                "reference_lux": 890,
+                "reference_Y": 12900
+            }
+        },
+        {
+            "rpi.noise":
+            {
+                "reference_constant": 0,
+                "reference_slope": 2.67
+            }
+        },
+        {
+            "rpi.geq":
+            {
+                "offset": 187,
+                "slope": 0.00842
+            }
+        },
+        {
+            "rpi.sdn": { }
+        },
+        {
+            "rpi.awb":
+            {
+                "bayes": 0
+            }
+        },
+        {
+            "rpi.agc":
+            {
+                "speed": 0.2,
+                "metering_modes":
+                {
+                    "matrix":
+                    {
+                        "weights":
+                        [
+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+                        ]
+                    },
+                    "centre-weighted":
+                    {
+                        "weights":
+                        [
+                            3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0
+                        ]
+                    },
+                    "spot":
+                    {
+                        "weights":
+                        [
+                            2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+                        ]
+                    }
+                },
+                "exposure_modes":
+                {
+                    "normal":
+                    {
+                        "shutter": [ 10, 30000, 60000 ],
+                        "gain": [ 1.0, 2.0, 8.0 ]
+                    },
+                    "short":
+                    {
+                        "shutter": [ 10, 5000, 10000, 20000, 120000 ],
+                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+                    },
+                    "long":
+                    {
+                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+                    }
+                },
+                "constraint_modes":
+                {
+                    "normal": [  ],
+                    "highlight": [
+                        {
+                            "bound": "LOWER",
+                            "q_lo": 0.98,
+                            "q_hi": 1.0,
+                            "y_target":
+                            [
+                                0, 0.5,
+                                1000, 0.5
+                            ]
+                        },
+                        {
+                            "bound": "UPPER",
+                            "q_lo": 0.98,
+                            "q_hi": 1.0,
+                            "y_target":
+                            [
+                                0, 0.8,
+                                1000, 0.8
+                            ]
+                        }
+                    ]
+                },
+                "y_target":
+                [
+                    0, 0.16,
+                    1000, 0.16,
+                    10000, 0.16
+                ]
+            }
+        },
+        {
+            "rpi.alsc":
+            {
+                "omega": 1.3,
+                "n_iter": 100,
+                "luminance_strength": 0.7,
+                "luminance_lut":
+                [
+                    2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221,
+                    2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067,
+                    2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943,
+                    2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861,
+                    2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801,
+                    2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766,
+                    2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766,
+                    2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795,
+                    2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846,
+                    2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933,
+                    2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052,
+                    2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227
+                ],
+                "sigma": 0.005,
+                "sigma_Cb": 0.005
+            }
+        },
+        {
+            "rpi.contrast":
+            {
+                "ce_enable": 1,
+                "gamma_curve":
+                [
+                    0, 0,
+                    1024, 5040,
+                    2048, 9338,
+                    3072, 12356,
+                    4096, 15312,
+                    5120, 18051,
+                    6144, 20790,
+                    7168, 23193,
+                    8192, 25744,
+                    9216, 27942,
+                    10240, 30035,
+                    11264, 32005,
+                    12288, 33975,
+                    13312, 35815,
+                    14336, 37600,
+                    15360, 39168,
+                    16384, 40642,
+                    18432, 43379,
+                    20480, 45749,
+                    22528, 47753,
+                    24576, 49621,
+                    26624, 51253,
+                    28672, 52698,
+                    30720, 53796,
+                    32768, 54876,
+                    36864, 57012,
+                    40960, 58656,
+                    45056, 59954,
+                    49152, 61183,
+                    53248, 62355,
+                    57344, 63419,
+                    61440, 64476,
+                    65535, 65535
+                ]
+            }
+        },
+        {
+            "rpi.sharpen": { }
+        },
+        {
+            "rpi.ccm":
+            {
+                "ccms": [
+                    {
+                        "ct": 3900,
+                        "ccm":
+                        [
+                            1.54659, -0.17707, -0.36953,
+                            -0.51471, 1.72733, -0.21262,
+                            0.06667, -0.92279, 1.85612
+                        ]
+                    }
+                ]
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/src/ipa/rpi/vc4/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
index 8c34a1a5..6b4d443f 100644
--- a/src/ipa/rpi/vc4/data/meson.build
+++ b/src/ipa/rpi/vc4/data/meson.build
@@ -8,6 +8,7 @@  conf_files = files([
     'imx296.json',
     'imx296_mono.json',
     'imx378.json',
+    'imx462.json',
     'imx477.json',
     'imx477_noir.json',
     'imx477_scientific.json',