[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