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:
@@ -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),
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user