1 #include <pybind11/pybind11.h> 2 #include <pybind11/stl.h> 3 #include <kms++/kms++.h> 4 #include <kms++/omap/omapkms++.h> 5 6 namespace py = pybind11; 7 8 using namespace kms; 9 using namespace std; 10 11 void init_pykmsomap(py::module &m) 12 { 13 py::class_<OmapCard, Card>(m, "OmapCard") 14 .def(py::init<>()) 15 ; 16 17 py::class_<OmapFramebuffer, Framebuffer> omapfb(m, "OmapFramebuffer"); 18 19 // XXX we should use py::arithmetic() here to support or and and operators, but it's not supported in the pybind11 we use 20 py::enum_<OmapFramebuffer::Flags>(omapfb, "Flags") 21 .value("None", OmapFramebuffer::Flags::None) 22 .value("Tiled", OmapFramebuffer::Flags::Tiled) 23 .value("MemContig", OmapFramebuffer::Flags::MemContig) 24 .value("MemTiler", OmapFramebuffer::Flags::MemTiler) 25 .value("MemPin", OmapFramebuffer::Flags::MemPin) 26 .export_values() 27 ; 28 29 omapfb 30 .def(py::init<OmapCard&, uint32_t, uint32_t, const string&, OmapFramebuffer::Flags>(), 31 py::keep_alive<1, 2>(), // Keep Card alive until this is destructed 32 py::arg("card"), py::arg("width"), py::arg("height"), py::arg("fourcc"), py::arg("flags") = OmapFramebuffer::None) 33 .def(py::init<OmapCard&, uint32_t, uint32_t, PixelFormat, OmapFramebuffer::Flags>(), 34 py::keep_alive<1, 2>(), // Keep OmapCard alive until this is destructed 35 py::arg("card"), py::arg("width"), py::arg("height"), py::arg("pixfmt"), py::arg("flags") = OmapFramebuffer::None) 36 .def_property_readonly("format", &OmapFramebuffer::format) 37 .def_property_readonly("num_planes", &OmapFramebuffer::num_planes) 38 .def("fd", &OmapFramebuffer::prime_fd) 39 .def("stride", &OmapFramebuffer::stride) 40 .def("offset", &OmapFramebuffer::offset) 41 ; 42 } 43