[PATCH v3 3/4] utils: libtuning: modules: Add skeletal CCM module

Paul Elder paul.elder at ideasonboard.com
Wed May 29 21:42:50 CEST 2024


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 copied from the hardcoded values in ctt, except for
the offsets, which are all set to zero.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally at ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug at ideasonboard.com>

---
Changes in v3:
- remove the unused compatible string
- fix the commit message

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  | 87 +++++++++++++++++++
 3 files changed, 115 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..fe3d7056b
--- /dev/null
+++ b/utils/tuning/libtuning/modules/ccm/rkisp1.py
@@ -0,0 +1,87 @@
+# 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'
+
+    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
-- 
2.39.2



More information about the libcamera-devel mailing list