diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-03-08 12:11:11 +0200 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-03-08 12:56:29 +0200 |
commit | 84e240f64014f1e27dc1b3769f5ea83046f683d0 (patch) | |
tree | a44f0714ef3535d270b1b119e14be7532d2eaa0f /py/pykms/pykms.cpp | |
parent | c02a6e019ef4f2a77fcbde67a720221c7f37225e (diff) |
New event handling
The current event handling relies on the PageFlipHandlerBase class which
has to be implemented on the python side.
This patch implements a more versatile event handling, where any python
object can be passed as data to the commit or page flip, and it's up to
the python implementation to decide what to do with that data when
receiving the event.
Note that when doing the commit or page_flip, the ref count of the
given python object is incremented to keep it alive. The ref count is
decremented when reading the events with the new helper method
card.read_events(). This helper _has_ to be used to ensure the objects
get released properly.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'py/pykms/pykms.cpp')
-rw-r--r-- | py/pykms/pykms.cpp | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/py/pykms/pykms.cpp b/py/pykms/pykms.cpp index 2199039..7752f19 100644 --- a/py/pykms/pykms.cpp +++ b/py/pykms/pykms.cpp @@ -15,32 +15,15 @@ void init_pyvid(py::module &m); void init_pykmsomap(py::module &m); #endif -class PyPageFlipHandlerBase : PageFlipHandlerBase -{ -public: - using PageFlipHandlerBase::PageFlipHandlerBase; - - virtual void handle_page_flip(uint32_t frame, double time) - { - PYBIND11_OVERLOAD_PURE( - void, /* Return type */ - PageFlipHandlerBase, /* Parent class */ - handle_page_flip, /* Name of function */ - frame, time - ); - } -}; - PYBIND11_PLUGIN(pykms) { py::module m("pykms", "kms bindings"); init_pykmsbase(m); - py::class_<PyPageFlipHandlerBase>(m, "PageFlipHandlerBase") - .alias<PageFlipHandlerBase>() - .def(py::init<>()) - .def("handle_page_flip", &PageFlipHandlerBase::handle_page_flip) - ; + m.def("__ob_unpack_helper", [](uint64_t v) { + // AtomicReq::commit or Crtc::page_flip added a ref, so we can use borrowed = false + return py::object((PyObject*)v, false); + }); init_pykmstest(m); |