[PATCH v2 3/5] utils: libtuning: modules: Add skeletal CCM module

Dan Scally dan.scally at ideasonboard.com
Mon May 20 15:30:10 CEST 2024


Hi Paul

On 17/05/2024 08:57, Paul Elder wrote:
> Add a skeletal CCM module just so that we can have some CCM tuning
> values that we can use to test during development of CCM in the IPAs. As
> rkisp1 is the main target, we only add support for rkisp1 for now.
>
> The parameters are mostly copied from the hardcoded values in ctt,
> except for the metering modes.
>
> As CCM is called CTK (for crosstalk) in rkisp1, that is the name that
> will be used for rkisp1.
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
>
> ---
> Changes in v2:
> - move converting floating to fixed point from the tuning script to the
>    IPA
> - reorganize the ccm list to mirror the format of lsc
> - add offset vectors
> ---
>   .../tuning/libtuning/modules/ccm/__init__.py  |  6 ++
>   utils/tuning/libtuning/modules/ccm/ccm.py     | 22 +++++
>   utils/tuning/libtuning/modules/ccm/rkisp1.py  | 89 +++++++++++++++++++
>   3 files changed, 117 insertions(+)
>   create mode 100644 utils/tuning/libtuning/modules/ccm/__init__.py
>   create mode 100644 utils/tuning/libtuning/modules/ccm/ccm.py
>   create mode 100644 utils/tuning/libtuning/modules/ccm/rkisp1.py
>
> diff --git a/utils/tuning/libtuning/modules/ccm/__init__.py b/utils/tuning/libtuning/modules/ccm/__init__.py
> new file mode 100644
> index 000000000..322602afe
> --- /dev/null
> +++ b/utils/tuning/libtuning/modules/ccm/__init__.py
> @@ -0,0 +1,6 @@
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +#
> +# Copyright (C) 2024, Paul Elder <paul.elder at ideasonboard.com>
> +
> +from libtuning.modules.ccm.ccm import CCM
> +from libtuning.modules.ccm.rkisp1 import CCMRkISP1
> diff --git a/utils/tuning/libtuning/modules/ccm/ccm.py b/utils/tuning/libtuning/modules/ccm/ccm.py
> new file mode 100644
> index 000000000..7ddf0a8ca
> --- /dev/null
> +++ b/utils/tuning/libtuning/modules/ccm/ccm.py
> @@ -0,0 +1,22 @@
> +# SPDX-License-Identifier: BSD-2-Clause
> +#
> +# Copyright (C) 2019, Raspberry Pi Ltd
> +# Copyright (C) 2024, Paul Elder <paul.elder at ideasonboard.com>
> +
> +from ..module import Module
> +
> +import libtuning as lt
> +import libtuning.utils as utils
> +
> +import numpy as np
> +
> +class CCM(Module):
> +    type = 'ccm'
> +    hr_name = 'CCM (Base)'
> +    out_name = 'GenericCCM'
> +
> +    def __init__(self, *,
> +                 debug: list):
> +        super().__init__()
> +
> +        self.debug = debug
> diff --git a/utils/tuning/libtuning/modules/ccm/rkisp1.py b/utils/tuning/libtuning/modules/ccm/rkisp1.py
> new file mode 100644
> index 000000000..acae0a9b0
> --- /dev/null
> +++ b/utils/tuning/libtuning/modules/ccm/rkisp1.py
> @@ -0,0 +1,89 @@
> +# SPDX-License-Identifier: BSD-2-Clause
> +#
> +# Copyright (C) 2019, Raspberry Pi Ltd
> +# Copyright (C) 2024, Paul Elder <paul.elder at ideasonboard.com>
> +#
> +# rkisp1.py - Ccm module for tuning rkisp1
> +
> +from .ccm import CCM
> +
> +import libtuning as lt
> +import libtuning.utils as utils
> +
> +from numbers import Number
> +import numpy as np
> +
> +
> +class CCMRkISP1(CCM):
> +    hr_name = 'Crosstalk Correction (RkISP1)'
> +    out_name = 'Ccm'
> +    # \todo Not sure if this is useful. Probably will remove later.
> +    compatible = ['rkisp1']

Let's drop it now :)


Reviewed-by: Daniel Scally <dan.scally at ideasonboard.com>

> +
> +    def __init__(self, **kwargs):
> +        super().__init__(**kwargs)
> +
> +    # We don't actually need anything from the config file
> +    def validate_config(self, config: dict) -> bool:
> +        return True
> +
> +    def _generate_ccms(self) -> dict:
> +        ccms = [
> +                {
> +                    'ct': 2860,
> +                    'ccm': [ 2.12089, -0.52461, -0.59629,
> +                            -0.85342,  2.80445, -0.95103,
> +                            -0.26897, -1.14788,  2.41685 ],
> +                    'offsets': [ 0, 0, 0 ]
> +                },
> +
> +                {
> +                    'ct': 2960,
> +                    'ccm': [ 2.26962, -0.54174, -0.72789,
> +                            -0.77008,  2.60271, -0.83262,
> +                            -0.26036, -1.51254,  2.77289 ],
> +                    'offsets': [ 0, 0, 0 ]
> +                },
> +
> +                {
> +                    'ct': 3603,
> +                    'ccm': [ 2.18644, -0.66148, -0.52496,
> +                            -0.77828,  2.69474, -0.91645,
> +                            -0.25239, -0.83059,  2.08298 ],
> +                    'offsets': [ 0, 0, 0 ]
> +                },
> +
> +                {
> +                    'ct': 4650,
> +                    'ccm': [ 2.18174, -0.70887, -0.47287,
> +                            -0.70196,  2.76426, -1.06231,
> +                            -0.25157, -0.71978,  1.97135 ],
> +                    'offsets': [ 0, 0, 0 ]
> +                },
> +
> +                {
> +                    'ct': 5858,
> +                    'ccm': [ 2.32392, -0.88421, -0.43971,
> +                            -0.63821,  2.58348, -0.94527,
> +                            -0.28541, -0.54112,  1.82653 ],
> +                    'offsets': [ 0, 0, 0 ]
> +                },
> +
> +                {
> +                    'ct': 7580,
> +                    'ccm': [ 2.21175, -0.53242, -0.67933,
> +                            -0.57875,  3.07922, -1.50047,
> +                            -0.27709, -0.73338,  2.01048 ],
> +                    'offsets': [ 0, 0, 0 ]
> +                },
> +        ]
> +
> +        return ccms
> +
> +    def process(self, config: dict, images: list, outputs: dict) -> dict:
> +        output = {}
> +
> +        output['ccms'] = self._generate_ccms()
> +        # \todo Debug functionality
> +
> +        return output


More information about the libcamera-devel mailing list