[libcamera-devel] [PATCH v7 10/13] py: add support for the ColorSpace

Tomi Valkeinen tomi.valkeinen at ideasonboard.com
Thu May 5 12:41:01 CEST 2022


From: David Plowman <david.plowman at raspberrypi.com>

Add binding for ColorSpace.

Original version by David Plowman <david.plowman at raspberrypi.com>.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
---
 src/py/libcamera/pymain.cpp | 52 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 51 insertions(+), 1 deletion(-)

diff --git a/src/py/libcamera/pymain.cpp b/src/py/libcamera/pymain.cpp
index 3d2393ab..c442ad50 100644
--- a/src/py/libcamera/pymain.cpp
+++ b/src/py/libcamera/pymain.cpp
@@ -153,6 +153,11 @@ PYBIND11_MODULE(_libcamera, m)
 	auto pyRequest = py::class_<Request>(m, "Request");
 	auto pyFrameMetadata = py::class_<FrameMetadata>(m, "FrameMetadata");
 	auto pyTransform = py::class_<Transform>(m, "Transform");
+	auto pyColorSpace = py::class_<ColorSpace>(m, "ColorSpace");
+	auto pyColorSpacePrimaries = py::enum_<ColorSpace::Primaries>(pyColorSpace, "Primaries");
+	auto pyColorSpaceTransferFunction = py::enum_<ColorSpace::TransferFunction>(pyColorSpace, "TransferFunction");
+	auto pyColorSpaceYcbcrEncoding = py::enum_<ColorSpace::YcbcrEncoding>(pyColorSpace, "YcbcrEncoding");
+	auto pyColorSpaceRange = py::enum_<ColorSpace::Range>(pyColorSpace, "Range");
 
 	/* Global functions */
 	m.def("logSetLevel", &logSetLevel);
@@ -360,7 +365,8 @@ PYBIND11_MODULE(_libcamera, m)
 		.def_readwrite("stride", &StreamConfiguration::stride)
 		.def_readwrite("frameSize", &StreamConfiguration::frameSize)
 		.def_readwrite("bufferCount", &StreamConfiguration::bufferCount)
-		.def_property_readonly("formats", &StreamConfiguration::formats, py::return_value_policy::reference_internal);
+		.def_property_readonly("formats", &StreamConfiguration::formats, py::return_value_policy::reference_internal)
+		.def_readwrite("colorSpace", &StreamConfiguration::colorSpace);
 
 	pyStreamFormats
 		.def_property_readonly("pixelFormats", [](StreamFormats &self) {
@@ -523,4 +529,48 @@ PYBIND11_MODULE(_libcamera, m)
 		.def("compose", [](Transform &self, Transform &other) {
 			self = self * other;
 		});
+
+	pyColorSpace
+		.def(py::init([](ColorSpace::Primaries primaries,
+				 ColorSpace::TransferFunction transferFunction,
+				 ColorSpace::YcbcrEncoding ycbcrEncoding,
+				 ColorSpace::Range range) {
+			return ColorSpace(primaries, transferFunction, ycbcrEncoding, range);
+		}), py::arg("primaries"), py::arg("transferFunction"),
+		    py::arg("ycbcrEncoding"), py::arg("range"))
+		.def(py::init([](ColorSpace &other) { return other; }))
+		.def("__repr__", [](ColorSpace &self) {
+			return "<libcamera.ColorSpace '" + self.toString() + "'>";
+		})
+		.def_readwrite("primaries", &ColorSpace::primaries)
+		.def_readwrite("transferFunction", &ColorSpace::transferFunction)
+		.def_readwrite("ycbcrEncoding", &ColorSpace::ycbcrEncoding)
+		.def_readwrite("range", &ColorSpace::range)
+		.def_static("Raw", []() { return ColorSpace::Raw; })
+		.def_static("Jpeg", []() { return ColorSpace::Jpeg; })
+		.def_static("Srgb", []() { return ColorSpace::Srgb; })
+		.def_static("Smpte170m", []() { return ColorSpace::Smpte170m; })
+		.def_static("Rec709", []() { return ColorSpace::Rec709; })
+		.def_static("Rec2020", []() { return ColorSpace::Rec2020; });
+
+	pyColorSpacePrimaries
+		.value("Raw", ColorSpace::Primaries::Raw)
+		.value("Smpte170m", ColorSpace::Primaries::Smpte170m)
+		.value("Rec709", ColorSpace::Primaries::Rec709)
+		.value("Rec2020", ColorSpace::Primaries::Rec2020);
+
+	pyColorSpaceTransferFunction
+		.value("Linear", ColorSpace::TransferFunction::Linear)
+		.value("Srgb", ColorSpace::TransferFunction::Srgb)
+		.value("Rec709", ColorSpace::TransferFunction::Rec709);
+
+	pyColorSpaceYcbcrEncoding
+		.value("Null", ColorSpace::YcbcrEncoding::None)
+		.value("Rec601", ColorSpace::YcbcrEncoding::Rec601)
+		.value("Rec709", ColorSpace::YcbcrEncoding::Rec709)
+		.value("Rec2020", ColorSpace::YcbcrEncoding::Rec2020);
+
+	pyColorSpaceRange
+		.value("Full", ColorSpace::Range::Full)
+		.value("Limited", ColorSpace::Range::Limited);
 }
-- 
2.34.1



More information about the libcamera-devel mailing list