[libcamera-devel] [PATCH] libcamera: control: initialise control info to ControlTypeNone by default

Christian Rauch Rauch.Christian at gmx.de
Tue Aug 30 22:24:48 CEST 2022


Hi Jacopo,

I could reproduce the issue with the 'controls / control_info' test and
fixed it with v2 of this. The 'serialization / ipa_data_serializer_test'
test was skipped with "exit status 77".

Best,
Christian


Am 30.08.22 um 11:07 schrieb Jacopo Mondi:
> Hi Christian
>   I had two failures in running ninja test
>
>    7/71 libcamera:controls / control_info
>    FAIL            0.11s   killed by signal 6 SIGABRT
>
>    27/71 libcamera:serialization / ipa_data_serializer_test
>    FAIL            0.03s   (exit status 255 or signal 127 SIGinvalid)
>
> Could you check if you can reproduce on your side ?
>
> Thanks
>   j
>
> On Tue, Aug 30, 2022 at 09:30:49AM +0200, Jacopo Mondi via libcamera-devel wrote:
>> Hi Christian
>>
>> On Fri, Aug 26, 2022 at 07:34:26PM +0200, Christian Rauch via libcamera-devel wrote:
>>> The default ControlInfo constructor allows to partially initialised the
>>> min/max/def values. Uninitialised values are assigned to 0 by default. This
>>> implicit initialisation makes it impossible to distinguish between and
>>> uninitialised and an explicitly 0-initialised ControlValue.
>>>
>>> Default construct the ControlValue in the ControlInfo default contructor to
>>> explicitly represent uninitialised values by the ControlTypeNone type.
>>>
>>> Signed-off-by: Christian Rauch <Rauch.Christian at gmx.de>
>>
>> I think the idea is good: make sure we don't leave the ControlInfo
>> members unintentionally initialized to 0. This would certainly lead to
>> a more robust code base.
>>
>> However, as soon as we try to access a min/max/def which is now
>> initialized we get into a runtime error, and I'm not sure in how many
>> places in the code base we happily access a 0-initialized member
>> without noticing.
>>
>> Hence, I think this patch is worth being run through  at least CTS,
>> preferably throught all the run-time tests we, and the projects using,
>> libcamera have (I'm thinking libcamera-apps, in example).
>>
>> We'll sync internally on how to give this patch a good brush.
>>
>> Thanks
>>    j
>>
>>> ---
>>>  include/libcamera/controls.h | 6 +++---
>>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
>>> index ebc168fc..38d0a3e8 100644
>>> --- a/include/libcamera/controls.h
>>> +++ b/include/libcamera/controls.h
>>> @@ -268,9 +268,9 @@ private:
>>>  class ControlInfo
>>>  {
>>>  public:
>>> -	explicit ControlInfo(const ControlValue &min = 0,
>>> -			     const ControlValue &max = 0,
>>> -			     const ControlValue &def = 0);
>>> +	explicit ControlInfo(const ControlValue &min = {},
>>> +			     const ControlValue &max = {},
>>> +			     const ControlValue &def = {});
>>>  	explicit ControlInfo(Span<const ControlValue> values,
>>>  			     const ControlValue &def = {});
>>>  	explicit ControlInfo(std::set<bool> values, bool def);
>>> --
>>> 2.34.1
>>>


More information about the libcamera-devel mailing list