summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-09-26 02:59:53 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-09-30 10:56:48 +0300
commite6da224926b0d18dc4ad814843f2561e4e16a027 (patch)
tree648eb1fab8a95e3f22eb3bd59531513bcd4b2ce2 /include
parent4cb3380f4d5615f041ed5698eb1fd12b2e46a720 (diff)
libcamera: controls: Handle enum values without a cast
When constructing a ControlValue from an enum value, an explicit cast to int32_t is needed as we use int32_t as the underlying type for all enumerated controls. This makes users of ControlValue more complex. To simplify them, specialize the control_type template for enum types, to support construction of ControlValue directly without a cast. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'include')
-rw-r--r--include/libcamera/controls.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 25f67ed9..c5131870 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -39,7 +39,7 @@ enum ControlType {
namespace details {
-template<typename T>
+template<typename T, typename = std::void_t<>>
struct control_type {
};
@@ -102,6 +102,10 @@ struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {
static constexpr std::size_t size = N;
};
+template<typename T>
+struct control_type<T, std::enable_if_t<std::is_enum_v<T>>> : public control_type<int32_t> {
+};
+
} /* namespace details */
class ControlValue