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}
|
${controls}
|
||||||
|
|
||||||
|
extern const ControlIdMap controls;
|
||||||
|
|
||||||
} /* namespace controls */
|
} /* namespace controls */
|
||||||
|
|
||||||
} /* namespace libcamera */
|
} /* namespace libcamera */
|
||||||
|
|
|
@ -111,6 +111,7 @@ private:
|
||||||
ControlValue max_;
|
ControlValue max_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
using ControlIdMap = std::unordered_map<unsigned int, const ControlId *>;
|
||||||
using ControlInfoMap = std::unordered_map<const ControlId *, ControlRange>;
|
using ControlInfoMap = std::unordered_map<const ControlId *, ControlRange>;
|
||||||
|
|
||||||
class ControlList
|
class ControlList
|
||||||
|
|
|
@ -31,6 +31,13 @@ ${controls_doc}
|
||||||
${controls_def}
|
${controls_def}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief List of all supported libcamera controls
|
||||||
|
*/
|
||||||
|
extern const ControlIdMap controls {
|
||||||
|
${controls_map}
|
||||||
|
};
|
||||||
|
|
||||||
} /* namespace controls */
|
} /* namespace controls */
|
||||||
|
|
||||||
} /* namespace libcamera */
|
} /* namespace libcamera */
|
||||||
|
|
|
@ -355,6 +355,15 @@ std::string ControlRange::toString() const
|
||||||
return ss.str();
|
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
|
* \typedef ControlInfoMap
|
||||||
* \brief A map of ControlId to ControlRange
|
* \brief A map of ControlId to ControlRange
|
||||||
|
|
|
@ -25,6 +25,7 @@ ${description}
|
||||||
|
|
||||||
ctrls_doc = []
|
ctrls_doc = []
|
||||||
ctrls_def = []
|
ctrls_def = []
|
||||||
|
ctrls_map = []
|
||||||
|
|
||||||
for ctrl in controls:
|
for ctrl in controls:
|
||||||
name, ctrl = ctrl.popitem()
|
name, ctrl = ctrl.popitem()
|
||||||
|
@ -43,10 +44,12 @@ ${description}
|
||||||
|
|
||||||
ctrls_doc.append(doc_template.substitute(info))
|
ctrls_doc.append(doc_template.substitute(info))
|
||||||
ctrls_def.append(def_template.substitute(info))
|
ctrls_def.append(def_template.substitute(info))
|
||||||
|
ctrls_map.append('\t{ ' + id_name + ', &' + name + ' },')
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'controls_doc': '\n\n'.join(ctrls_doc),
|
'controls_doc': '\n\n'.join(ctrls_doc),
|
||||||
'controls_def': '\n'.join(ctrls_def),
|
'controls_def': '\n'.join(ctrls_def),
|
||||||
|
'controls_map': '\n'.join(ctrls_map),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue