[PATCH v1 4/4] pycamera: Add missing code for ControlTypePoint

Kieran Bingham kieran.bingham at ideasonboard.com
Wed Oct 16 16:24:34 CEST 2024


Quoting Stefan Klug (2024-10-15 21:38:15)
> In the python bindings ControlTypePoint is not handled in the
> corresponding conversion functions. Add that.
> 
> While at it, sort the listings in the same order as the enum in
> controls.h.
> 

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> Fixes: 200d535ca85f ("libcamera: controls: Add ControlTypePoint")
> Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> ---
>  src/py/libcamera/py_enums.cpp   |  3 ++-
>  src/py/libcamera/py_helpers.cpp | 16 ++++++++++------
>  2 files changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/src/py/libcamera/py_enums.cpp b/src/py/libcamera/py_enums.cpp
> index ca6aeb868cbe..9e75ec1a97b3 100644
> --- a/src/py/libcamera/py_enums.cpp
> +++ b/src/py/libcamera/py_enums.cpp
> @@ -32,7 +32,8 @@ void init_py_enums(py::module &m)
>                 .value("Float", ControlType::ControlTypeFloat)
>                 .value("String", ControlType::ControlTypeString)
>                 .value("Rectangle", ControlType::ControlTypeRectangle)
> -               .value("Size", ControlType::ControlTypeSize);
> +               .value("Size", ControlType::ControlTypeSize)
> +               .value("Point", ControlType::ControlTypePoint);
>  
>         py::enum_<Orientation>(m, "Orientation")
>                 .value("Rotate0", Orientation::Rotate0)
> diff --git a/src/py/libcamera/py_helpers.cpp b/src/py/libcamera/py_helpers.cpp
> index 79891ab63862..1ad1d4c1a1cd 100644
> --- a/src/py/libcamera/py_helpers.cpp
> +++ b/src/py/libcamera/py_helpers.cpp
> @@ -34,6 +34,8 @@ static py::object valueOrTuple(const ControlValue &cv)
>  py::object controlValueToPy(const ControlValue &cv)
>  {
>         switch (cv.type()) {
> +       case ControlTypeNone:
> +               return py::none();
>         case ControlTypeBool:
>                 return valueOrTuple<bool>(cv);
>         case ControlTypeByte:
> @@ -46,14 +48,14 @@ py::object controlValueToPy(const ControlValue &cv)
>                 return valueOrTuple<float>(cv);
>         case ControlTypeString:
>                 return py::cast(cv.get<std::string>());
> -       case ControlTypeRectangle:
> -               return valueOrTuple<Rectangle>(cv);
>         case ControlTypeSize: {
>                 const Size *v = reinterpret_cast<const Size *>(cv.data().data());
>                 return py::cast(v);
>         }
> -       case ControlTypeNone:
> -               return py::none();
> +       case ControlTypeRectangle:
> +               return valueOrTuple<Rectangle>(cv);
> +       case ControlTypePoint:
> +               return valueOrTuple<Point>(cv);
>         default:
>                 throw std::runtime_error("Unsupported ControlValue type");
>         }
> @@ -73,6 +75,8 @@ static ControlValue controlValueMaybeArray(const py::object &ob)
>  ControlValue pyToControlValue(const py::object &ob, ControlType type)
>  {
>         switch (type) {
> +       case ControlTypeNone:
> +               return ControlValue();
>         case ControlTypeBool:
>                 return ControlValue(ob.cast<bool>());
>         case ControlTypeByte:
> @@ -89,8 +93,8 @@ ControlValue pyToControlValue(const py::object &ob, ControlType type)
>                 return controlValueMaybeArray<Rectangle>(ob);
>         case ControlTypeSize:
>                 return ControlValue(ob.cast<Size>());
> -       case ControlTypeNone:
> -               return ControlValue();
> +       case ControlTypePoint:
> +               return controlValueMaybeArray<Point>(ob);
>         default:
>                 throw std::runtime_error("Control type not implemented");
>         }
> -- 
> 2.43.0
>


More information about the libcamera-devel mailing list