[v1,4/4] pycamera: Add missing code for ControlTypePoint
diff mbox series

Message ID 20241015203820.574326-5-stefan.klug@ideasonboard.com
State Accepted
Headers show
Series
  • A few small fixes
Related show

Commit Message

Stefan Klug Oct. 15, 2024, 8:38 p.m. UTC
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@ideasonboard.com>
---
 src/py/libcamera/py_enums.cpp   |  3 ++-
 src/py/libcamera/py_helpers.cpp | 16 ++++++++++------
 2 files changed, 12 insertions(+), 7 deletions(-)

Comments

Kieran Bingham Oct. 16, 2024, 2:24 p.m. UTC | #1
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@ideasonboard.com>

> Fixes: 200d535ca85f ("libcamera: controls: Add ControlTypePoint")
> Signed-off-by: Stefan Klug <stefan.klug@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
>
Laurent Pinchart Oct. 16, 2024, 2:41 p.m. UTC | #2
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@ideasonboard.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@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");
>  	}
Paul Elder Oct. 17, 2024, 1:34 a.m. UTC | #3
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@ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder@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
>

Patch
diff mbox series

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");
 	}