[libcamera-devel] [PATCH v2 1/2] libcamera: control: initialise control info to ControlTypeNone by default
Tomi Valkeinen
tomi.valkeinen at ideasonboard.com
Fri Sep 30 13:14:12 CEST 2022
Hi,
On 30/09/2022 14:01, David Plowman wrote:
> Hi Christian
>
> I have a question about this because it's causing my Python code to
> break. Not in any major way, we just need to decide what we want to do
> about it.
>
> The problem is that you can no longer fetch the default value for a
> control, it causes a runtime error. The code in question is here:
> https://git.linuxtv.org/libcamera.git/tree/src/py/libcamera/py_helpers.cpp#n57
>
> There are a number of straightforward solutions, such as returning
> "py::none()", for example. Does that sound like a reasonable thing to
> do?
Are we supposed to have uninitialized values? In that case py::none
sounds fine. Or is it a bug if a control has an uninitialized default?
Then throwing an exception, as we do now, sounds fine.
Tomi
> Thanks!
> David
>
> On Tue, 30 Aug 2022 at 21:21, Christian Rauch via libcamera-devel
> <libcamera-devel at lists.libcamera.org> 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>
>> ---
>> 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