Cover Letter Detail
Show a cover letter.
GET /api/covers/16492/?format=api
{ "id": 16492, "url": "https://patchwork.libcamera.org/api/covers/16492/?format=api", "web_url": "https://patchwork.libcamera.org/cover/16492/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20220701084521.31831-1-tomi.valkeinen@ideasonboard.com>", "date": "2022-07-01T08:45:04", "name": "[libcamera-devel,v3,00/17] Python bindings event handling", "submitter": { "id": 109, "url": "https://patchwork.libcamera.org/api/people/109/?format=api", "name": "Tomi Valkeinen", "email": "tomi.valkeinen@ideasonboard.com" }, "mbox": "https://patchwork.libcamera.org/cover/16492/mbox/", "series": [ { "id": 3241, "url": "https://patchwork.libcamera.org/api/series/3241/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3241", "date": "2022-07-01T08:45:04", "name": "Python bindings event handling", "version": 3, "mbox": "https://patchwork.libcamera.org/series/3241/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/16492/comments/", "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 8E9E7BD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 1 Jul 2022 08:45:43 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EAD4D65655;\n\tFri, 1 Jul 2022 10:45:42 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3ADA96054A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 1 Jul 2022 10:45:41 +0200 (CEST)", "from deskari.lan (91-158-154-79.elisa-laajakaista.fi\n\t[91.158.154.79])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 43D3225C;\n\tFri, 1 Jul 2022 10:45:40 +0200 (CEST)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1656665143;\n\tbh=WbRnrkvaphF+bsoLl7B0EUsZ/fCFbo93jldIu3mFVeg=;\n\th=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post:\n\tList-Help:List-Subscribe:From:Reply-To:From;\n\tb=XrnYGgrsATLEkcYFVvzhxOIORkQdrNHOmtZtKffGXWPIrxad//kJNCAX7Gf+/6EIb\n\tU7XgGDoABGB9NI0VMWR++jwA1tsKCkmwftB7f5GHABJCTVokBI7JREKLiPHxRoy23Z\n\tnN7NmwV0Tqu8rkQlvx3GlCSm6FwdCofx2hFtzymmqGOtYb36j1u1rbY8vmaw4QI3ky\n\teENQxLSMmiT8tCi2CljOwICaElZDwyWihZtuL4vK/Wdk+I+6FVW91NtnidJrdKlE0R\n\tv3EzLy6I3x+8VJzDHyz87nnIyQiHPDVTb22NRePkaA+GLh0qiGZknWG/X6kqSv+W9A\n\tYfhmCdPRpx/Vw==", "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1656665140;\n\tbh=WbRnrkvaphF+bsoLl7B0EUsZ/fCFbo93jldIu3mFVeg=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=crOtj4Awn2l6TPgJKxDcklPYS2tkuHDu/5n8xrhDdpjWB5+gC5AdHDnVXQPqKJb4l\n\tOM2tffkkSgBjqNYkQaNjI1OvKolFcn1V1QjKnK7t2KYDUCN/D10W71tTpNsiUoOTYk\n\tF40KH22Kzzjmuvs5efOQKhlYDsZG3oWVf6sfDyC4=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"crOtj4Aw\"; dkim-atps=neutral", "To": "libcamera-devel@lists.libcamera.org,\n\tDavid Plowman <david.plowman@raspberrypi.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tJacopo Mondi <jacopo@jmondi.org>", "Date": "Fri, 1 Jul 2022 11:45:04 +0300", "Message-Id": "<20220701084521.31831-1-tomi.valkeinen@ideasonboard.com>", "X-Mailer": "git-send-email 2.34.1", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v3 00/17] Python bindings event handling", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "From": "Tomi Valkeinen via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>", "Reply-To": "Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Hi,\n\nv3 introduces an alternative new event system compared to the v2. I like\nthis one much better. It's much simpler and more understandable.\n\nThe series has been re-arranged a bit so that up to, and including, the\n\"py: Switch to non-blocking eventfd\" patch, there are no API changes.\nExcept a small thing, the change to non-blocking. Afaik this should not\ncause breakage in picamera2. These can be merged after reviews.\n\nThen we break the API with the use of exceptions instead of return\ncodes. And continue by adding the new API for the events, but keeping\nthe deprecated get_ready_requests.\n\nOne particular thing I want to mention about the new event system is\nthat most of the events are always subscribed, so the user will e.g. get\nCameraAdded event without specifically subscribing to it. The only\nexception is the BufferCompleted event, and I had no other reason for\nthis than I just thought it's rarely used (?), we get it every frame,\nand thus making it opt-in reduces the extra overhead. But I really have\nno idea if it's really rarely used, and if the overhead is even\nnoticeable.\n\nI first tried with a full opt-in approach, but I'm not sure what would\nbe a good API for that. I tried with a setEvents(event_mask) but that's\nnot very nice to use. We could perhaps have a container struct with a\nbool for each event type, so that you'd do something like:\n\ncm.enabled_events.buffer_completed = True\ncm.enabled_events.camera_added = True\n\nOr we could add a parameter to camera.start() to define which events the\nuser is interested in (but this wouldn't cover Camera Added/Removed).\n\n Tomi\n\nTomi Valkeinen (17):\n py: cam.py: Fix multi camera capture without -C\n py: Add Python logging category\n py: Move ControlValue helpers to py_helpers.cpp\n py: cam.py: Remove todo comment\n py: Create PyCameraManager\n py: Use UniqueFD\n py: Set EFD_CLOEXEC on eventfd to avoid fd leaking\n py: Use libcamera's Mutex classes\n py: Switch to non-blocking eventfd\n py: Use exceptions instead of returning error codes\n py: New event handling\n py: cam.py: Use new events support\n py: unittests.py: Use new events support\n py: simple-capture.py: Use new events support\n py: simple-continuous-capture.py: Use new events support\n py: simple-cam.py: Use new events support\n py: Add hotplug-monitor.py\n\n src/py/cam/cam.py | 55 ++--\n src/py/examples/hotplug-monitor.py | 39 +++\n src/py/examples/simple-cam.py | 31 +-\n src/py/examples/simple-capture.py | 41 +--\n src/py/examples/simple-continuous-capture.py | 37 +--\n src/py/libcamera/meson.build | 2 +\n src/py/libcamera/py_camera_manager.cpp | 286 ++++++++++++++++++\n src/py/libcamera/py_camera_manager.h | 95 ++++++\n src/py/libcamera/py_helpers.cpp | 97 ++++++\n src/py/libcamera/py_helpers.h | 13 +\n src/py/libcamera/py_main.cpp | 297 +++++++------------\n src/py/libcamera/py_main.h | 14 +\n test/py/unittests.py | 93 +++---\n 13 files changed, 781 insertions(+), 319 deletions(-)\n create mode 100644 src/py/examples/hotplug-monitor.py\n create mode 100644 src/py/libcamera/py_camera_manager.cpp\n create mode 100644 src/py/libcamera/py_camera_manager.h\n create mode 100644 src/py/libcamera/py_helpers.cpp\n create mode 100644 src/py/libcamera/py_helpers.h\n create mode 100644 src/py/libcamera/py_main.h" }