# SPDX-License-Identifier: GPL-2.0-only # # clang-format configuration file. Intended for clang-format >= 7. # # For more information, see: # # Documentation/process/clang-format.rst # https://clang.llvm.org/docs/ClangFormat.html # https://clang.llvm.org/docs/ClangFormatStyleOptions.html # --- Language: Cpp AccessModifierOffset: -8 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlines: Right AlignOperands: true AlignTrailingComments: false AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: InlineOnly AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: MultiLine BinPackArguments: true BinPackParameters: true BraceWrapping: AfterClass: true AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false AfterExternBlock: false BeforeCatch: false BeforeElse: false IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true BreakBeforeBinaryOperators: None BreakBeforeBraces: Custom BreakBeforeInheritanceComma: false BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true BreakConstructorInitializers: BeforeColon BreakAfterJavaFieldAnnotations: false BreakStringLiterals: false ColumnLimit: 0 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 8 ContinuationIndentWidth: 8 Cpp11BracedListStyle: false DerivePointerAlignment: false DisableFormat: false ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true ForEachMacros: - 'udev_list_entry_foreach' SortIncludes: true IncludeBlocks: Regroup IncludeCategories: # Headers matching the name of the component are matched automatically. # Priority 1 # Other library headers (explicit overrides to match before system headers) - Regex: '(|||||)' Priority: 9 # Qt includes (match before C++ standard library) - Regex: '' Priority: 9 # Headers in <> with an extension. (+system libraries) - Regex: '<([A-Za-z0-9\-_])+\.h>' Priority: 2 # System headers - Regex: '' Priority: 2 # C++ standard library includes (no extension) - Regex: '<([A-Za-z0-9\-_/])+>' Priority: 2 # Linux headers, as a second group/subset of system headers - Regex: '' Priority: 3 # Headers for libcamera Base support - Regex: '' Priority: 4 - Regex: '' Priority: 5 # Public API Headers for libcamera, which are not in a subdir (i.e. ipa/,internal/) - Regex: '' Priority: 6 # IPA Interfaces - Regex: '' Priority: 7 # libcamera Internal headers in "" - Regex: '"libcamera/internal/.*\.h"' Priority: 8 # Other libraries headers with one group per library (.h or .hpp) - Regex: '<.*/.*\.hp*>' Priority: 9 # local modular includes "path/file.h" (.h or .hpp) - Regex: '"(.*/)+.*\.hp*"' Priority: 10 # Other local headers "file.h" with extension (.h or .hpp) - Regex: '".*.hp*"' Priority: 11 # Any unmatched line, separated from the last group - Regex: '"*"' Priority: 100 IncludeIsMainRegex: '(_test)?$' IndentCaseLabels: false IndentPPDirectives: None IndentWidth: 8 IndentWrappedFunctionNames: false JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: false MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCBinPackProtocolList: Auto ObjCBlockIndentWidth: 8 ObjCSpaceAfterProperty: true ObjCSpaceBeforeProtocolList: true # Taken from git's rules PenaltyBreakAssignment: 10 PenaltyBreakBeforeFirstCallParameter: 30 PenaltyBreakComment: 10 PenaltyBreakFirstLessLess: 0 PenaltyBreakString: 10 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 100 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Right ReflowComments: false SortIncludes: true SortUsingDeclarations: true SpaceAfterCStyleCast: false SpaceAfterTemplateKeyword: false SpaceBeforeAssignmentOperators: true SpaceBeforeCpp11BracedList: false SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true SpaceBeforeParens: ControlStatements SpaceBeforeRangeBasedForLoopColon: true SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false SpacesInContainerLiterals: false SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false Standard: Cpp11 TabWidth: 8 UseTab: Always ... 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2022, Ideas On Board
 *
 * IPA Module
 */

#include "module.h"

/**
 * \file module.h
 * \brief IPA Module common interface
 */

namespace libcamera {

LOG_DEFINE_CATEGORY(IPAModuleAlgo)

/**
 * \brief The IPA (Image Processing Algorithm) namespace
 *
 * The IPA namespace groups all types specific to IPA modules. It serves as the
 * top-level namespace for the IPA library libipa, and also contains
 * module-specific namespaces for IPA modules.
 */
namespace ipa {

/**
 * \class Module
 * \brief The base class for all IPA modules
 * \tparam Context The type of the shared IPA context
 * \tparam FrameContext The type of the frame context
 * \tparam Config The type of the IPA configuration data
 * \tparam Params The type of the ISP specific parameters
 * \tparam Stats The type of the IPA statistics and ISP results
 *
 * The Module class template defines a standard internal interface between IPA
 * modules and libipa.
 *
 * While IPA modules are platform-specific, many of their internal functions are
 * conceptually similar, even if they take different types of platform-specifc
 * parameters. For instance, IPA modules could share code that instantiates,
 * initializes and run algorithms if it wasn't for the fact that the the format
 * of ISP parameters or statistics passed to the related functions is
 * device-dependent.
 *
 * To enable a shared implementation of those common tasks in libipa, the Module
 * class template defines a standard internal interface between IPA modules and
 * libipa. The template parameters specify the types of module-dependent data.
 * IPA modules shall create a specialization of the Module class template in
 * their namespace, and use it to specialize other classes of libipa, such as
 * the Algorithm class.
 */

/**
 * \typedef Module::Context
 * \brief The type of the shared IPA context
 */

/**
 * \typedef Module::FrameContext
 * \brief The type of the frame context
 */

/**
 * \typedef Module::Config
 * \brief The type of the IPA configuration data
 */

/**
 * \typedef Module::Params
 * \brief The type of the ISP specific parameters
 */

/**
 * \typedef Module::Stats
 * \brief The type of the IPA statistics and ISP results
 */

/**
 * \fn Module::algorithms()
 * \brief Retrieve the list of instantiated algorithms
 * \return The list of instantiated algorithms
 */

/**
 * \fn Module::createAlgorithms()
 * \brief Create algorithms from YAML configuration data
 * \param[in] context The IPA context
 * \param[in] algorithms Algorithms configuration data as a parsed YamlObject
 *
 * This function iterates over the list of \a algorithms parsed from the YAML
 * configuration file, and instantiates and initializes the corresponding
 * algorithms. The configuration data is expected to be correct, any error
 * causes the function to fail and return immediately.
 *
 * \return 0 on success, or a negative error code on failure
 */

/**
 * \fn Module::registerAlgorithm()
 * \brief Add an algorithm factory class to the list of available algorithms
 * \param[in] factory Factory to use to construct the algorithm
 *
 * This function registers an algorithm factory. It is meant to be called by the
 * AlgorithmFactory constructor only.
 */

/**
 * \fn Module::createAlgorithm(const std::string &name)
 * \brief Create an instance of an Algorithm by name
 * \param[in] name The algorithm name
 *
 * This function is the entry point to algorithm instantiation for the IPA
 * module. It creates and returns an instance of an algorithm identified by its
 * \a name. If no such algorithm exists, the function returns nullptr.
 *
 * To make an algorithm available to the IPA module, it shall be registered with
 * the REGISTER_IPA_ALGORITHM() macro.
 *
 * \return A new instance of the Algorithm subclass corresponding to the \a name
 */

} /* namespace ipa */

} /* namespace libcamera */