mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-23 00:25:07 +03:00
libcamera: control_ids: Generate map of all supported controls
In order to deserialise a ControlList, we will need to lookup ControlId instances based on their numerical ID. Generate a global map from the controls definitions to support such a lookup. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
5af6a1a012
commit
33ee44dc16
5 changed files with 22 additions and 0 deletions
|
@ -24,6 +24,8 @@ ${ids}
|
|||
|
||||
${controls}
|
||||
|
||||
extern const ControlIdMap controls;
|
||||
|
||||
} /* namespace controls */
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
|
|
@ -111,6 +111,7 @@ private:
|
|||
ControlValue max_;
|
||||
};
|
||||
|
||||
using ControlIdMap = std::unordered_map<unsigned int, const ControlId *>;
|
||||
using ControlInfoMap = std::unordered_map<const ControlId *, ControlRange>;
|
||||
|
||||
class ControlList
|
||||
|
|
|
@ -31,6 +31,13 @@ ${controls_doc}
|
|||
${controls_def}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \brief List of all supported libcamera controls
|
||||
*/
|
||||
extern const ControlIdMap controls {
|
||||
${controls_map}
|
||||
};
|
||||
|
||||
} /* namespace controls */
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
|
|
@ -355,6 +355,15 @@ std::string ControlRange::toString() const
|
|||
return ss.str();
|
||||
}
|
||||
|
||||
/**
|
||||
* \typedef ControlIdMap
|
||||
* \brief A map of numerical control ID to ControlId
|
||||
*
|
||||
* The map is used by ControlList instances to access controls by numerical
|
||||
* IDs. A global map of all libcamera controls is provided by
|
||||
* controls::controls.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \typedef ControlInfoMap
|
||||
* \brief A map of ControlId to ControlRange
|
||||
|
|
|
@ -25,6 +25,7 @@ ${description}
|
|||
|
||||
ctrls_doc = []
|
||||
ctrls_def = []
|
||||
ctrls_map = []
|
||||
|
||||
for ctrl in controls:
|
||||
name, ctrl = ctrl.popitem()
|
||||
|
@ -43,10 +44,12 @@ ${description}
|
|||
|
||||
ctrls_doc.append(doc_template.substitute(info))
|
||||
ctrls_def.append(def_template.substitute(info))
|
||||
ctrls_map.append('\t{ ' + id_name + ', &' + name + ' },')
|
||||
|
||||
return {
|
||||
'controls_doc': '\n\n'.join(ctrls_doc),
|
||||
'controls_def': '\n'.join(ctrls_def),
|
||||
'controls_map': '\n'.join(ctrls_map),
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue