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

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

Commit Message

Rui Wang Jan. 15, 2026, 4:33 p.m. UTC
Update the RkISP1 denoise pre-filter (DPF) for the imx219/ov5640
sensor tuning config by adding the required DPF tuning block.

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

changelog since v7:
 - move ov5647 yaml out this commit and will add brand new commit
 - Update dpf tuning paras format , delete base config following
   parseConfig code change
---
 src/ipa/rkisp1/data/imx219.yaml | 24 ++++++++++++++
 src/ipa/rkisp1/data/ov5640.yaml | 59 +++++++++++++++++++++++++--------
 2 files changed, 69 insertions(+), 14 deletions(-)

Comments

Stefan Klug Jan. 16, 2026, 1:52 p.m. UTC | #1
Hi Rui,

Quoting Rui Wang (2026-01-15 17:33:17)
> Update the RkISP1 denoise pre-filter (DPF) for the imx219/ov5640
> sensor tuning config by adding the required DPF tuning block.
> 
> 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
> 
> changelog since v7:
>  - move ov5647 yaml out this commit and will add brand new commit
>  - Update dpf tuning paras format , delete base config following
>    parseConfig code change
> ---
>  src/ipa/rkisp1/data/imx219.yaml | 24 ++++++++++++++
>  src/ipa/rkisp1/data/ov5640.yaml | 59 +++++++++++++++++++++++++--------
>  2 files changed, 69 insertions(+), 14 deletions(-)
> 
> diff --git a/src/ipa/rkisp1/data/imx219.yaml b/src/ipa/rkisp1/data/imx219.yaml
> index 0d99cb52..54a8ae2d 100644
> --- a/src/ipa/rkisp1/data/imx219.yaml
> +++ b/src/ipa/rkisp1/data/imx219.yaml
> @@ -111,4 +111,28 @@ algorithms:
>                 1438, 1226, 1059, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, 1054, 1185,
>                 1326, 1334, 1334,
>               ]
> +  - Dpf:
> +      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

Looking at these changes, they look structurally quite different from
other places where we have multiple modes. E.g. Agc has

Agc:
  AeMeteringMode:
    MeteringCentreWeighted: ...
    MeteringSpot: ...
    MeteringMatrix: ...
  AeExposureMode:
    ExposureNormal: ...
    ExposureShort: ...

Similar on Awb. Should Dpf be designed similarly?
Something like:

Dpf:
  NoiseReductionModes:
    ReductionMinimal:
    ReductionFast:

as these are also the names used in the modes map.

We could then either add a NoiseReductionModeNormal, or add a
defaultMode property to the Dpf node, to solve the question Jacopo
brought up.

What do you think?

Best regards,
Stefan

>  ...
> diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
> index 4b21d412..4d5e7053 100644
> --- a/src/ipa/rkisp1/data/ov5640.yaml
> +++ b/src/ipa/rkisp1/data/ov5640.yaml
> @@ -232,19 +232,50 @@ algorithms:
>              green: 2
>              red-blue: 2
>    - Dpf:
> -      DomainFilter:
> -        g: [ 16, 16, 16, 16, 16, 16 ]
> -        rb: [ 16, 16, 16, 16, 16, 16 ]
> -      NoiseLevelFunction:
> -        coeff: [
> -          1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
> -          1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
> -          1023
> -        ]
> -        scale-mode: "linear"
> -      FilterStrength:
> -        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:
>  ...
> -- 
> 2.43.0
>
Jacopo Mondi Jan. 16, 2026, 2:38 p.m. UTC | #2
Hi Stefan

On Fri, Jan 16, 2026 at 02:52:31PM +0100, Stefan Klug wrote:
> Hi Rui,
>
> Quoting Rui Wang (2026-01-15 17:33:17)
> > Update the RkISP1 denoise pre-filter (DPF) for the imx219/ov5640
> > sensor tuning config by adding the required DPF tuning block.
> >
> > 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
> >
> > changelog since v7:
> >  - move ov5647 yaml out this commit and will add brand new commit
> >  - Update dpf tuning paras format , delete base config following
> >    parseConfig code change
> > ---
> >  src/ipa/rkisp1/data/imx219.yaml | 24 ++++++++++++++
> >  src/ipa/rkisp1/data/ov5640.yaml | 59 +++++++++++++++++++++++++--------
> >  2 files changed, 69 insertions(+), 14 deletions(-)
> >
> > diff --git a/src/ipa/rkisp1/data/imx219.yaml b/src/ipa/rkisp1/data/imx219.yaml
> > index 0d99cb52..54a8ae2d 100644
> > --- a/src/ipa/rkisp1/data/imx219.yaml
> > +++ b/src/ipa/rkisp1/data/imx219.yaml
> > @@ -111,4 +111,28 @@ algorithms:
> >                 1438, 1226, 1059, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, 1054, 1185,
> >                 1326, 1334, 1334,
> >               ]
> > +  - Dpf:
> > +      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
>
> Looking at these changes, they look structurally quite different from
> other places where we have multiple modes. E.g. Agc has
>
> Agc:
>   AeMeteringMode:
>     MeteringCentreWeighted: ...
>     MeteringSpot: ...
>     MeteringMatrix: ...
>   AeExposureMode:
>     ExposureNormal: ...
>     ExposureShort: ...
>
> Similar on Awb. Should Dpf be designed similarly?
> Something like:
>
> Dpf:
>   NoiseReductionModes:
>     ReductionMinimal:
>     ReductionFast:
>
> as these are also the names used in the modes map.
>
> We could then either add a NoiseReductionModeNormal, or add a
> defaultMode property to the Dpf node, to solve the question Jacopo

Ah, see, I called it "enabledMode" in my reply to the previous patch,
but I think the concept is the same!

> brought up.
>
> What do you think?
>
> Best regards,
> Stefan
>
> >  ...
> > diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
> > index 4b21d412..4d5e7053 100644
> > --- a/src/ipa/rkisp1/data/ov5640.yaml
> > +++ b/src/ipa/rkisp1/data/ov5640.yaml
> > @@ -232,19 +232,50 @@ algorithms:
> >              green: 2
> >              red-blue: 2
> >    - Dpf:
> > -      DomainFilter:
> > -        g: [ 16, 16, 16, 16, 16, 16 ]
> > -        rb: [ 16, 16, 16, 16, 16, 16 ]
> > -      NoiseLevelFunction:
> > -        coeff: [
> > -          1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
> > -          1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
> > -          1023
> > -        ]
> > -        scale-mode: "linear"
> > -      FilterStrength:
> > -        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:
> >  ...
> > --
> > 2.43.0
> >
Rui Wang Jan. 16, 2026, 3:01 p.m. UTC | #3
On 2026-01-16 08:52, Stefan Klug wrote:
> Hi Rui,
>
> Quoting Rui Wang (2026-01-15 17:33:17)
>> Update the RkISP1 denoise pre-filter (DPF) for the imx219/ov5640
>> sensor tuning config by adding the required DPF tuning block.
>>
>> 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
>>
>> changelog since v7:
>>   - move ov5647 yaml out this commit and will add brand new commit
>>   - Update dpf tuning paras format , delete base config following
>>     parseConfig code change
>> ---
>>   src/ipa/rkisp1/data/imx219.yaml | 24 ++++++++++++++
>>   src/ipa/rkisp1/data/ov5640.yaml | 59 +++++++++++++++++++++++++--------
>>   2 files changed, 69 insertions(+), 14 deletions(-)
>>
>> diff --git a/src/ipa/rkisp1/data/imx219.yaml b/src/ipa/rkisp1/data/imx219.yaml
>> index 0d99cb52..54a8ae2d 100644
>> --- a/src/ipa/rkisp1/data/imx219.yaml
>> +++ b/src/ipa/rkisp1/data/imx219.yaml
>> @@ -111,4 +111,28 @@ algorithms:
>>                  1438, 1226, 1059, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, 1054, 1185,
>>                  1326, 1334, 1334,
>>                ]
>> +  - Dpf:
>> +      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
> Looking at these changes, they look structurally quite different from
> other places where we have multiple modes. E.g. Agc has
>
> Agc:
>    AeMeteringMode:
>      MeteringCentreWeighted: ...
>      MeteringSpot: ...
>      MeteringMatrix: ...
>    AeExposureMode:
>      ExposureNormal: ...
>      ExposureShort: ...
>
> Similar on Awb. Should Dpf be designed similarly?
> Something like:
>
> Dpf:
>    NoiseReductionModes:
>      ReductionMinimal:
>      ReductionFast:
>
> as these are also the names used in the modes map.
>
> We could then either add a NoiseReductionModeNormal, or add a
> defaultMode property to the Dpf node, to solve the question Jacopo
> brought up.
>
> What do you think?
>
> Best regards,
> Stefan

Thanks for your information,

Dpf:
   NoiseReductionModes:
     ReductionMinimal:
     ReductionFast:

those naming rules looks more consistent as aec/awb,  I will adopt in 
version 9 patch.

Rui

>>   ...
>> diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
>> index 4b21d412..4d5e7053 100644
>> --- a/src/ipa/rkisp1/data/ov5640.yaml
>> +++ b/src/ipa/rkisp1/data/ov5640.yaml
>> @@ -232,19 +232,50 @@ algorithms:
>>               green: 2
>>               red-blue: 2
>>     - Dpf:
>> -      DomainFilter:
>> -        g: [ 16, 16, 16, 16, 16, 16 ]
>> -        rb: [ 16, 16, 16, 16, 16, 16 ]
>> -      NoiseLevelFunction:
>> -        coeff: [
>> -          1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
>> -          1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
>> -          1023
>> -        ]
>> -        scale-mode: "linear"
>> -      FilterStrength:
>> -        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:
>>   ...
>> -- 
>> 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..54a8ae2d 100644
--- a/src/ipa/rkisp1/data/imx219.yaml
+++ b/src/ipa/rkisp1/data/imx219.yaml
@@ -111,4 +111,28 @@  algorithms:
                1438, 1226, 1059, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, 1054, 1185,
                1326, 1334, 1334,
              ]
+  - Dpf:
+      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/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
index 4b21d412..4d5e7053 100644
--- a/src/ipa/rkisp1/data/ov5640.yaml
+++ b/src/ipa/rkisp1/data/ov5640.yaml
@@ -232,19 +232,50 @@  algorithms:
             green: 2
             red-blue: 2
   - Dpf:
-      DomainFilter:
-        g: [ 16, 16, 16, 16, 16, 16 ]
-        rb: [ 16, 16, 16, 16, 16, 16 ]
-      NoiseLevelFunction:
-        coeff: [
-          1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
-          1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
-          1023
-        ]
-        scale-mode: "linear"
-      FilterStrength:
-        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:
 ...