[v7,6/6] ipa: rkisp1: algorithms: data: enable DPF tuning for sensors
diff mbox series

Message ID 20260113174642.1185403-7-rui.wang@ideasonboard.com
State Deferred
Headers show
Series
  • refactor DPF parsing and initialization
Related show

Commit Message

Rui Wang Jan. 13, 2026, 5:46 p.m. UTC
Enable the RkISP1 denoise pre-filter (DPF) for the imx219/ov5647
ov5640 sensor by adding the required DPF tuning block.

Add DPF tuning config for ov5640 to adapt mode selection

Signed-off-by: Rui Wang <rui.wang@ideasonboard.com>

---
changelog since v5:   No change

changelog since v6:
 add ov5647 as strong noise sensor for verification
---
 src/ipa/rkisp1/data/imx219.yaml | 38 ++++++++++++++++++++++++
 src/ipa/rkisp1/data/meson.build |  1 +
 src/ipa/rkisp1/data/ov5640.yaml | 51 +++++++++++++++++++++++++++++++--
 src/ipa/rkisp1/data/ov5647.yaml | 46 +++++++++++++++++++++++++++++
 4 files changed, 133 insertions(+), 3 deletions(-)
 create mode 100644 src/ipa/rkisp1/data/ov5647.yaml

Comments

Jacopo Mondi Jan. 15, 2026, 2:41 p.m. UTC | #1
Hi Rui

On Tue, Jan 13, 2026 at 12:46:42PM -0500, Rui Wang wrote:
> Enable the RkISP1 denoise pre-filter (DPF) for the imx219/ov5647
> ov5640 sensor by adding the required DPF tuning block.
>
> Add DPF tuning config for ov5640 to adapt mode selection
>
> Signed-off-by: Rui Wang <rui.wang@ideasonboard.com>
>
> ---
> changelog since v5:   No change
>
> changelog since v6:
>  add ov5647 as strong noise sensor for verification
> ---
>  src/ipa/rkisp1/data/imx219.yaml | 38 ++++++++++++++++++++++++
>  src/ipa/rkisp1/data/meson.build |  1 +
>  src/ipa/rkisp1/data/ov5640.yaml | 51 +++++++++++++++++++++++++++++++--
>  src/ipa/rkisp1/data/ov5647.yaml | 46 +++++++++++++++++++++++++++++

I would split this one commit per file

Even more so for ov5647 which is introduced in this patch


>  4 files changed, 133 insertions(+), 3 deletions(-)
>  create mode 100644 src/ipa/rkisp1/data/ov5647.yaml
>
> diff --git a/src/ipa/rkisp1/data/imx219.yaml b/src/ipa/rkisp1/data/imx219.yaml
> index 0d99cb52..d6068ada 100644
> --- a/src/ipa/rkisp1/data/imx219.yaml
> +++ b/src/ipa/rkisp1/data/imx219.yaml
> @@ -111,4 +111,42 @@ algorithms:
>                 1438, 1226, 1059, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, 1054, 1185,
>                 1326, 1334, 1334,
>               ]
> +  - Dpf:
> +      filter:
> +        g:  [ 18, 13,  9,  5,  3,  1 ]
> +        rb: [ 18, 15, 12,  8,  5,  2 ]
> +      nll:
> +        coeff: [
> +          0,  14,  28,  42,  58,  76,  96, 120,
> +          148, 180, 216, 256, 300, 348, 400, 456,
> +          520
> +        ]
> +        scale-mode: "linear"
> +      strength:
> +        r: 80
> +        g: 80
> +        b: 80

From your last reply to v5

-------------------------------------------------------------------------------
 The is legacy config of Dpf configuaration , in the current implementation ,
 this configs are only help to initiate  struct :config_ strengthConfig_.
 in the function :

int Dpf::parseConfig(const YamlObject &tuningData)
{
	/* Parse base config. */
	int ret = parseSingleConfig(tuningData, config_, strengthConfig_);
	if (ret)
		return ret;

	/* Parse modes. */
	return parseModes(tuningData);
}

As default configs , I will use it for controls initiate value for the next follow story:
auto/manual mode enable.
-------------------------------------------------------------------------------

I understand this part of the configuration to be the initial default
value for the algorithm.

I wonder if it wouldn't be better expressed as

        modes:
           - type: "default"

So that it becomes user selectable..

But maybe it is not necessary

> +      modes:
> +        - type: "minimal"
> +          filter:
> +            g:  [ 14, 10,  7,  4,  2,  1 ]
> +            rb: [ 14, 11,  8,  4,  2,  1 ]
> +          nll:
> +            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
> +            scale-mode: "linear"
> +          strength:
> +            r: 60
> +            g: 60
> +            b: 60
> +        - type: "highquality"
> +          filter:
> +            g:  [ 22, 18, 13,  8,  5,  2 ]
> +            rb: [ 20, 18, 16, 11,  7,  3 ]
> +          nll:
> +            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
> +            scale-mode: "linear"
> +          strength:
> +            r: 130
> +            g: 130
> +            b: 130
>  ...
> diff --git a/src/ipa/rkisp1/data/meson.build b/src/ipa/rkisp1/data/meson.build
> index 1e3522b2..6388a8be 100644
> --- a/src/ipa/rkisp1/data/meson.build
> +++ b/src/ipa/rkisp1/data/meson.build
> @@ -6,6 +6,7 @@ conf_files = files([
>      'ov2685.yaml',
>      'ov4689.yaml',
>      'ov5640.yaml',
> +    'ov5647.yaml',
>      'ov5695.yaml',
>      'ov8858.yaml',
>      'uncalibrated.yaml',
> diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
> index 4b21d412..f36a45b5 100644
> --- a/src/ipa/rkisp1/data/ov5640.yaml
> +++ b/src/ipa/rkisp1/data/ov5640.yaml
> @@ -232,19 +232,64 @@ algorithms:
>              green: 2
>              red-blue: 2
>    - Dpf:
> -      DomainFilter:
> +      filter:
>          g: [ 16, 16, 16, 16, 16, 16 ]
>          rb: [ 16, 16, 16, 16, 16, 16 ]
> -      NoiseLevelFunction:
> +      nll:
>          coeff: [
>            1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
>            1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
>            1023
>          ]
>          scale-mode: "linear"
> -      FilterStrength:
> +      strength:
>          r: 64
>          g: 64
>          b: 64
> +      modes:
> +      - type: "minimal"
> +        filter:
> +          g:  [ 14, 10,  7,  4,  2,  1 ]
> +          rb: [ 14, 11,  8,  4,  2,  1 ]
> +        nll:
> +          coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
> +          scale-mode: "linear"
> +        strength:
> +          r: 60
> +          g: 60
> +          b: 60
> +      - type: "highquality"
> +        filter:
> +          g:  [ 22, 18, 13,  8,  5,  2 ]
> +          rb: [ 20, 18, 16, 11,  7,  3 ]
> +        nll:
> +          coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
> +          scale-mode: "linear"
> +        strength:
> +          r: 130
> +          g: 130
> +          b: 130
> +      - type: "fast"
> +        filter:
> +          g:  [ 16, 12,  9,  5,  3,  1 ]
> +          rb: [ 16, 13, 10,  6,  4,  2 ]
> +        nll:
> +          coeff: [ 0, 16, 32, 48, 66, 86, 108, 132, 160, 192, 228, 268, 312, 360, 412, 468, 528 ]
> +          scale-mode: "linear"
> +        strength:
> +          r: 90
> +          g: 90
> +          b: 90
> +      - type: "zsl"
> +        filter:
> +          g:  [ 18, 14, 10,  6,  3,  1 ]
> +          rb: [ 18, 16, 13,  9,  5,  3 ]
> +        nll:
> +          coeff: [ 0, 20, 40, 60, 82, 106, 132, 160, 192, 228, 268, 312, 360, 412, 468, 528, 592 ]
> +          scale-mode: "linear"
> +        strength:
> +          r: 110
> +          g: 110
> +          b: 110
>    - Filter:
>  ...
> diff --git a/src/ipa/rkisp1/data/ov5647.yaml b/src/ipa/rkisp1/data/ov5647.yaml
> new file mode 100644
> index 00000000..dfdbae14
> --- /dev/null
> +++ b/src/ipa/rkisp1/data/ov5647.yaml

This should be split to a separate patch indeed

Thanks
  j

> @@ -0,0 +1,46 @@
> +# SPDX-License-Identifier: CC0-1.0
> +%YAML 1.1
> +---
> +version: 1
> +algorithms:
> +  - Agc:
> +  - Awb:
> +  - Dpf:
> +      filter:
> +        g:  [ 18, 13,  9,  5,  3,  1 ]
> +        rb: [ 18, 15, 12,  8,  5,  2 ]
> +      nll:
> +        coeff: [
> +          0,  14,  28,  42,  58,  76,  96, 120,
> +          148, 180, 216, 256, 300, 348, 400, 456,
> +          520
> +        ]
> +        scale-mode: "linear"
> +      strength:
> +        r: 80
> +        g: 80
> +        b: 80
> +      modes:
> +        - type: "minimal"
> +          filter:
> +            g:  [ 14, 10,  7,  4,  2,  1 ]
> +            rb: [ 14, 11,  8,  4,  2,  1 ]
> +          nll:
> +            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
> +            scale-mode: "linear"
> +          strength:
> +            r: 60
> +            g: 60
> +            b: 60
> +        - type: "highquality"
> +          filter:
> +            g:  [ 22, 18, 13,  8,  5,  2 ]
> +            rb: [ 20, 18, 16, 11,  7,  3 ]
> +          nll:
> +            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
> +            scale-mode: "linear"
> +          strength:
> +            r: 1
> +            g: 1
> +            b: 1
> +...
> --
> 2.43.0
>
Rui Wang Jan. 15, 2026, 3:39 p.m. UTC | #2
On 2026-01-15 09:41, Jacopo Mondi wrote:
> Hi Rui
>
> On Tue, Jan 13, 2026 at 12:46:42PM -0500, Rui Wang wrote:
>> Enable the RkISP1 denoise pre-filter (DPF) for the imx219/ov5647
>> ov5640 sensor by adding the required DPF tuning block.
>>
>> Add DPF tuning config for ov5640 to adapt mode selection
>>
>> Signed-off-by: Rui Wang <rui.wang@ideasonboard.com>
>>
>> ---
>> changelog since v5:   No change
>>
>> changelog since v6:
>>   add ov5647 as strong noise sensor for verification
>> ---
>>   src/ipa/rkisp1/data/imx219.yaml | 38 ++++++++++++++++++++++++
>>   src/ipa/rkisp1/data/meson.build |  1 +
>>   src/ipa/rkisp1/data/ov5640.yaml | 51 +++++++++++++++++++++++++++++++--
>>   src/ipa/rkisp1/data/ov5647.yaml | 46 +++++++++++++++++++++++++++++
> I would split this one commit per file
>
> Even more so for ov5647 which is introduced in this patch
Thanks Jacopo for your suggestion , I would add two commits into next 
patch series.
>
>>   4 files changed, 133 insertions(+), 3 deletions(-)
>>   create mode 100644 src/ipa/rkisp1/data/ov5647.yaml
>>
>> diff --git a/src/ipa/rkisp1/data/imx219.yaml b/src/ipa/rkisp1/data/imx219.yaml
>> index 0d99cb52..d6068ada 100644
>> --- a/src/ipa/rkisp1/data/imx219.yaml
>> +++ b/src/ipa/rkisp1/data/imx219.yaml
>> @@ -111,4 +111,42 @@ algorithms:
>>                  1438, 1226, 1059, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, 1054, 1185,
>>                  1326, 1334, 1334,
>>                ]
>> +  - Dpf:
>> +      filter:
>> +        g:  [ 18, 13,  9,  5,  3,  1 ]
>> +        rb: [ 18, 15, 12,  8,  5,  2 ]
>> +      nll:
>> +        coeff: [
>> +          0,  14,  28,  42,  58,  76,  96, 120,
>> +          148, 180, 216, 256, 300, 348, 400, 456,
>> +          520
>> +        ]
>> +        scale-mode: "linear"
>> +      strength:
>> +        r: 80
>> +        g: 80
>> +        b: 80
>  From your last reply to v5
>
> -------------------------------------------------------------------------------
>   The is legacy config of Dpf configuaration , in the current implementation ,
>   this configs are only help to initiate  struct :config_ strengthConfig_.
>   in the function :
>
> int Dpf::parseConfig(const YamlObject &tuningData)
> {
> 	/* Parse base config. */
> 	int ret = parseSingleConfig(tuningData, config_, strengthConfig_);
> 	if (ret)
> 		return ret;
>
> 	/* Parse modes. */
> 	return parseModes(tuningData);
> }
>
> As default configs , I will use it for controls initiate value for the next follow story:
> auto/manual mode enable.
> -------------------------------------------------------------------------------
>
> I understand this part of the configuration to be the initial default
> value for the algorithm.
>
> I wonder if it wouldn't be better expressed as
>
>          modes:
>             - type: "default"
>
> So that it becomes user selectable..
>
> But maybe it is not necessary
  I think 'default' is meaningless into the reduction options,  I would 
implement like :

int Dpf::parseConfig(const YamlObject &tuningData)
{

	/* Parse modes. */
	return parseModes(tuningData);
}

also remove Yaml's DPF base setting , keep only modes.

   -Dpf
      filter:
          g: [ 16, 16, 16, 16, 16, 16 ]
          rb: [ 16, 16, 16, 16, 16, 16 ]

       nll:
          coeff: [
            1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
            1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
            1023
          ]
          scale-mode: "linear"
       strength:
          r: 64
          g: 64
          b: 64


and the default setting for manual for default controls  value  , which 
will be initilized from manual mode PR, and default value

can be read from manual setting YAML, it looks more clear and simplicity.

>> +      modes:
>> +        - type: "minimal"
>> +          filter:
>> +            g:  [ 14, 10,  7,  4,  2,  1 ]
>> +            rb: [ 14, 11,  8,  4,  2,  1 ]
>> +          nll:
>> +            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
>> +            scale-mode: "linear"
>> +          strength:
>> +            r: 60
>> +            g: 60
>> +            b: 60
>> +        - type: "highquality"
>> +          filter:
>> +            g:  [ 22, 18, 13,  8,  5,  2 ]
>> +            rb: [ 20, 18, 16, 11,  7,  3 ]
>> +          nll:
>> +            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
>> +            scale-mode: "linear"
>> +          strength:
>> +            r: 130
>> +            g: 130
>> +            b: 130
>>   ...
>> diff --git a/src/ipa/rkisp1/data/meson.build b/src/ipa/rkisp1/data/meson.build
>> index 1e3522b2..6388a8be 100644
>> --- a/src/ipa/rkisp1/data/meson.build
>> +++ b/src/ipa/rkisp1/data/meson.build
>> @@ -6,6 +6,7 @@ conf_files = files([
>>       'ov2685.yaml',
>>       'ov4689.yaml',
>>       'ov5640.yaml',
>> +    'ov5647.yaml',
>>       'ov5695.yaml',
>>       'ov8858.yaml',
>>       'uncalibrated.yaml',
>> diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
>> index 4b21d412..f36a45b5 100644
>> --- a/src/ipa/rkisp1/data/ov5640.yaml
>> +++ b/src/ipa/rkisp1/data/ov5640.yaml
>> @@ -232,19 +232,64 @@ algorithms:
>>               green: 2
>>               red-blue: 2
>>     - Dpf:
>> -      DomainFilter:
>> +      filter:
>>           g: [ 16, 16, 16, 16, 16, 16 ]
>>           rb: [ 16, 16, 16, 16, 16, 16 ]
>> -      NoiseLevelFunction:
>> +      nll:
>>           coeff: [
>>             1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
>>             1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
>>             1023
>>           ]
>>           scale-mode: "linear"
>> -      FilterStrength:
>> +      strength:
>>           r: 64
>>           g: 64
>>           b: 64
>> +      modes:
>> +      - type: "minimal"
>> +        filter:
>> +          g:  [ 14, 10,  7,  4,  2,  1 ]
>> +          rb: [ 14, 11,  8,  4,  2,  1 ]
>> +        nll:
>> +          coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
>> +          scale-mode: "linear"
>> +        strength:
>> +          r: 60
>> +          g: 60
>> +          b: 60
>> +      - type: "highquality"
>> +        filter:
>> +          g:  [ 22, 18, 13,  8,  5,  2 ]
>> +          rb: [ 20, 18, 16, 11,  7,  3 ]
>> +        nll:
>> +          coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
>> +          scale-mode: "linear"
>> +        strength:
>> +          r: 130
>> +          g: 130
>> +          b: 130
>> +      - type: "fast"
>> +        filter:
>> +          g:  [ 16, 12,  9,  5,  3,  1 ]
>> +          rb: [ 16, 13, 10,  6,  4,  2 ]
>> +        nll:
>> +          coeff: [ 0, 16, 32, 48, 66, 86, 108, 132, 160, 192, 228, 268, 312, 360, 412, 468, 528 ]
>> +          scale-mode: "linear"
>> +        strength:
>> +          r: 90
>> +          g: 90
>> +          b: 90
>> +      - type: "zsl"
>> +        filter:
>> +          g:  [ 18, 14, 10,  6,  3,  1 ]
>> +          rb: [ 18, 16, 13,  9,  5,  3 ]
>> +        nll:
>> +          coeff: [ 0, 20, 40, 60, 82, 106, 132, 160, 192, 228, 268, 312, 360, 412, 468, 528, 592 ]
>> +          scale-mode: "linear"
>> +        strength:
>> +          r: 110
>> +          g: 110
>> +          b: 110
>>     - Filter:
>>   ...
>> diff --git a/src/ipa/rkisp1/data/ov5647.yaml b/src/ipa/rkisp1/data/ov5647.yaml
>> new file mode 100644
>> index 00000000..dfdbae14
>> --- /dev/null
>> +++ b/src/ipa/rkisp1/data/ov5647.yaml
> This should be split to a separate patch indeed
>
> Thanks
>    j
>
>> @@ -0,0 +1,46 @@
>> +# SPDX-License-Identifier: CC0-1.0
>> +%YAML 1.1
>> +---
>> +version: 1
>> +algorithms:
>> +  - Agc:
>> +  - Awb:
>> +  - Dpf:
>> +      filter:
>> +        g:  [ 18, 13,  9,  5,  3,  1 ]
>> +        rb: [ 18, 15, 12,  8,  5,  2 ]
>> +      nll:
>> +        coeff: [
>> +          0,  14,  28,  42,  58,  76,  96, 120,
>> +          148, 180, 216, 256, 300, 348, 400, 456,
>> +          520
>> +        ]
>> +        scale-mode: "linear"
>> +      strength:
>> +        r: 80
>> +        g: 80
>> +        b: 80
>> +      modes:
>> +        - type: "minimal"
>> +          filter:
>> +            g:  [ 14, 10,  7,  4,  2,  1 ]
>> +            rb: [ 14, 11,  8,  4,  2,  1 ]
>> +          nll:
>> +            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
>> +            scale-mode: "linear"
>> +          strength:
>> +            r: 60
>> +            g: 60
>> +            b: 60
>> +        - type: "highquality"
>> +          filter:
>> +            g:  [ 22, 18, 13,  8,  5,  2 ]
>> +            rb: [ 20, 18, 16, 11,  7,  3 ]
>> +          nll:
>> +            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
>> +            scale-mode: "linear"
>> +          strength:
>> +            r: 1
>> +            g: 1
>> +            b: 1
>> +...
>> --
>> 2.43.0
>>

Patch
diff mbox series

diff --git a/src/ipa/rkisp1/data/imx219.yaml b/src/ipa/rkisp1/data/imx219.yaml
index 0d99cb52..d6068ada 100644
--- a/src/ipa/rkisp1/data/imx219.yaml
+++ b/src/ipa/rkisp1/data/imx219.yaml
@@ -111,4 +111,42 @@  algorithms:
                1438, 1226, 1059, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, 1054, 1185,
                1326, 1334, 1334,
              ]
+  - Dpf:
+      filter:
+        g:  [ 18, 13,  9,  5,  3,  1 ]
+        rb: [ 18, 15, 12,  8,  5,  2 ]
+      nll:
+        coeff: [
+          0,  14,  28,  42,  58,  76,  96, 120,
+          148, 180, 216, 256, 300, 348, 400, 456,
+          520
+        ]
+        scale-mode: "linear"
+      strength:
+        r: 80
+        g: 80
+        b: 80
+      modes:
+        - type: "minimal"
+          filter:
+            g:  [ 14, 10,  7,  4,  2,  1 ]
+            rb: [ 14, 11,  8,  4,  2,  1 ]
+          nll:
+            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
+            scale-mode: "linear"
+          strength:
+            r: 60
+            g: 60
+            b: 60
+        - type: "highquality"
+          filter:
+            g:  [ 22, 18, 13,  8,  5,  2 ]
+            rb: [ 20, 18, 16, 11,  7,  3 ]
+          nll:
+            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
+            scale-mode: "linear"
+          strength:
+            r: 130
+            g: 130
+            b: 130
 ...
diff --git a/src/ipa/rkisp1/data/meson.build b/src/ipa/rkisp1/data/meson.build
index 1e3522b2..6388a8be 100644
--- a/src/ipa/rkisp1/data/meson.build
+++ b/src/ipa/rkisp1/data/meson.build
@@ -6,6 +6,7 @@  conf_files = files([
     'ov2685.yaml',
     'ov4689.yaml',
     'ov5640.yaml',
+    'ov5647.yaml',
     'ov5695.yaml',
     'ov8858.yaml',
     'uncalibrated.yaml',
diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
index 4b21d412..f36a45b5 100644
--- a/src/ipa/rkisp1/data/ov5640.yaml
+++ b/src/ipa/rkisp1/data/ov5640.yaml
@@ -232,19 +232,64 @@  algorithms:
             green: 2
             red-blue: 2
   - Dpf:
-      DomainFilter:
+      filter:
         g: [ 16, 16, 16, 16, 16, 16 ]
         rb: [ 16, 16, 16, 16, 16, 16 ]
-      NoiseLevelFunction:
+      nll:
         coeff: [
           1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
           1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
           1023
         ]
         scale-mode: "linear"
-      FilterStrength:
+      strength:
         r: 64
         g: 64
         b: 64
+      modes:
+      - type: "minimal"
+        filter:
+          g:  [ 14, 10,  7,  4,  2,  1 ]
+          rb: [ 14, 11,  8,  4,  2,  1 ]
+        nll:
+          coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
+          scale-mode: "linear"
+        strength:
+          r: 60
+          g: 60
+          b: 60
+      - type: "highquality"
+        filter:
+          g:  [ 22, 18, 13,  8,  5,  2 ]
+          rb: [ 20, 18, 16, 11,  7,  3 ]
+        nll:
+          coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
+          scale-mode: "linear"
+        strength:
+          r: 130
+          g: 130
+          b: 130
+      - type: "fast"
+        filter:
+          g:  [ 16, 12,  9,  5,  3,  1 ]
+          rb: [ 16, 13, 10,  6,  4,  2 ]
+        nll:
+          coeff: [ 0, 16, 32, 48, 66, 86, 108, 132, 160, 192, 228, 268, 312, 360, 412, 468, 528 ]
+          scale-mode: "linear"
+        strength:
+          r: 90
+          g: 90
+          b: 90
+      - type: "zsl"
+        filter:
+          g:  [ 18, 14, 10,  6,  3,  1 ]
+          rb: [ 18, 16, 13,  9,  5,  3 ]
+        nll:
+          coeff: [ 0, 20, 40, 60, 82, 106, 132, 160, 192, 228, 268, 312, 360, 412, 468, 528, 592 ]
+          scale-mode: "linear"
+        strength:
+          r: 110
+          g: 110
+          b: 110
   - Filter:
 ...
diff --git a/src/ipa/rkisp1/data/ov5647.yaml b/src/ipa/rkisp1/data/ov5647.yaml
new file mode 100644
index 00000000..dfdbae14
--- /dev/null
+++ b/src/ipa/rkisp1/data/ov5647.yaml
@@ -0,0 +1,46 @@ 
+# SPDX-License-Identifier: CC0-1.0
+%YAML 1.1
+---
+version: 1
+algorithms:
+  - Agc:
+  - Awb:
+  - Dpf:
+      filter:
+        g:  [ 18, 13,  9,  5,  3,  1 ]
+        rb: [ 18, 15, 12,  8,  5,  2 ]
+      nll:
+        coeff: [
+          0,  14,  28,  42,  58,  76,  96, 120,
+          148, 180, 216, 256, 300, 348, 400, 456,
+          520
+        ]
+        scale-mode: "linear"
+      strength:
+        r: 80
+        g: 80
+        b: 80
+      modes:
+        - type: "minimal"
+          filter:
+            g:  [ 14, 10,  7,  4,  2,  1 ]
+            rb: [ 14, 11,  8,  4,  2,  1 ]
+          nll:
+            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
+            scale-mode: "linear"
+          strength:
+            r: 60
+            g: 60
+            b: 60
+        - type: "highquality"
+          filter:
+            g:  [ 22, 18, 13,  8,  5,  2 ]
+            rb: [ 20, 18, 16, 11,  7,  3 ]
+          nll:
+            coeff: [ 0, 26, 52, 78, 106, 138, 172, 208, 248, 292, 340, 392, 448, 508, 572, 640, 712 ]
+            scale-mode: "linear"
+          strength:
+            r: 1
+            g: 1
+            b: 1
+...