[libcamera-devel] [PATCH v3 03/12] utils: tuning: libtuning: Implement extensible components of libtuning
Paul Elder
paul.elder at ideasonboard.com
Thu Nov 10 18:31:45 CET 2022
Implement the extensible components of libtuning. This includes:
- Parsers, for supporting different types of input config file formats
- Generators, for supporting different types of output tuning file
formats
- Modules, for supporting different tuning modules for different
algorithms and platforms
No parsers, generators, or modules are actually implemented. Only the
base classes are implemented.
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
Changes in v3:
- Newly split from the first patch "utils: tuning: libtuning: Implement
the core of libtuning"
- See changelog from that patch
---
utils/tuning/libtuning/generators/__init__.py | 0
.../tuning/libtuning/generators/generator.py | 15 +++++++++
utils/tuning/libtuning/modules/__init__.py | 0
utils/tuning/libtuning/modules/module.py | 33 +++++++++++++++++++
utils/tuning/libtuning/parsers/__init__.py | 0
utils/tuning/libtuning/parsers/parser.py | 21 ++++++++++++
6 files changed, 69 insertions(+)
create mode 100644 utils/tuning/libtuning/generators/__init__.py
create mode 100644 utils/tuning/libtuning/generators/generator.py
create mode 100644 utils/tuning/libtuning/modules/__init__.py
create mode 100644 utils/tuning/libtuning/modules/module.py
create mode 100644 utils/tuning/libtuning/parsers/__init__.py
create mode 100644 utils/tuning/libtuning/parsers/parser.py
diff --git a/utils/tuning/libtuning/generators/__init__.py b/utils/tuning/libtuning/generators/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/utils/tuning/libtuning/generators/generator.py b/utils/tuning/libtuning/generators/generator.py
new file mode 100644
index 00000000..7c8c9b99
--- /dev/null
+++ b/utils/tuning/libtuning/generators/generator.py
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Copyright (C) 2022, Paul Elder <paul.elder at ideasonboard.com>
+#
+# generator.py - Base class for a generator to convert dict to tuning file
+
+from pathlib import Path
+
+
+class Generator(object):
+ def __init__(self):
+ pass
+
+ def write(self, output_path: Path, output_dict: dict, output_order: list):
+ raise NotImplementedError
diff --git a/utils/tuning/libtuning/modules/__init__.py b/utils/tuning/libtuning/modules/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/utils/tuning/libtuning/modules/module.py b/utils/tuning/libtuning/modules/module.py
new file mode 100644
index 00000000..cb213154
--- /dev/null
+++ b/utils/tuning/libtuning/modules/module.py
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Copyright (C) 2022, Paul Elder <paul.elder at ideasonboard.com>
+#
+# module.py - Base class for algorithm-specific tuning modules
+
+
+# @var type Type of the module. Defined in the base module.
+# @var out_name The key that will be used for the algorithm in the algorithms
+# dictionary in the tuning output file
+# @var hr_name Human-readable module name, mostly for debugging
+class Module(object):
+ type = 'base'
+ hr_name = 'Base Module'
+ out_name = 'GenericAlgorithm'
+
+ def __init__(self):
+ pass
+
+ def validate_config(self, config: dict) -> bool:
+ raise NotImplementedError
+
+ # @brief Do the module's processing
+ # @param args argparse arguments
+ # @param config Full configuration from the input configuration file
+ # @param images List of images to process
+ # @param outputs The outputs of all modules that were executed before this
+ # module. Note that this is an input parameter, and the
+ # output of this module should be returned directly
+ # @return Result of the module's processing. It may be empty. None
+ # indicates failure and that the result should not be used.
+ def process(self, args, config: dict, images: list, outputs: dict) -> dict:
+ raise NotImplementedError
diff --git a/utils/tuning/libtuning/parsers/__init__.py b/utils/tuning/libtuning/parsers/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/utils/tuning/libtuning/parsers/parser.py b/utils/tuning/libtuning/parsers/parser.py
new file mode 100644
index 00000000..a17d8d71
--- /dev/null
+++ b/utils/tuning/libtuning/parsers/parser.py
@@ -0,0 +1,21 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Copyright (C) 2022, Paul Elder <paul.elder at ideasonboard.com>
+#
+# parser.py - Base class for a parser for a specific format of config file
+
+class Parser(object):
+ def __init__(self):
+ pass
+
+ # @brief Parse a config file into a config dict
+ # @details The config dict shall have one key 'general' with a dict value
+ # for general configuration options, and all other entries shall
+ # have the module as the key with its configuration options (as a
+ # dict) as the value. The config dict shall prune entries that are
+ # for modules that are not in @a modules.
+ # @param config (str) Path to config file
+ # @param modules (list) List of modules
+ # @return (dict, list) Configuration and list of modules to disable
+ def parse(self, config_file: str, modules: list) -> (dict, list):
+ raise NotImplementedError
--
2.35.1
More information about the libcamera-devel
mailing list