summaryrefslogtreecommitdiff
path: root/py/pykms/pykmsomap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'py/pykms/pykmsomap.cpp')
-rw-r--r--py/pykms/pykmsomap.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/py/pykms/pykmsomap.cpp b/py/pykms/pykmsomap.cpp
new file mode 100644
index 0000000..eb01f47
--- /dev/null
+++ b/py/pykms/pykmsomap.cpp
@@ -0,0 +1,39 @@
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+#include <kms++/kms++.h>
+#include <kms++/omap/omapkms++.h>
+
+namespace py = pybind11;
+
+using namespace kms;
+using namespace std;
+
+void init_pykmsomap(py::module& m)
+{
+ py::class_<OmapCard, Card>(m, "OmapCard")
+ .def(py::init<>());
+
+ py::class_<OmapFramebuffer, Framebuffer> omapfb(m, "OmapFramebuffer");
+
+ // XXX we should use py::arithmetic() here to support or and and operators, but it's not supported in the pybind11 we use
+ py::enum_<OmapFramebuffer::Flags>(omapfb, "Flags")
+ .value("None", OmapFramebuffer::Flags::None)
+ .value("Tiled", OmapFramebuffer::Flags::Tiled)
+ .value("MemContig", OmapFramebuffer::Flags::MemContig)
+ .value("MemTiler", OmapFramebuffer::Flags::MemTiler)
+ .value("MemPin", OmapFramebuffer::Flags::MemPin)
+ .export_values();
+
+ omapfb
+ .def(py::init<OmapCard&, uint32_t, uint32_t, const string&, OmapFramebuffer::Flags>(),
+ py::keep_alive<1, 2>(), // Keep Card alive until this is destructed
+ py::arg("card"), py::arg("width"), py::arg("height"), py::arg("fourcc"), py::arg("flags") = OmapFramebuffer::None)
+ .def(py::init<OmapCard&, uint32_t, uint32_t, PixelFormat, OmapFramebuffer::Flags>(),
+ py::keep_alive<1, 2>(), // Keep OmapCard alive until this is destructed
+ py::arg("card"), py::arg("width"), py::arg("height"), py::arg("pixfmt"), py::arg("flags") = OmapFramebuffer::None)
+ .def_property_readonly("format", &OmapFramebuffer::format)
+ .def_property_readonly("num_planes", &OmapFramebuffer::num_planes)
+ .def("fd", &OmapFramebuffer::prime_fd)
+ .def("stride", &OmapFramebuffer::stride)
+ .def("offset", &OmapFramebuffer::offset);
+}