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:
Laurent Pinchart 2019-10-06 09:43:07 +03:00
parent 5af6a1a012
commit 33ee44dc16
5 changed files with 22 additions and 0 deletions

View file

@ -24,6 +24,8 @@ ${ids}
${controls}
extern const ControlIdMap controls;
} /* namespace controls */
} /* namespace libcamera */

View file

@ -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

View file

@ -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 */

View file

@ -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

View file

@ -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),
}