Show a cover letter.

GET /api/covers/8604/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 8604,
    "url": "https://patchwork.libcamera.org/api/covers/8604/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/8604/",
    "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": "<20200704005227.21782-1-laurent.pinchart@ideasonboard.com>",
    "date": "2020-07-04T00:52:15",
    "name": "[libcamera-devel,v2,00/12] Support passing custom data to IPA configure()",
    "submitter": {
        "id": 2,
        "url": "https://patchwork.libcamera.org/api/people/2/?format=api",
        "name": "Laurent Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/8604/mbox/",
    "series": [
        {
            "id": 1081,
            "url": "https://patchwork.libcamera.org/api/series/1081/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1081",
            "date": "2020-07-04T00:52:15",
            "name": "Support passing custom data to IPA configure()",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/1081/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/8604/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 A8F95BE905\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat,  4 Jul 2020 00:52:38 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 02C0860D4D;\n\tSat,  4 Jul 2020 02:52:38 +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 9CC4A603BB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  4 Jul 2020 02:52:36 +0200 (CEST)",
            "from pendragon.bb.dnainternet.fi (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0C95029E;\n\tSat,  4 Jul 2020 02:52:35 +0200 (CEST)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"pM0DUqU/\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1593823956;\n\tbh=H7Ayfsjp4jQHUzg9vj2u284ogXq7ovsvz8V8RePZ4YY=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=pM0DUqU/KoU7lLHI33r29ARbxVNnvah9ic5gcTk2Uj5LOFq5bbbwUVfAX/jfeKuDz\n\t7xRX9GYOxpXxR5trYZZceQwCoTpkkHKVSPh2plLQKVCiBGVYuqaFoDkOd50lUOcNwR\n\tZTLu9ZxiWgjn67pJX9Fpc5igbpxR6wTfUl8jo+E0=",
        "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Sat,  4 Jul 2020 03:52:15 +0300",
        "Message-Id": "<20200704005227.21782-1-laurent.pinchart@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v2 00/12] Support passing custom data to\n\tIPA configure()",
        "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>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Hello,\n\nThis patch series is the second version of an improvement to the\nIPAInterface::configure() function to support passing IPA-specific data.\n\nThe IPAInterface::configure() function passes miscellaneous\nconfiguration data to the IPA, but offers no way for pipeline handlers\nto pass custom data, or to receive custom data back. This has led to the\nRaspberry Pi IPA protocol using custom frame actions and events to pass\ninitialization data to the IPA and to receive initial sensor\nconfiguration back. To support this, the Raspberry Pi IPA needs to start\nthe IPA thread before configure() time, while it was meant to be started\nwhen starting the camera.\n\nThis patch series addresses this issue by adding a way to pass custom\nconfiguration data to the IPA and receive data back. It starts with two\nsmall drive-by cleanups in patches 01/12 and 02/12. Patch 03/12 performs\nthe bulk of the work by modifying IPAInterface::configure(). The C API\nisn't addressed yet, as larger refactoring is considered to handle the C\n<-> C++ translation in a better way.\n\nPatch 04/12 and 05/12 are other small drive-by fixes. Patch 06/12\nfollows by moving code around in the Raspberry Pi pipeline handler to\nprepare for the upcoming changes, and patch 07/12 slightly simplifies\nframe action handling.\n\nPatches 08/12 and 09/12 are the main changes in v2, and move sensor\norientation handling from the Raspberry Pi IPA to the pipeline handler,\nbased on the rotation reported through the device tree. The\ncorresponding kernel patches have been posted as \"[PATCH 00/12]\nraspberrypi: Report sensor orientation through DT\". This change\nsimplifies the Raspberry Pi IPA API, addressing a concern on the\nremaining patches from v1.\n\nPatches 10/12 and 11/12 replace custom events and frame actions with the\nnew IPA-specific data passed to configure(). Patch 12/12 finally moves\nthe IPA start and stop to the camera start and stop, aligning the\nimplementation with how the IPAInterface API is meant to be used.\n\nPatch 11/12 is now cleaner, although the concern I had in v1 are still\ntheoretically valid. Better code is needed to construct a protocol on\ntop of the IPAOperationData passed to IPAInterface::configure(). This\nalso applies to processEvent and queueFrameAction, and I think we should\ninvestigate usage of something similar to protobuf to handle both the\nIPA C <-> C++ translation and the IPA protocol built on top of\nIPAOperationData. Clever ideas are welcome.\n\nAn additional improvement that I believe could be done on top of this\nwould be to merge the RPI_IPA_ACTION_RUN_ISP,\nRPI_IPA_ACTION_RUN_ISP_AND_DROP_FRAME and RPI_IPA_ACTION_V4L2_SET_ISP\nactions. The first two are essentially the same with an option, which\ncould be passed to IPAOperationData::data, and the last one carries a\nset of controls that could be passed in one go.\nRPI_IPA_ACTION_EMBEDDED_COMPLETE could also be merged, as it's always\nsent with RPI_IPA_ACTION_RUN_ISP(_AND_DROP_FRAME), but there may be a\nfuture use case to keep it separate that I can't think about now.\n\nSimilarly, RPI_IPA_ACTION_V4L2_SET_STAGGERED and\nRPI_IPA_ACTION_STATS_METADATA_COMPLETE could also be merged into a\nsingle action. Those two changes would lower the number of cross-thread\ncalls, improving performances.\n\nThe code has been tested with the imx219 camera module.\n\nLaurent Pinchart (12):\n  libcamera: ipa: Document the parameters of the IPA C configure\n    function\n  libcamera: ipa_context_wrapper: Fix bad copy&paste in comment\n  libcamera: ipa_interface: Add support for custom IPA data to\n    configure()\n  libcamera: pipeline: raspberrypi: Drop unused local variable\n  libcamera: pipeline: raspberrypi: Constify parameter to\n    StaggeredCtrl::set()\n  libcamera: pipeline: raspberrypi: Move configureIPA() to RPiCameraData\n  libcamera: pipeline: raspberrypi: Don't call handleState() in stop\n    state\n  libcamera: pipeline: raspberrypi: Set sensor flip based on rotation\n  ipa: raspberrypi: Drop CameraHelper::GetOrientation()\n  ipa: raspberrypi: Pass lens shading table through configure() function\n  ipa: raspberrypi: Pass sensor config back from configure()\n  libcamera: pipeline: raspberrypi: Start IPA when starting camera\n\n .../libcamera/internal/ipa_context_wrapper.h  |   4 +-\n include/libcamera/ipa/ipa_interface.h         |   4 +-\n include/libcamera/ipa/raspberrypi.h           |   8 +-\n src/ipa/libipa/ipa_interface_wrapper.cpp      |   5 +-\n src/ipa/raspberrypi/cam_helper.cpp            |   6 -\n src/ipa/raspberrypi/cam_helper.hpp            |   7 -\n src/ipa/raspberrypi/cam_helper_imx219.cpp     |   7 -\n src/ipa/raspberrypi/cam_helper_imx477.cpp     |   7 -\n src/ipa/raspberrypi/raspberrypi.cpp           |  68 +++---\n src/ipa/rkisp1/rkisp1.cpp                     |   8 +-\n src/ipa/vimc/vimc.cpp                         |   4 +-\n src/libcamera/ipa_context_wrapper.cpp         |  10 +-\n src/libcamera/ipa_interface.cpp               |  12 +\n .../pipeline/raspberrypi/raspberrypi.cpp      | 213 +++++++++---------\n .../pipeline/raspberrypi/staggered_ctrl.cpp   |   2 +-\n .../pipeline/raspberrypi/staggered_ctrl.h     |   2 +-\n src/libcamera/pipeline/rkisp1/rkisp1.cpp      |   4 +-\n src/libcamera/proxy/ipa_proxy_linux.cpp       |   4 +-\n src/libcamera/proxy/ipa_proxy_thread.cpp      |  11 +-\n test/ipa/ipa_wrappers_test.cpp                |   8 +-\n 20 files changed, 214 insertions(+), 180 deletions(-)"
}