[libcamera-devel,v4,00/15] py: New python bindings event handling
mbox series

Message ID 20230309142601.70556-1-tomi.valkeinen@ideasonboard.com
Headers show
Series
  • py: New python bindings event handling
Related show

Message

Tomi Valkeinen March 9, 2023, 2:25 p.m. UTC
Hi,

I sent the v3 of the series ("[PATCH v3 00/17] Python bindings event
handling") more than half a year ago. I've addressed the review comments
which I think make sense and are more or less obvious. In fact, I
made those changes quite soon after receiving them, again over half a
year ago. I also added some additional patches on top (the unittest
improvements).

But then I never had time to work on the biggest question, how to handle
the events, and so I never sent the v4. And then recently I added even
more patches on top. So I tought I'll just do a bit of work on the
series to introduce another way to manage the events, just as a hackish
RFC, and send the series. Perhaps there are more people interested in
the py bindings now, and we will get more discussion and ideas. I don't
want us to totally forget this series =).

So, here it is. The "py: New event handling" patch adds the events as in
v3. But in the topmost patch, "py: Hack for different event enable
mechanism" I draft another way we might handle the enabling and
disabling of the events.

One thing I didn't change was Laurent's comment that camera.stop()
should not return the disconnect events, only the request and buffer
completed events. I'm still not sure about that, but I think if we go
with the method I introduce in the topmost patch, it probably makes
sense to leave the disconnect events alone in camera.stop().

And, for those not familiar with the series: This changes the Python API
in a breaking manner. Changes to scripts using the Python bindings are
needed (see the "Use new events support" patches):

- Many methods throw exceptions now, instead of returning an error value
- The handling of events has changed. Previously it was all about
  request completed, and no other events. Now we support all the events.

 Tomi

Tomi Valkeinen (15):
  py: Use exceptions instead of returning error codes
  py: New event handling
  py: cam.py: Use new events support
  py: unittests.py: Use new events support
  py: simple-capture.py: Use new events support
  py: simple-continuous-capture.py: Use new events support
  py: simple-cam.py: Use new events support
  py: Drop get_ready_requests()
  py: Add hotplug-monitor.py
  py: unittests.py: Add weakref helpers and use del
  py: unittests.py: Add test for refs & keep-alives
  py: unittests.py: Fix type checker warnings
  py: Move Color Space and Transform classes to separate files
  py: Improve stub type generation for PyCameraEvent
  py: Hack for different event enable mechanism

 src/py/cam/cam.py                            |  44 +--
 src/py/examples/hotplug-monitor.py           |  39 +++
 src/py/examples/simple-cam.py                |  34 +--
 src/py/examples/simple-capture.py            |  36 ++-
 src/py/examples/simple-continuous-capture.py |  38 +--
 src/py/libcamera/meson.build                 |   2 +
 src/py/libcamera/py_camera_manager.cpp       | 180 +++++++++--
 src/py/libcamera/py_camera_manager.h         |  68 ++++-
 src/py/libcamera/py_color_space.cpp          |  71 +++++
 src/py/libcamera/py_main.cpp                 | 303 +++++++++++--------
 src/py/libcamera/py_transform.cpp            |  81 +++++
 test/py/unittests.py                         | 280 ++++++++++++-----
 12 files changed, 853 insertions(+), 323 deletions(-)
 create mode 100644 src/py/examples/hotplug-monitor.py
 create mode 100644 src/py/libcamera/py_color_space.cpp
 create mode 100644 src/py/libcamera/py_transform.cpp

Comments

Tomi Valkeinen March 9, 2023, 3:47 p.m. UTC | #1
On 09/03/2023 16:25, Tomi Valkeinen wrote:
> Hi,
> 
> I sent the v3 of the series ("[PATCH v3 00/17] Python bindings event
> handling") more than half a year ago. I've addressed the review comments
> which I think make sense and are more or less obvious. In fact, I
> made those changes quite soon after receiving them, again over half a
> year ago. I also added some additional patches on top (the unittest
> improvements).
> 
> But then I never had time to work on the biggest question, how to handle
> the events, and so I never sent the v4. And then recently I added even
> more patches on top. So I tought I'll just do a bit of work on the
> series to introduce another way to manage the events, just as a hackish
> RFC, and send the series. Perhaps there are more people interested in
> the py bindings now, and we will get more discussion and ideas. I don't
> want us to totally forget this series =).
> 
> So, here it is. The "py: New event handling" patch adds the events as in
> v3. But in the topmost patch, "py: Hack for different event enable
> mechanism" I draft another way we might handle the enabling and
> disabling of the events.
> 
> One thing I didn't change was Laurent's comment that camera.stop()
> should not return the disconnect events, only the request and buffer
> completed events. I'm still not sure about that, but I think if we go
> with the method I introduce in the topmost patch, it probably makes
> sense to leave the disconnect events alone in camera.stop().
> 
> And, for those not familiar with the series: This changes the Python API
> in a breaking manner. Changes to scripts using the Python bindings are
> needed (see the "Use new events support" patches):
> 
> - Many methods throw exceptions now, instead of returning an error value

A clarification here: The exception related changes to py scripts are 
done in the "py: Use exceptions instead of returning error codes" patch.

  Tomi

> - The handling of events has changed. Previously it was all about
>    request completed, and no other events. Now we support all the events.
> 
>   Tomi
> 
> Tomi Valkeinen (15):
>    py: Use exceptions instead of returning error codes
>    py: New event handling
>    py: cam.py: Use new events support
>    py: unittests.py: Use new events support
>    py: simple-capture.py: Use new events support
>    py: simple-continuous-capture.py: Use new events support
>    py: simple-cam.py: Use new events support
>    py: Drop get_ready_requests()
>    py: Add hotplug-monitor.py
>    py: unittests.py: Add weakref helpers and use del
>    py: unittests.py: Add test for refs & keep-alives
>    py: unittests.py: Fix type checker warnings
>    py: Move Color Space and Transform classes to separate files
>    py: Improve stub type generation for PyCameraEvent
>    py: Hack for different event enable mechanism
> 
>   src/py/cam/cam.py                            |  44 +--
>   src/py/examples/hotplug-monitor.py           |  39 +++
>   src/py/examples/simple-cam.py                |  34 +--
>   src/py/examples/simple-capture.py            |  36 ++-
>   src/py/examples/simple-continuous-capture.py |  38 +--
>   src/py/libcamera/meson.build                 |   2 +
>   src/py/libcamera/py_camera_manager.cpp       | 180 +++++++++--
>   src/py/libcamera/py_camera_manager.h         |  68 ++++-
>   src/py/libcamera/py_color_space.cpp          |  71 +++++
>   src/py/libcamera/py_main.cpp                 | 303 +++++++++++--------
>   src/py/libcamera/py_transform.cpp            |  81 +++++
>   test/py/unittests.py                         | 280 ++++++++++++-----
>   12 files changed, 853 insertions(+), 323 deletions(-)
>   create mode 100644 src/py/examples/hotplug-monitor.py
>   create mode 100644 src/py/libcamera/py_color_space.cpp
>   create mode 100644 src/py/libcamera/py_transform.cpp
>