[libcamera-devel] [PATCH 6/6] libcamera: control_serializer: Serialize info::def()
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Sep 2 17:03:23 CEST 2021
On 01/09/2021 15:38, Jacopo Mondi wrote:
> The ControlInfo class was originally designed to only transport
> the control's minimum and maximum values which represent the control's
> valid limits.
>
> Later the default value of the control has been added to the ControlInfo
> class, but the control serializer implementation has not been updated
> accordingly.
>
> This causes issues to IPA modules making use of ControlInfo::def() as,
> when running in isolation, they would receive a 0 value as default.
>
> Fix that by serializing and deserializing the additional ControlValue
> and update the protocol description accordingly.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
> src/libcamera/control_serializer.cpp | 6 ++++--
> src/libcamera/ipa_controls.cpp | 14 ++++++++------
> 2 files changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp
> index 7eef041a16ee..4e8045251938 100644
> --- a/src/libcamera/control_serializer.cpp
> +++ b/src/libcamera/control_serializer.cpp
> @@ -105,7 +105,7 @@ size_t ControlSerializer::binarySize(const ControlValue &value)
>
> size_t ControlSerializer::binarySize(const ControlInfo &info)
> {
> - return binarySize(info.min()) + binarySize(info.max());
> + return binarySize(info.min()) + binarySize(info.max()) + binarySize(info.def());
> }
>
> /**
> @@ -158,6 +158,7 @@ void ControlSerializer::store(const ControlInfo &info, ByteStreamBuffer &buffer)
> {
> store(info.min(), buffer);
> store(info.max(), buffer);
> + store(info.def(), buffer);
> }
>
> /**
> @@ -346,8 +347,9 @@ ControlInfo ControlSerializer::loadControlInfo(ControlType type,
>
> ControlValue min = loadControlValue(type, b);
> ControlValue max = loadControlValue(type, b);
> + ControlValue def = loadControlValue(type, b);
>
> - return ControlInfo(min, max);
> + return ControlInfo(min, max, def);
> }
>
> /**
> diff --git a/src/libcamera/ipa_controls.cpp b/src/libcamera/ipa_controls.cpp
> index fb98cda30ede..3d172d66b30f 100644
> --- a/src/libcamera/ipa_controls.cpp
> +++ b/src/libcamera/ipa_controls.cpp
> @@ -108,17 +108,19 @@
> * +-------------------------+ .
> * / | ... | | entry[n].offset
> * | +-------------------------+ <-----´
> - * Data | | minimum value (#n) | \
> - * section | +-------------------------+ | Entry #n
> - * | | maximum value (#n) | /
> + * | | minimum value (#n) | \
> + * Data | +-------------------------+ |
> + * section | | maximum value (#n) | | Entry #n
> + * | +-------------------------+ |
> + * | | default value (#n) | /
> * | +-------------------------+
> * \ | ... |
> * +-------------------------+
> * ~~~~
> *
> - * The minimum and maximum value are stored in the platform's native data
> - * format. The ipa_control_info_entry::offset field stores the offset from the
> - * beginning of the data section to the info data.
> + * The minimum, maximum and default value are stored in the platform's native
> + * data format. The ipa_control_info_entry::offset field stores the offset from
> + * the beginning of the data section to the info data.
> *
> * Info data in the data section shall be stored in the same order as the
> * entries array, shall be aligned to a multiple of 8 bytes, and shall be
>
More information about the libcamera-devel
mailing list