[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