[libcamera-devel] [PATCH 20/31] libcamera: controls: Add support for int8_t controls
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Mar 3 01:42:39 CET 2020
On 29/02/2020 16:42, Laurent Pinchart wrote:
> From: Jacopo Mondi <jacopo at jmondi.org>
>
> Add support for 8 bit integers to the control framework and to the
> control serializer.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> include/libcamera/controls.h | 6 ++++++
> src/libcamera/control_serializer.cpp | 12 ++++++++++++
> src/libcamera/controls.cpp | 14 +++++++++++---
> 3 files changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
> index 97a662e3f4a6..9b3aaae55c78 100644
> --- a/include/libcamera/controls.h
> +++ b/include/libcamera/controls.h
> @@ -22,6 +22,7 @@ class ControlValidator;
> enum ControlType {
> ControlTypeNone,
> ControlTypeBool,
> + ControlTypeInteger8,
> ControlTypeInteger32,
> ControlTypeInteger64,
> ControlTypeFloat,
> @@ -43,6 +44,11 @@ struct control_type<bool> {
> static constexpr ControlType value = ControlTypeBool;
> };
>
> +template<>
> +struct control_type<int8_t> {
> + static constexpr ControlType value = ControlTypeInteger8;
> +};
> +
> template<>
> struct control_type<int32_t> {
> static constexpr ControlType value = ControlTypeInteger32;
> diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp
> index 5feaaa965cc5..5537c5466025 100644
> --- a/src/libcamera/control_serializer.cpp
> +++ b/src/libcamera/control_serializer.cpp
> @@ -153,6 +153,12 @@ void ControlSerializer::store(const ControlValue &value,
> break;
> }
>
> + case ControlTypeInteger8: {
> + int8_t data = value.get<int8_t>();
> + buffer.write(&data);
> + break;
> + }
> +
> case ControlTypeInteger32: {
> int32_t data = value.get<int32_t>();
> buffer.write(&data);
> @@ -331,6 +337,12 @@ ControlValue ControlSerializer::load<ControlValue>(ControlType type,
> return ControlValue(value);
> }
>
> + case ControlTypeInteger8: {
> + int8_t value;
> + b.read(&value);
> + return ControlValue(value);
> + }
> +
> case ControlTypeInteger32: {
> int32_t value;
> b.read(&value);
> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
> index 46469dd8b98b..9970d75ea684 100644
> --- a/src/libcamera/controls.cpp
> +++ b/src/libcamera/controls.cpp
> @@ -53,6 +53,7 @@ namespace {
> static constexpr size_t ControlValueSize[] = {
> [ControlTypeNone] = 0,
> [ControlTypeBool] = sizeof(bool),
> + [ControlTypeInteger8] = sizeof(int8_t),
> [ControlTypeInteger32] = sizeof(int32_t),
> [ControlTypeInteger64] = sizeof(int64_t),
> [ControlTypeFloat] = sizeof(float),
> @@ -67,6 +68,8 @@ static constexpr size_t ControlValueSize[] = {
> * Invalid type, for empty values
> * \var ControlTypeBool
> * The control stores a boolean value
> + * \var ControlTypeInteger8
> + * The control stores an 8-bit integer value
> * \var ControlTypeInteger32
> * The control stores a 32-bit integer value
> * \var ControlTypeInteger64
> @@ -202,6 +205,11 @@ std::string ControlValue::toString() const
> str += *value ? "True" : "False";
> break;
> }
> + case ControlTypeInteger8: {
> + const int8_t *value = reinterpret_cast<const int8_t *>(data);
> + str += std::to_string(*value);
> + break;
> + }
> case ControlTypeInteger32: {
> const int32_t *value = reinterpret_cast<const int32_t *>(data);
> str += std::to_string(*value);
> @@ -386,9 +394,9 @@ void ControlValue::set(ControlType type, bool isArray, const void *data,
> * instead of Control.
> *
> * Controls of any type can be defined through template specialisation, but
> - * libcamera only supports the bool, int32_t, int64_t and float types natively
> - * (this includes types that are equivalent to the supported types, such as int
> - * and long int).
> + * libcamera only supports the bool, int8_t, int32_t, int64_t and float types
> + * natively (this includes types that are equivalent to the supported types,
> + * such as int and long int).
> *
> * Controls IDs shall be unique. While nothing prevents multiple instances of
> * the Control class to be created with the same ID for the same object, doing
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list