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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Oct 16 16:41:20 CEST 2024


Hi Stefan,

Thank you for the patch.

On Tue, Oct 15, 2024 at 10:38:15PM +0200, Stefan Klug wrote:
> 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.
> 
> Fixes: 200d535ca85f ("libcamera: controls: Add ControlTypePoint")
> Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart 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");
>  	}

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list