[libcamera-devel,2/2] ipa: rpi: vc4: data: Update tuning files for HDR
diff mbox series

Message ID 20230731134833.79687-3-david.plowman@raspberrypi.com
State Superseded
Headers show
Series
  • HDR for Raspberry Pi
Related show

Commit Message

David Plowman July 31, 2023, 1:48 p.m. UTC
All the Raspberry Pi official camera tuning files are updated for
HDR. As stated previously, there is no mechanism in the hardware for
combining images so all this does is enable multi-channel AGC to
produce short and long exposure frames. It will be up to the
application to deal with them.

The changes are identical in every tuning file.

1. The existing AGC tuning is duplicated twice so that we have 3 AGC
channels.

2. The first is left alone (the default AGC channel), the second is
tweaked to under-expose significantly (ev -3) and the final one is
tweaked to over-exposure slightly (ev +0.5)

3. Control parameters are provided to the "rpi.hdr" algorithm to
associate these AGC channels correctly with the HDR modes.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
---
 src/ipa/rpi/vc4/data/imx219.json           | 388 +++++++++++++++-----
 src/ipa/rpi/vc4/data/imx219_noir.json      | 388 +++++++++++++++-----
 src/ipa/rpi/vc4/data/imx477.json           | 386 +++++++++++++++-----
 src/ipa/rpi/vc4/data/imx477_noir.json      | 388 +++++++++++++++-----
 src/ipa/rpi/vc4/data/imx708.json           | 350 +++++++++++++-----
 src/ipa/rpi/vc4/data/imx708_noir.json      | 350 +++++++++++++-----
 src/ipa/rpi/vc4/data/imx708_wide.json      | 350 +++++++++++++-----
 src/ipa/rpi/vc4/data/imx708_wide_noir.json | 350 +++++++++++++-----
 src/ipa/rpi/vc4/data/ov5647.json           | 392 ++++++++++++++++-----
 9 files changed, 2563 insertions(+), 779 deletions(-)

Comments

Naushir Patuck Aug. 21, 2023, 9:01 a.m. UTC | #1
Hi David,

Thank you for your patch.

On Mon, 31 Jul 2023 at 14:48, David Plowman via libcamera-devel
<libcamera-devel@lists.libcamera.org> wrote:
>
> All the Raspberry Pi official camera tuning files are updated for
> HDR. As stated previously, there is no mechanism in the hardware for
> combining images so all this does is enable multi-channel AGC to
> produce short and long exposure frames. It will be up to the
> application to deal with them.
>
> The changes are identical in every tuning file.
>
> 1. The existing AGC tuning is duplicated twice so that we have 3 AGC
> channels.
>
> 2. The first is left alone (the default AGC channel), the second is
> tweaked to under-expose significantly (ev -3) and the final one is
> tweaked to over-exposure slightly (ev +0.5)
>
> 3. Control parameters are provided to the "rpi.hdr" algorithm to
> associate these AGC channels correctly with the HDR modes.
>
> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> ---
>  src/ipa/rpi/vc4/data/imx219.json           | 388 +++++++++++++++-----
>  src/ipa/rpi/vc4/data/imx219_noir.json      | 388 +++++++++++++++-----
>  src/ipa/rpi/vc4/data/imx477.json           | 386 +++++++++++++++-----
>  src/ipa/rpi/vc4/data/imx477_noir.json      | 388 +++++++++++++++-----
>  src/ipa/rpi/vc4/data/imx708.json           | 350 +++++++++++++-----
>  src/ipa/rpi/vc4/data/imx708_noir.json      | 350 +++++++++++++-----
>  src/ipa/rpi/vc4/data/imx708_wide.json      | 350 +++++++++++++-----
>  src/ipa/rpi/vc4/data/imx708_wide_noir.json | 350 +++++++++++++-----
>  src/ipa/rpi/vc4/data/ov5647.json           | 392 ++++++++++++++++-----
>  9 files changed, 2563 insertions(+), 779 deletions(-)
>
> diff --git a/src/ipa/rpi/vc4/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json
> index efe7210a..a4e457c0 100644
> --- a/src/ipa/rpi/vc4/data/imx219.json
> +++ b/src/ipa/rpi/vc4/data/imx219.json
> @@ -131,95 +131,282 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.5,
> -                                1000, 0.5
> -                            ]
> -                        }
> -                    ],
> -                    "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
> -                            ]
> -                        }
> -                    ],
> -                    "shadows": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.0,
> -                            "q_hi": 0.5,
> -                            "y_target":
> -                            [
> -                                0, 0.17,
> -                                1000, 0.17
> -                            ]
> -                        }
> -                    ]
> -                },
> -                "y_target":
> -                [
> -                    0, 0.16,
> -                    1000, 0.165,
> -                    10000, 0.17
> -                ]
> -            }
> +               "channels":
> +               [
> +                   {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   },
> +                   {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   },
> +                   {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -481,6 +668,25 @@
>          },
>          {
>              "rpi.sharpen": { }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },

Perhaps "Off" could be implicit in the config read code? Or could it be possible
we use "Cadence" != [ 0 ] in the "Off" case for reasons?

> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
> -}
> \ No newline at end of file
> +}
> diff --git a/src/ipa/rpi/vc4/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json
> index cfedb943..cba1905c 100644
> --- a/src/ipa/rpi/vc4/data/imx219_noir.json
> +++ b/src/ipa/rpi/vc4/data/imx219_noir.json
> @@ -47,95 +47,282 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.5,
> -                                1000, 0.5
> -                            ]
> -                        }
> -                    ],
> -                    "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
> -                            ]
> -                        }
> -                    ],
> -                    "shadows": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.0,
> -                            "q_hi": 0.5,
> -                            "y_target":
> -                            [
> -                                0, 0.17,
> -                                1000, 0.17
> -                            ]
> -                        }
> -                    ]
> -                },
> -                "y_target":
> -                [
> -                    0, 0.16,
> -                    1000, 0.165,
> -                    10000, 0.17
> -                ]
> -            }
> +               "channels":
> +               [
> +                   {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   },
> +                   {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   },
> +                   {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -397,6 +584,25 @@
>          },
>          {
>              "rpi.sharpen": { }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },
> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
> -}
> \ No newline at end of file
> +}
> diff --git a/src/ipa/rpi/vc4/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json
> index bbe6da0d..fbefb0a9 100644
> --- a/src/ipa/rpi/vc4/data/imx477.json
> +++ b/src/ipa/rpi/vc4/data/imx477.json
> @@ -136,95 +136,282 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.3,
> -                                1000, 0.3
> -                            ]
> -                        }
> -                    ],
> -                    "highlight": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.3,
> -                                1000, 0.3
> -                            ]
> -                        },
> -                        {
> -                            "bound": "UPPER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.8,
> -                                1000, 0.8
> -                            ]
> -                        }
> -                    ],
> -                    "shadows": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.0,
> -                            "q_hi": 0.5,
> -                            "y_target":
> -                            [
> -                                0, 0.17,
> -                                1000, 0.17
> -                            ]
> -                        }
> -                    ]
> -                },
> -                "y_target":
> -                [
> -                    0, 0.16,
> -                    1000, 0.165,
> -                    10000, 0.17
> -                ]
> -            }
> +               "channels":
> +               [
> +                    {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               },
> +                               {
> +                                   "bound": "UPPER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.8,
> +                                       1000, 0.8
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   },
> +                    {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               },
> +                               {
> +                                   "bound": "UPPER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.8,
> +                                       1000, 0.8
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   },
> +                    {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               },
> +                               {
> +                                   "bound": "UPPER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.8,
> +                                       1000, 0.8
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -513,7 +700,26 @@
>          },
>          {
>              "rpi.sharpen": { }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },
> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
>  }
>
> diff --git a/src/ipa/rpi/vc4/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json
> index 52d7f072..53b7b492 100644
> --- a/src/ipa/rpi/vc4/data/imx477_noir.json
> +++ b/src/ipa/rpi/vc4/data/imx477_noir.json
> @@ -47,95 +47,282 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.3,
> -                                1000, 0.3
> -                            ]
> -                        }
> -                    ],
> -                    "highlight": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.3,
> -                                1000, 0.3
> -                            ]
> -                        },
> -                        {
> -                            "bound": "UPPER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.8,
> -                                1000, 0.8
> -                            ]
> -                        }
> -                    ],
> -                    "shadows": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.0,
> -                            "q_hi": 0.5,
> -                            "y_target":
> -                            [
> -                                0, 0.17,
> -                                1000, 0.17
> -                            ]
> -                        }
> -                    ]
> -                },
> -                "y_target":
> -                [
> -                    0, 0.16,
> -                    1000, 0.165,
> -                    10000, 0.17
> -                ]
> -            }
> +               "channels":
> +               [
> +                   {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               },
> +                               {
> +                                   "bound": "UPPER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.8,
> +                                       1000, 0.8
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   },
> +                   {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               },
> +                               {
> +                                   "bound": "UPPER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.8,
> +                                       1000, 0.8
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   },
> +                   {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.3,
> +                                       1000, 0.3
> +                                   ]
> +                               },
> +                               {
> +                                   "bound": "UPPER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.8,
> +                                       1000, 0.8
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ]
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -424,6 +611,25 @@
>          },
>          {
>              "rpi.sharpen": { }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },
> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
> -}
> \ No newline at end of file
> +}
> diff --git a/src/ipa/rpi/vc4/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json
> index 6b26d0a1..bfa78b72 100644
> --- a/src/ipa/rpi/vc4/data/imx708.json
> +++ b/src/ipa/rpi/vc4/data/imx708.json
> @@ -139,86 +139,255 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.2,
> -                                1000, 0.2
> -                            ]
> -                        }
> -                    ],
> -                    "highlight": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.2,
> -                                1000, 0.2
> -                            ]
> -                        },
> -                        {
> -                            "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.165,
> -                    10000, 0.17
> -                ],
> -                "startup_frames": 5,
> -                "convergence_frames": 6,
> -                "speed": 0.15
> -            }
> +               "channels":
> +               [
> +                   {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   },
> +                   {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   },
> +                   {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -556,6 +725,25 @@
>                  "skip_frames": 5,
>                  "map": [ 0.0, 445, 15.0, 925 ]
>              }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },
> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
>  }
> diff --git a/src/ipa/rpi/vc4/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json
> index 8d498153..eb0c7a95 100644
> --- a/src/ipa/rpi/vc4/data/imx708_noir.json
> +++ b/src/ipa/rpi/vc4/data/imx708_noir.json
> @@ -139,86 +139,255 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.2,
> -                                1000, 0.2
> -                            ]
> -                        }
> -                    ],
> -                    "highlight": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.2,
> -                                1000, 0.2
> -                            ]
> -                        },
> -                        {
> -                            "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.165,
> -                    10000, 0.17
> -                ],
> -                "startup_frames": 5,
> -                "convergence_frames": 6,
> -                "speed": 0.15
> -            }
> +               "channels":
> +               [
> +                   {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   },
> +                   {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   },
> +                   {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -556,6 +725,25 @@
>                  "skip_frames": 5,
>                  "map": [ 0.0, 445, 15.0, 925 ]
>              }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },
> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
>  }
> diff --git a/src/ipa/rpi/vc4/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json
> index 14bc918e..cefaaaeb 100644
> --- a/src/ipa/rpi/vc4/data/imx708_wide.json
> +++ b/src/ipa/rpi/vc4/data/imx708_wide.json
> @@ -129,86 +129,255 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.2,
> -                                1000, 0.2
> -                            ]
> -                        }
> -                    ],
> -                    "highlight": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.2,
> -                                1000, 0.2
> -                            ]
> -                        },
> -                        {
> -                            "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.165,
> -                    10000, 0.17
> -                ],
> -                "startup_frames": 5,
> -                "convergence_frames": 6,
> -                "speed": 0.15
> -            }
> +               "channels":
> +               [
> +                   {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   },
> +                   {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   },
> +                   {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -459,6 +628,25 @@
>                  "skip_frames": 5,
>                  "map": [ 0.0, 420, 35.0, 920 ]
>              }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },
> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
>  }
> diff --git a/src/ipa/rpi/vc4/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
> index 49442c0f..de222f52 100644
> --- a/src/ipa/rpi/vc4/data/imx708_wide_noir.json
> +++ b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
> @@ -129,86 +129,255 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.2,
> -                                1000, 0.2
> -                            ]
> -                        }
> -                    ],
> -                    "highlight": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.2,
> -                                1000, 0.2
> -                            ]
> -                        },
> -                        {
> -                            "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.165,
> -                    10000, 0.17
> -                ],
> -                "startup_frames": 5,
> -                "convergence_frames": 6,
> -                "speed": 0.15
> -            }
> +               "channels":
> +               [
> +                   {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   },
> +                   {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   },
> +                   {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               }
> +                           ],
> +                           "highlight": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.2,
> +                                       1000, 0.2
> +                                   ]
> +                               },
> +                               {
> +                                   "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.165,
> +                           10000, 0.17
> +                       ],
> +                       "startup_frames": 5,
> +                       "convergence_frames": 6,
> +                       "speed": 0.15
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -459,6 +628,25 @@
>                  "skip_frames": 5,
>                  "map": [ 0.0, 420, 35.0, 920 ]
>              }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },
> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
>  }
> diff --git a/src/ipa/rpi/vc4/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json
> index d770e44f..ac9f3f30 100644
> --- a/src/ipa/rpi/vc4/data/ov5647.json
> +++ b/src/ipa/rpi/vc4/data/ov5647.json
> @@ -131,96 +131,285 @@
>          {
>              "rpi.agc":
>              {
> -                "metering_modes":
> -                {
> -                    "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 ]
> -                    },
> -                    "matrix":
> -                    {
> -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> -                    }
> -                },
> -                "exposure_modes":
> -                {
> -                    "normal":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "short":
> -                    {
> -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> -                    },
> -                    "long":
> -                    {
> -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> -                    }
> -                },
> -                "constraint_modes":
> -                {
> -                    "normal": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.98,
> -                            "q_hi": 1.0,
> -                            "y_target":
> -                            [
> -                                0, 0.5,
> -                                1000, 0.5
> -                            ]
> -                        }
> -                    ],
> -                    "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
> -                            ]
> -                        }
> -                    ],
> -                    "shadows": [
> -                        {
> -                            "bound": "LOWER",
> -                            "q_lo": 0.0,
> -                            "q_hi": 0.5,
> -                            "y_target":
> -                            [
> -                                0, 0.17,
> -                                1000, 0.17
> -                            ]
> -                        }
> -                    ]
> -                },
> -                "y_target":
> -                [
> -                    0, 0.16,
> -                    1000, 0.165,
> -                    10000, 0.17
> -                ],
> -                "base_ev": 1.25
> -            }
> +               "channels":
> +               [
> +                   {
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ],
> +                       "base_ev": 1.25
> +                   },
> +                   {
> +                       "base_ev": 0.125,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ],
> +                       "base_ev": 1.25
> +                   },
> +                   {
> +                       "base_ev": 1.5,
> +                       "metering_modes":
> +                       {
> +                           "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 ]
> +                           },
> +                           "matrix":
> +                           {
> +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> +                           }
> +                       },
> +                       "exposure_modes":
> +                       {
> +                           "normal":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "short":
> +                           {
> +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> +                           },
> +                           "long":
> +                           {
> +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> +                           }
> +                       },
> +                       "constraint_modes":
> +                       {
> +                           "normal": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.98,
> +                                   "q_hi": 1.0,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.5,
> +                                       1000, 0.5
> +                                   ]
> +                               }
> +                           ],
> +                           "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
> +                                   ]
> +                               }
> +                           ],
> +                           "shadows": [
> +                               {
> +                                   "bound": "LOWER",
> +                                   "q_lo": 0.0,
> +                                   "q_hi": 0.5,
> +                                   "y_target":
> +                                   [
> +                                       0, 0.17,
> +                                       1000, 0.17
> +                                   ]
> +                               }
> +                           ]
> +                       },
> +                       "y_target":
> +                       [
> +                           0, 0.16,
> +                           1000, 0.165,
> +                           10000, 0.17
> +                       ],
> +                       "base_ev": 1.25
> +                   }
> +               ]
> +           }
>          },
>          {
>              "rpi.alsc":
> @@ -482,6 +671,25 @@
>          },
>          {
>              "rpi.sharpen": { }
> -        }
> +        },
> +       {
> +           "rpi.hdr":
> +           {
> +               "Off":
> +               {
> +                   "cadence": [ 0 ]
> +               },
> +               "MultiExposure":
> +               {
> +                   "cadence": [ 1, 2 ],
> +                   "channel_map": { "short": 1, "long": 2 }
> +               },
> +               "SingleExposure":
> +               {
> +                   "cadence": [ 1 ],
> +                   "channel_map": { "short": 1 }
> +               }
> +           }
> +       }
>      ]
> -}
> \ No newline at end of file
> +}
> --
> 2.30.2
>
David Plowman Aug. 21, 2023, 9:35 a.m. UTC | #2
Hi Naush

Thanks for the review.

On Mon, 21 Aug 2023 at 10:00, Naushir Patuck <naush@raspberrypi.com> wrote:
>
> Hi David,
>
> Thank you for your patch.
>
> On Mon, 31 Jul 2023 at 14:48, David Plowman via libcamera-devel
> <libcamera-devel@lists.libcamera.org> wrote:
> >
> > All the Raspberry Pi official camera tuning files are updated for
> > HDR. As stated previously, there is no mechanism in the hardware for
> > combining images so all this does is enable multi-channel AGC to
> > produce short and long exposure frames. It will be up to the
> > application to deal with them.
> >
> > The changes are identical in every tuning file.
> >
> > 1. The existing AGC tuning is duplicated twice so that we have 3 AGC
> > channels.
> >
> > 2. The first is left alone (the default AGC channel), the second is
> > tweaked to under-expose significantly (ev -3) and the final one is
> > tweaked to over-exposure slightly (ev +0.5)
> >
> > 3. Control parameters are provided to the "rpi.hdr" algorithm to
> > associate these AGC channels correctly with the HDR modes.
> >
> > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> > ---
> >  src/ipa/rpi/vc4/data/imx219.json           | 388 +++++++++++++++-----
> >  src/ipa/rpi/vc4/data/imx219_noir.json      | 388 +++++++++++++++-----
> >  src/ipa/rpi/vc4/data/imx477.json           | 386 +++++++++++++++-----
> >  src/ipa/rpi/vc4/data/imx477_noir.json      | 388 +++++++++++++++-----
> >  src/ipa/rpi/vc4/data/imx708.json           | 350 +++++++++++++-----
> >  src/ipa/rpi/vc4/data/imx708_noir.json      | 350 +++++++++++++-----
> >  src/ipa/rpi/vc4/data/imx708_wide.json      | 350 +++++++++++++-----
> >  src/ipa/rpi/vc4/data/imx708_wide_noir.json | 350 +++++++++++++-----
> >  src/ipa/rpi/vc4/data/ov5647.json           | 392 ++++++++++++++++-----
> >  9 files changed, 2563 insertions(+), 779 deletions(-)
> >
> > diff --git a/src/ipa/rpi/vc4/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json
> > index efe7210a..a4e457c0 100644
> > --- a/src/ipa/rpi/vc4/data/imx219.json
> > +++ b/src/ipa/rpi/vc4/data/imx219.json
> > @@ -131,95 +131,282 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.5,
> > -                                1000, 0.5
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "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
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "shadows": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.0,
> > -                            "q_hi": 0.5,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.17,
> > -                                1000, 0.17
> > -                            ]
> > -                        }
> > -                    ]
> > -                },
> > -                "y_target":
> > -                [
> > -                    0, 0.16,
> > -                    1000, 0.165,
> > -                    10000, 0.17
> > -                ]
> > -            }
> > +               "channels":
> > +               [
> > +                   {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   },
> > +                   {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   },
> > +                   {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -481,6 +668,25 @@
> >          },
> >          {
> >              "rpi.sharpen": { }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
>
> Perhaps "Off" could be implicit in the config read code? Or could it be possible
> we use "Cadence" != [ 0 ] in the "Off" case for reasons?

Yes, I wonder a little bit about that. Is there any circumstance where
you might want "Off" to be something different? Probably not. At which
point hard-coding the "Off" configuration could make sense, at least
it gets rid of the "you didn't configure anything" error. I'll give
that a go.

Thanks
David

>
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> > -}
> > \ No newline at end of file
> > +}
> > diff --git a/src/ipa/rpi/vc4/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json
> > index cfedb943..cba1905c 100644
> > --- a/src/ipa/rpi/vc4/data/imx219_noir.json
> > +++ b/src/ipa/rpi/vc4/data/imx219_noir.json
> > @@ -47,95 +47,282 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.5,
> > -                                1000, 0.5
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "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
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "shadows": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.0,
> > -                            "q_hi": 0.5,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.17,
> > -                                1000, 0.17
> > -                            ]
> > -                        }
> > -                    ]
> > -                },
> > -                "y_target":
> > -                [
> > -                    0, 0.16,
> > -                    1000, 0.165,
> > -                    10000, 0.17
> > -                ]
> > -            }
> > +               "channels":
> > +               [
> > +                   {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   },
> > +                   {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   },
> > +                   {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -397,6 +584,25 @@
> >          },
> >          {
> >              "rpi.sharpen": { }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> > -}
> > \ No newline at end of file
> > +}
> > diff --git a/src/ipa/rpi/vc4/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json
> > index bbe6da0d..fbefb0a9 100644
> > --- a/src/ipa/rpi/vc4/data/imx477.json
> > +++ b/src/ipa/rpi/vc4/data/imx477.json
> > @@ -136,95 +136,282 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.3,
> > -                                1000, 0.3
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "highlight": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.3,
> > -                                1000, 0.3
> > -                            ]
> > -                        },
> > -                        {
> > -                            "bound": "UPPER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.8,
> > -                                1000, 0.8
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "shadows": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.0,
> > -                            "q_hi": 0.5,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.17,
> > -                                1000, 0.17
> > -                            ]
> > -                        }
> > -                    ]
> > -                },
> > -                "y_target":
> > -                [
> > -                    0, 0.16,
> > -                    1000, 0.165,
> > -                    10000, 0.17
> > -                ]
> > -            }
> > +               "channels":
> > +               [
> > +                    {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "bound": "UPPER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.8,
> > +                                       1000, 0.8
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   },
> > +                    {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "bound": "UPPER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.8,
> > +                                       1000, 0.8
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   },
> > +                    {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "bound": "UPPER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.8,
> > +                                       1000, 0.8
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -513,7 +700,26 @@
> >          },
> >          {
> >              "rpi.sharpen": { }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> >  }
> >
> > diff --git a/src/ipa/rpi/vc4/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json
> > index 52d7f072..53b7b492 100644
> > --- a/src/ipa/rpi/vc4/data/imx477_noir.json
> > +++ b/src/ipa/rpi/vc4/data/imx477_noir.json
> > @@ -47,95 +47,282 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.3,
> > -                                1000, 0.3
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "highlight": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.3,
> > -                                1000, 0.3
> > -                            ]
> > -                        },
> > -                        {
> > -                            "bound": "UPPER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.8,
> > -                                1000, 0.8
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "shadows": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.0,
> > -                            "q_hi": 0.5,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.17,
> > -                                1000, 0.17
> > -                            ]
> > -                        }
> > -                    ]
> > -                },
> > -                "y_target":
> > -                [
> > -                    0, 0.16,
> > -                    1000, 0.165,
> > -                    10000, 0.17
> > -                ]
> > -            }
> > +               "channels":
> > +               [
> > +                   {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "bound": "UPPER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.8,
> > +                                       1000, 0.8
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   },
> > +                   {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "bound": "UPPER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.8,
> > +                                       1000, 0.8
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   },
> > +                   {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.3,
> > +                                       1000, 0.3
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "bound": "UPPER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.8,
> > +                                       1000, 0.8
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ]
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -424,6 +611,25 @@
> >          },
> >          {
> >              "rpi.sharpen": { }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> > -}
> > \ No newline at end of file
> > +}
> > diff --git a/src/ipa/rpi/vc4/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json
> > index 6b26d0a1..bfa78b72 100644
> > --- a/src/ipa/rpi/vc4/data/imx708.json
> > +++ b/src/ipa/rpi/vc4/data/imx708.json
> > @@ -139,86 +139,255 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.2,
> > -                                1000, 0.2
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "highlight": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.2,
> > -                                1000, 0.2
> > -                            ]
> > -                        },
> > -                        {
> > -                            "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.165,
> > -                    10000, 0.17
> > -                ],
> > -                "startup_frames": 5,
> > -                "convergence_frames": 6,
> > -                "speed": 0.15
> > -            }
> > +               "channels":
> > +               [
> > +                   {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   },
> > +                   {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   },
> > +                   {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -556,6 +725,25 @@
> >                  "skip_frames": 5,
> >                  "map": [ 0.0, 445, 15.0, 925 ]
> >              }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> >  }
> > diff --git a/src/ipa/rpi/vc4/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json
> > index 8d498153..eb0c7a95 100644
> > --- a/src/ipa/rpi/vc4/data/imx708_noir.json
> > +++ b/src/ipa/rpi/vc4/data/imx708_noir.json
> > @@ -139,86 +139,255 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.2,
> > -                                1000, 0.2
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "highlight": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.2,
> > -                                1000, 0.2
> > -                            ]
> > -                        },
> > -                        {
> > -                            "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.165,
> > -                    10000, 0.17
> > -                ],
> > -                "startup_frames": 5,
> > -                "convergence_frames": 6,
> > -                "speed": 0.15
> > -            }
> > +               "channels":
> > +               [
> > +                   {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   },
> > +                   {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   },
> > +                   {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -556,6 +725,25 @@
> >                  "skip_frames": 5,
> >                  "map": [ 0.0, 445, 15.0, 925 ]
> >              }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> >  }
> > diff --git a/src/ipa/rpi/vc4/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json
> > index 14bc918e..cefaaaeb 100644
> > --- a/src/ipa/rpi/vc4/data/imx708_wide.json
> > +++ b/src/ipa/rpi/vc4/data/imx708_wide.json
> > @@ -129,86 +129,255 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.2,
> > -                                1000, 0.2
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "highlight": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.2,
> > -                                1000, 0.2
> > -                            ]
> > -                        },
> > -                        {
> > -                            "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.165,
> > -                    10000, 0.17
> > -                ],
> > -                "startup_frames": 5,
> > -                "convergence_frames": 6,
> > -                "speed": 0.15
> > -            }
> > +               "channels":
> > +               [
> > +                   {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   },
> > +                   {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   },
> > +                   {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -459,6 +628,25 @@
> >                  "skip_frames": 5,
> >                  "map": [ 0.0, 420, 35.0, 920 ]
> >              }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> >  }
> > diff --git a/src/ipa/rpi/vc4/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
> > index 49442c0f..de222f52 100644
> > --- a/src/ipa/rpi/vc4/data/imx708_wide_noir.json
> > +++ b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
> > @@ -129,86 +129,255 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.2,
> > -                                1000, 0.2
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "highlight": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.2,
> > -                                1000, 0.2
> > -                            ]
> > -                        },
> > -                        {
> > -                            "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.165,
> > -                    10000, 0.17
> > -                ],
> > -                "startup_frames": 5,
> > -                "convergence_frames": 6,
> > -                "speed": 0.15
> > -            }
> > +               "channels":
> > +               [
> > +                   {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   },
> > +                   {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   },
> > +                   {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 15000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "highlight": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.2,
> > +                                       1000, 0.2
> > +                                   ]
> > +                               },
> > +                               {
> > +                                   "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.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "startup_frames": 5,
> > +                       "convergence_frames": 6,
> > +                       "speed": 0.15
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -459,6 +628,25 @@
> >                  "skip_frames": 5,
> >                  "map": [ 0.0, 420, 35.0, 920 ]
> >              }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> >  }
> > diff --git a/src/ipa/rpi/vc4/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json
> > index d770e44f..ac9f3f30 100644
> > --- a/src/ipa/rpi/vc4/data/ov5647.json
> > +++ b/src/ipa/rpi/vc4/data/ov5647.json
> > @@ -131,96 +131,285 @@
> >          {
> >              "rpi.agc":
> >              {
> > -                "metering_modes":
> > -                {
> > -                    "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 ]
> > -                    },
> > -                    "matrix":
> > -                    {
> > -                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > -                    }
> > -                },
> > -                "exposure_modes":
> > -                {
> > -                    "normal":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "short":
> > -                    {
> > -                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > -                    },
> > -                    "long":
> > -                    {
> > -                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > -                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > -                    }
> > -                },
> > -                "constraint_modes":
> > -                {
> > -                    "normal": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.98,
> > -                            "q_hi": 1.0,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.5,
> > -                                1000, 0.5
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "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
> > -                            ]
> > -                        }
> > -                    ],
> > -                    "shadows": [
> > -                        {
> > -                            "bound": "LOWER",
> > -                            "q_lo": 0.0,
> > -                            "q_hi": 0.5,
> > -                            "y_target":
> > -                            [
> > -                                0, 0.17,
> > -                                1000, 0.17
> > -                            ]
> > -                        }
> > -                    ]
> > -                },
> > -                "y_target":
> > -                [
> > -                    0, 0.16,
> > -                    1000, 0.165,
> > -                    10000, 0.17
> > -                ],
> > -                "base_ev": 1.25
> > -            }
> > +               "channels":
> > +               [
> > +                   {
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "base_ev": 1.25
> > +                   },
> > +                   {
> > +                       "base_ev": 0.125,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "base_ev": 1.25
> > +                   },
> > +                   {
> > +                       "base_ev": 1.5,
> > +                       "metering_modes":
> > +                       {
> > +                           "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 ]
> > +                           },
> > +                           "matrix":
> > +                           {
> > +                               "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
> > +                           }
> > +                       },
> > +                       "exposure_modes":
> > +                       {
> > +                           "normal":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 66666 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "short":
> > +                           {
> > +                               "shutter": [ 100, 5000, 10000, 20000, 33333 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
> > +                           },
> > +                           "long":
> > +                           {
> > +                               "shutter": [ 100, 10000, 30000, 60000, 120000 ],
> > +                               "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
> > +                           }
> > +                       },
> > +                       "constraint_modes":
> > +                       {
> > +                           "normal": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.98,
> > +                                   "q_hi": 1.0,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.5,
> > +                                       1000, 0.5
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "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
> > +                                   ]
> > +                               }
> > +                           ],
> > +                           "shadows": [
> > +                               {
> > +                                   "bound": "LOWER",
> > +                                   "q_lo": 0.0,
> > +                                   "q_hi": 0.5,
> > +                                   "y_target":
> > +                                   [
> > +                                       0, 0.17,
> > +                                       1000, 0.17
> > +                                   ]
> > +                               }
> > +                           ]
> > +                       },
> > +                       "y_target":
> > +                       [
> > +                           0, 0.16,
> > +                           1000, 0.165,
> > +                           10000, 0.17
> > +                       ],
> > +                       "base_ev": 1.25
> > +                   }
> > +               ]
> > +           }
> >          },
> >          {
> >              "rpi.alsc":
> > @@ -482,6 +671,25 @@
> >          },
> >          {
> >              "rpi.sharpen": { }
> > -        }
> > +        },
> > +       {
> > +           "rpi.hdr":
> > +           {
> > +               "Off":
> > +               {
> > +                   "cadence": [ 0 ]
> > +               },
> > +               "MultiExposure":
> > +               {
> > +                   "cadence": [ 1, 2 ],
> > +                   "channel_map": { "short": 1, "long": 2 }
> > +               },
> > +               "SingleExposure":
> > +               {
> > +                   "cadence": [ 1 ],
> > +                   "channel_map": { "short": 1 }
> > +               }
> > +           }
> > +       }
> >      ]
> > -}
> > \ No newline at end of file
> > +}
> > --
> > 2.30.2
> >

Patch
diff mbox series

diff --git a/src/ipa/rpi/vc4/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json
index efe7210a..a4e457c0 100644
--- a/src/ipa/rpi/vc4/data/imx219.json
+++ b/src/ipa/rpi/vc4/data/imx219.json
@@ -131,95 +131,282 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.5,
-                                1000, 0.5
-                            ]
-                        }
-                    ],
-                    "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
-                            ]
-                        }
-                    ],
-                    "shadows": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.0,
-                            "q_hi": 0.5,
-                            "y_target":
-                            [
-                                0, 0.17,
-                                1000, 0.17
-                            ]
-                        }
-                    ]
-                },
-                "y_target":
-                [
-                    0, 0.16,
-                    1000, 0.165,
-                    10000, 0.17
-                ]
-            }
+		"channels":
+		[
+		    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    },
+		    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    },
+		    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -481,6 +668,25 @@ 
         },
         {
             "rpi.sharpen": { }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
-}
\ No newline at end of file
+}
diff --git a/src/ipa/rpi/vc4/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json
index cfedb943..cba1905c 100644
--- a/src/ipa/rpi/vc4/data/imx219_noir.json
+++ b/src/ipa/rpi/vc4/data/imx219_noir.json
@@ -47,95 +47,282 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.5,
-                                1000, 0.5
-                            ]
-                        }
-                    ],
-                    "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
-                            ]
-                        }
-                    ],
-                    "shadows": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.0,
-                            "q_hi": 0.5,
-                            "y_target":
-                            [
-                                0, 0.17,
-                                1000, 0.17
-                            ]
-                        }
-                    ]
-                },
-                "y_target":
-                [
-                    0, 0.16,
-                    1000, 0.165,
-                    10000, 0.17
-                ]
-            }
+		"channels":
+		[
+		    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    },
+		    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    },
+		    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -397,6 +584,25 @@ 
         },
         {
             "rpi.sharpen": { }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
-}
\ No newline at end of file
+}
diff --git a/src/ipa/rpi/vc4/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json
index bbe6da0d..fbefb0a9 100644
--- a/src/ipa/rpi/vc4/data/imx477.json
+++ b/src/ipa/rpi/vc4/data/imx477.json
@@ -136,95 +136,282 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.3,
-                                1000, 0.3
-                            ]
-                        }
-                    ],
-                    "highlight": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.3,
-                                1000, 0.3
-                            ]
-                        },
-                        {
-                            "bound": "UPPER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.8,
-                                1000, 0.8
-                            ]
-                        }
-                    ],
-                    "shadows": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.0,
-                            "q_hi": 0.5,
-                            "y_target":
-                            [
-                                0, 0.17,
-                                1000, 0.17
-                            ]
-                        }
-                    ]
-                },
-                "y_target":
-                [
-                    0, 0.16,
-                    1000, 0.165,
-                    10000, 0.17
-                ]
-            }
+		"channels":
+		[
+                    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				},
+				{
+				    "bound": "UPPER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.8,
+					1000, 0.8
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    },
+                    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				},
+				{
+				    "bound": "UPPER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.8,
+					1000, 0.8
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    },
+                    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				},
+				{
+				    "bound": "UPPER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.8,
+					1000, 0.8
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -513,7 +700,26 @@ 
         },
         {
             "rpi.sharpen": { }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
 }
 
diff --git a/src/ipa/rpi/vc4/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json
index 52d7f072..53b7b492 100644
--- a/src/ipa/rpi/vc4/data/imx477_noir.json
+++ b/src/ipa/rpi/vc4/data/imx477_noir.json
@@ -47,95 +47,282 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.3,
-                                1000, 0.3
-                            ]
-                        }
-                    ],
-                    "highlight": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.3,
-                                1000, 0.3
-                            ]
-                        },
-                        {
-                            "bound": "UPPER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.8,
-                                1000, 0.8
-                            ]
-                        }
-                    ],
-                    "shadows": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.0,
-                            "q_hi": 0.5,
-                            "y_target":
-                            [
-                                0, 0.17,
-                                1000, 0.17
-                            ]
-                        }
-                    ]
-                },
-                "y_target":
-                [
-                    0, 0.16,
-                    1000, 0.165,
-                    10000, 0.17
-                ]
-            }
+		"channels":
+		[
+		    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				},
+				{
+				    "bound": "UPPER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.8,
+					1000, 0.8
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    },
+		    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				},
+				{
+				    "bound": "UPPER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.8,
+					1000, 0.8
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    },
+		    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.3,
+					1000, 0.3
+				    ]
+				},
+				{
+				    "bound": "UPPER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.8,
+					1000, 0.8
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			]
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -424,6 +611,25 @@ 
         },
         {
             "rpi.sharpen": { }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
-}
\ No newline at end of file
+}
diff --git a/src/ipa/rpi/vc4/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json
index 6b26d0a1..bfa78b72 100644
--- a/src/ipa/rpi/vc4/data/imx708.json
+++ b/src/ipa/rpi/vc4/data/imx708.json
@@ -139,86 +139,255 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.2,
-                                1000, 0.2
-                            ]
-                        }
-                    ],
-                    "highlight": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.2,
-                                1000, 0.2
-                            ]
-                        },
-                        {
-                            "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.165,
-                    10000, 0.17
-                ],
-                "startup_frames": 5,
-                "convergence_frames": 6,
-                "speed": 0.15
-            }
+		"channels":
+		[
+		    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    },
+		    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    },
+		    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -556,6 +725,25 @@ 
                 "skip_frames": 5,
                 "map": [ 0.0, 445, 15.0, 925 ]
             }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
 }
diff --git a/src/ipa/rpi/vc4/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json
index 8d498153..eb0c7a95 100644
--- a/src/ipa/rpi/vc4/data/imx708_noir.json
+++ b/src/ipa/rpi/vc4/data/imx708_noir.json
@@ -139,86 +139,255 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.2,
-                                1000, 0.2
-                            ]
-                        }
-                    ],
-                    "highlight": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.2,
-                                1000, 0.2
-                            ]
-                        },
-                        {
-                            "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.165,
-                    10000, 0.17
-                ],
-                "startup_frames": 5,
-                "convergence_frames": 6,
-                "speed": 0.15
-            }
+		"channels":
+		[
+		    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    },
+		    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    },
+		    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -556,6 +725,25 @@ 
                 "skip_frames": 5,
                 "map": [ 0.0, 445, 15.0, 925 ]
             }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
 }
diff --git a/src/ipa/rpi/vc4/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json
index 14bc918e..cefaaaeb 100644
--- a/src/ipa/rpi/vc4/data/imx708_wide.json
+++ b/src/ipa/rpi/vc4/data/imx708_wide.json
@@ -129,86 +129,255 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.2,
-                                1000, 0.2
-                            ]
-                        }
-                    ],
-                    "highlight": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.2,
-                                1000, 0.2
-                            ]
-                        },
-                        {
-                            "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.165,
-                    10000, 0.17
-                ],
-                "startup_frames": 5,
-                "convergence_frames": 6,
-                "speed": 0.15
-            }
+		"channels":
+		[
+		    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    },
+		    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    },
+		    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -459,6 +628,25 @@ 
                 "skip_frames": 5,
                 "map": [ 0.0, 420, 35.0, 920 ]
             }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
 }
diff --git a/src/ipa/rpi/vc4/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
index 49442c0f..de222f52 100644
--- a/src/ipa/rpi/vc4/data/imx708_wide_noir.json
+++ b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
@@ -129,86 +129,255 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 15000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 1000, 30000, 60000, 90000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.2,
-                                1000, 0.2
-                            ]
-                        }
-                    ],
-                    "highlight": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.2,
-                                1000, 0.2
-                            ]
-                        },
-                        {
-                            "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.165,
-                    10000, 0.17
-                ],
-                "startup_frames": 5,
-                "convergence_frames": 6,
-                "speed": 0.15
-            }
+		"channels":
+		[
+		    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    },
+		    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    },
+		    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 15000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 1000, 30000, 60000, 90000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				}
+			    ],
+			    "highlight": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.2,
+					1000, 0.2
+				    ]
+				},
+				{
+				    "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.165,
+			    10000, 0.17
+			],
+			"startup_frames": 5,
+			"convergence_frames": 6,
+			"speed": 0.15
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -459,6 +628,25 @@ 
                 "skip_frames": 5,
                 "map": [ 0.0, 420, 35.0, 920 ]
             }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
 }
diff --git a/src/ipa/rpi/vc4/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json
index d770e44f..ac9f3f30 100644
--- a/src/ipa/rpi/vc4/data/ov5647.json
+++ b/src/ipa/rpi/vc4/data/ov5647.json
@@ -131,96 +131,285 @@ 
         {
             "rpi.agc":
             {
-                "metering_modes":
-                {
-                    "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 ]
-                    },
-                    "matrix":
-                    {
-                        "weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
-                    }
-                },
-                "exposure_modes":
-                {
-                    "normal":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 66666 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "short":
-                    {
-                        "shutter": [ 100, 5000, 10000, 20000, 33333 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
-                    },
-                    "long":
-                    {
-                        "shutter": [ 100, 10000, 30000, 60000, 120000 ],
-                        "gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
-                    }
-                },
-                "constraint_modes":
-                {
-                    "normal": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.98,
-                            "q_hi": 1.0,
-                            "y_target":
-                            [
-                                0, 0.5,
-                                1000, 0.5
-                            ]
-                        }
-                    ],
-                    "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
-                            ]
-                        }
-                    ],
-                    "shadows": [
-                        {
-                            "bound": "LOWER",
-                            "q_lo": 0.0,
-                            "q_hi": 0.5,
-                            "y_target":
-                            [
-                                0, 0.17,
-                                1000, 0.17
-                            ]
-                        }
-                    ]
-                },
-                "y_target":
-                [
-                    0, 0.16,
-                    1000, 0.165,
-                    10000, 0.17
-                ],
-                "base_ev": 1.25
-            }
+		"channels":
+		[
+		    {
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			],
+			"base_ev": 1.25
+		    },
+		    {
+			"base_ev": 0.125,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			],
+			"base_ev": 1.25
+		    },
+		    {
+			"base_ev": 1.5,
+			"metering_modes":
+			{
+			    "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 ]
+			    },
+			    "matrix":
+			    {
+				"weights": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
+			    }
+			},
+			"exposure_modes":
+			{
+			    "normal":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 66666 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "short":
+			    {
+				"shutter": [ 100, 5000, 10000, 20000, 33333 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 8.0 ]
+			    },
+			    "long":
+			    {
+				"shutter": [ 100, 10000, 30000, 60000, 120000 ],
+				"gain": [ 1.0, 2.0, 4.0, 6.0, 12.0 ]
+			    }
+			},
+			"constraint_modes":
+			{
+			    "normal": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.98,
+				    "q_hi": 1.0,
+				    "y_target":
+				    [
+					0, 0.5,
+					1000, 0.5
+				    ]
+				}
+			    ],
+			    "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
+				    ]
+				}
+			    ],
+			    "shadows": [
+				{
+				    "bound": "LOWER",
+				    "q_lo": 0.0,
+				    "q_hi": 0.5,
+				    "y_target":
+				    [
+					0, 0.17,
+					1000, 0.17
+				    ]
+				}
+			    ]
+			},
+			"y_target":
+			[
+			    0, 0.16,
+			    1000, 0.165,
+			    10000, 0.17
+			],
+			"base_ev": 1.25
+		    }
+		]
+	    }
         },
         {
             "rpi.alsc":
@@ -482,6 +671,25 @@ 
         },
         {
             "rpi.sharpen": { }
-        }
+        },
+	{
+	    "rpi.hdr":
+	    {
+		"Off":
+		{
+		    "cadence": [ 0 ]
+		},
+		"MultiExposure":
+		{
+		    "cadence": [ 1, 2 ],
+		    "channel_map": { "short": 1, "long": 2 }
+		},
+		"SingleExposure":
+		{
+		    "cadence": [ 1 ],
+		    "channel_map": { "short": 1 }
+		}
+	    }
+	}
     ]
-}
\ No newline at end of file
+}