[PATCH] libcamera: controls: Handle enum values without a cast
Jacopo Mondi
jacopo.mondi at ideasonboard.com
Thu Sep 26 11:13:44 CEST 2024
Hi Laurent
On Thu, Sep 26, 2024 at 03:24:27AM GMT, Laurent Pinchart wrote:
> 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 at ideasonboard.com>
brilliant, less things to type in!
Reviewed-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
Thanks
j
> ---
> include/libcamera/controls.h | 6 +++++-
> src/libcamera/pipeline/ipu3/ipu3.cpp | 2 +-
> 2 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
> index 25f67ed948a3..c5131870d402 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
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 430aa902eec8..29d3c6c194c1 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -958,7 +958,7 @@ int PipelineHandlerIPU3::updateControls(IPU3CameraData *data)
> values.reserve(testPatternModes.size());
>
> for (auto pattern : testPatternModes)
> - values.emplace_back(static_cast<int32_t>(pattern));
> + values.emplace_back(pattern);
>
> controls[&controls::draft::TestPatternMode] = ControlInfo(values);
> }
>
> base-commit: f2088eb91fd6477b152233b9031cb115ca1ae824
> --
> Regards,
>
> Laurent Pinchart
>
More information about the libcamera-devel
mailing list