Cover Letter Detail
Show a cover letter.
GET /api/covers/19483/?format=api
{ "id": 19483, "url": "https://patchwork.libcamera.org/api/covers/19483/?format=api", "web_url": "https://patchwork.libcamera.org/cover/19483/", "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": "<20240214170122.60754-1-hdegoede@redhat.com>", "date": "2024-02-14T17:01:04", "name": "[v3,00/16] libcamera: introduce Software ISP and Software IPA", "submitter": { "id": 102, "url": "https://patchwork.libcamera.org/api/people/102/?format=api", "name": "Hans de Goede", "email": "hdegoede@redhat.com" }, "mbox": "https://patchwork.libcamera.org/cover/19483/mbox/", "series": [ { "id": 4167, "url": "https://patchwork.libcamera.org/api/series/4167/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4167", "date": "2024-02-14T17:01:04", "name": "libcamera: introduce Software ISP and Software IPA", "version": 3, "mbox": "https://patchwork.libcamera.org/series/4167/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/19483/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 67BACC3257\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 14 Feb 2024 17:01:39 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A851A62805;\n\tWed, 14 Feb 2024 18:01:38 +0100 (CET)", "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1F40261CB2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 14 Feb 2024 18:01:37 +0100 (CET)", "from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-372-EfqrmuW1NPqo4TvV1nWfyg-1;\n\tWed, 14 Feb 2024 12:01:32 -0500", "from smtp.corp.redhat.com\n\t(int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mimecast-mx02.redhat.com (Postfix) with ESMTPS id EC53829AA3BF;\n\tWed, 14 Feb 2024 17:01:31 +0000 (UTC)", "from localhost.localdomain (unknown [10.39.192.30])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id D5C572166B36;\n\tWed, 14 Feb 2024 17:01:30 +0000 (UTC)" ], "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"GhlzTHXE\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1707930095;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding;\n\tbh=jcp8smRWtwIgVwoXQ0hvmvZxxYx0RSdtkgsKVTtj4DY=;\n\tb=GhlzTHXEU4iIlPA+D1cMpgJPYUek/a1gVC0AQ/Wm8F92+mEzwOvkHVKD9spt9UVwGw90Ae\n\tBsQmI1qaAVJw6ACeYNp9xrDkfXEQL3uEiA2gsaBayVO+e0NuOj2zROYmvx849eANnF9ZGr\n\tcHVL4BTHawrnKnwq91JkyHuFcKLjZiQ=", "X-MC-Unique": "EfqrmuW1NPqo4TvV1nWfyg-1", "From": "Hans de Goede <hdegoede@redhat.com>", "To": "libcamera-devel@lists.libcamera.org", "Subject": "[PATCH v3 00/16] libcamera: introduce Software ISP and Software IPA", "Date": "Wed, 14 Feb 2024 18:01:04 +0100", "Message-ID": "<20240214170122.60754-1-hdegoede@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.11.54.6", "X-Mimecast-Spam-Score": "0", "X-Mimecast-Originator": "redhat.com", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain; charset=\"US-ASCII\"; x-default=true", "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>", "Cc": "Maxime Ripard <mripard@redhat.com>, Pavel Machek <pavel@ucw.cz>,\n\tBryan O'Donoghue <bryan.odonoghue@linaro.org>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Hi All,\n\nHere is v3 of the patch-set to add Software ISP support\nto libcamera / to the simple pipeline-handler.\n\nChanges in v3 vs v2:\n- The Software ISP now is always build when building the simple pipeline\n handler, no more -Dpipelines=simple/simple. Instead whether the SoftISP\n is used or not is based on the media-controller driver. For now it is\n only enabled for the \"qcom-camss\" driver (Andrey)\n- SoftISP factory has been removed, there is a just a single SoftwareISP class now\n- Fix the multi-threading issues (Andrey)\n- Fully document the SharedMemObject and DmaHeap classes (Andrey)\n- Drop SwStats base (integrate into SwStatsCpu class)\n- Move headers for classes only used by the SoftISP into src/libcamera/software_isp\n- Move SwStats / SwDebayer docs into .cpp and extend it\n- Rename many foo_bar symbols to fooBar\n- Add constexpr kFooBar values for varies hardcoded sizes like\n the yHistoGram having 16 bins and the gammalookuptable having 1024 entries\n- Make startFrame() and finishFrame() normal methods instead of\n using function pointers for these\n- Document how/why an array of src pointers is passed to\n the debayer functions\n- 12bpp unpacked raw bayer input support (Kieran)\n- Add \"Software ISP benchmarking\" doc\n\nChanges in v2 vs v1:\n- Integrated Dennis, Martti and Toon's auto-exposure algorithm\n based on the paper which they found which gives us a nice\n relatively simple AEC + AGC algorithm\n TODO: Add link to paper to source + commit-message\n- Integrated Dennis' doxygen comments for all new classes, no more warnings!\n- Move AWB gain calculations to the IPA (Andrey)\n- Added 8 bpp and 10 bpp unpacked raw bayer input support (Hans)\n- Use dma-buf for the output FrameBuffer-s (Andrey)\n- Memcpy data from input FrameBuffers to a heap buffer on a line by line\n basis to speedup debayering from uncached mem (Hans)\n- This addresses all \"open issues\" from the v1 posting\n\nChanges in v1 vs RFC-v2:\n- Add and use SwStats[Cpu] and Debayer[Cpu] classes\n- Rename linaro soft-IPA and soft-ISP implementations to simple following\n the simple pipeline hander\n- Integrate Pavel's swstats and debayer improvements\n\nThis has been tested on:\n- Qualcomm RB5 board with a mezzanine board equipped with RPi camera v2 (Andrey)\n- Lenovo x13s, sc8280xp (Bryan)\n- Pinephone (Pavel)\n- Debix Model A (Milan)\n- Lenovo Thinkpad Yoga X1 yoga gen7/8, Alder Lake/Raptor Lake IPU6EP +\n ov2740 10bpp packed + unpacked (Dennis / Hans)\n- Dell Latitude 9420, Tiger Lake IPU6 + ov01a1s (RGBI) sensor\n (Martti, requires IGIG_GBGR_IGIG_GRGB patches on top)\n\ngit branch for this v3 patch set:\nhttps://gitlab.freedesktop.org/camera/libcamera-softisp/-/commits/SoftwareISP-v06\n\ngit branch for v2 of the patch set:\nhttps://gitlab.freedesktop.org/camera/libcamera-softisp/-/commits/SoftwareISP-v05\n\ngit branch for v1 of the patch set:\nhttps://gitlab.freedesktop.org/camera/libcamera-softisp/-/commits/SoftwareISP-v04\n\nOld RFC-v2 cover-letter with small updates:\n\nHere is an implementation of Software ISP and Software IPA\nwhich provide debayering and implementation of image processing\nalgorithms for systems without a hardware ISP, or in cases when\nthere are no public drivers for the hardware ISP present in the\nsystem.\n\nThe Software IPA has auto exposure/AGC and AWB. For the AGC\nthe analogue gain control of the camera sensor is used (if\navailable).\n\nThe 6th patch renames some variables in the simple pipeline\nhandler for the Software ISP to use the same buffer handling\ncode as the Converter currently does. This lets one to\navoid adding extra code to the pipeline handler, but also\nmakes the Software ISP and the Converter mutually exclusive.\n\nThe Software ISP / IPA are intended to be used with the simple\npipeline handler. The pipeline handler doesn't interact with\nthe Software IPA directly - the Software IPA is hidden behind\nthe Software ISP interface. To use the Software ISP the build\nmust be configured with -Dpipelines=simple -Dipas=simple .\n\nThis patch set uses SharedMemObject class used by the RPi pipeline\nhandler - the second patch in the series moves the header file\nto a common directory.\n\nThis patch set has been tested on Qualcomm RB5 board with\na mezzanine board equipped with RPi camera v2 (not the\nstandard RB5 camera mezzanine).\n\ngit branch for the RFC-v2 patch set:\nhttps://gitlab.freedesktop.org/camera/libcamera-softisp/-/commits/SoftwareISP-v03\n\nRFC-v1 of the patch set:\nhttps://patchwork.libcamera.org/cover/19262/\n\nChanges in RFC v2 vs RFC v1:\n- patches are restructured and reordered\n- the Software IPA is hidden behind the Software ISP interface. The\n pipeline handler doesn't interact with the Software IPA directly\n- instantiation of the Software ISP / IPA is configurable (at build\n time)\n- comment explaining the implementation limitations is added to\n SwIspLinaro::IspWorker::debayerRaw10P()\n\nRegards,\n\nHans\n\n\n\nAndrei Konovalov (1):\n libcamera: shared_mem_object: reorganize the code and document the\n SharedMemObject class\n\nAndrey Konovalov (8):\n libcamera: pipeline: simple: fix size adjustment in validate()\n libcamera: internal: Move dma_heaps.[h,cpp] to common directories\n libcamera: dma_heaps: extend DmaHeap class to support system heap\n libcamera: internal: Move SharedMemObject class to a common directory\n libcamera: ipa: add Soft IPA\n libcamera: introduce SoftwareIsp\n libcamera: pipeline: simple: rename converterBuffers_ and related vars\n libcamera: pipeline: simple: enable use of Soft ISP and Soft IPA\n\nHans de Goede (7):\n libcamera: software_isp: Add SwStatsCpu class\n libcamera: software_isp: Add Debayer base class\n libcamera: software_isp: Add DebayerCpu class\n libcamera: swstats_cpu: Add support for 8, 10 and 12 bpp unpacked\n bayer input\n libcamera: debayer_cpu: Add support for 8, 10 and 12 bpp unpacked\n bayer input\n libcamera: debayer_cpu: Add BGR888 output support\n libcamera: Add \"Software ISP benchmarking\" documentation\n\n Documentation/Doxyfile.in | 1 +\n Documentation/index.rst | 1 +\n Documentation/meson.build | 1 +\n Documentation/software-isp-benchmarking.rst | 82 ++\n .../libcamera/internal}/dma_heaps.h | 14 +-\n include/libcamera/internal/meson.build | 3 +\n .../libcamera/internal}/shared_mem_object.h | 94 ++-\n .../internal/software_isp/debayer_params.h | 48 ++\n .../internal/software_isp/meson.build | 7 +\n .../internal/software_isp/software_isp.h | 98 +++\n .../internal/software_isp/swisp_stats.h | 38 +\n include/libcamera/ipa/meson.build | 1 +\n include/libcamera/ipa/soft.mojom | 28 +\n meson_options.txt | 2 +-\n src/ipa/simple/data/meson.build | 9 +\n src/ipa/simple/data/soft.conf | 3 +\n src/ipa/simple/meson.build | 25 +\n src/ipa/simple/soft_simple.cpp | 308 +++++++\n src/libcamera/dma_heaps.cpp | 164 ++++\n src/libcamera/meson.build | 3 +\n src/libcamera/pipeline/rpi/vc4/dma_heaps.cpp | 90 --\n src/libcamera/pipeline/rpi/vc4/meson.build | 1 -\n src/libcamera/pipeline/rpi/vc4/vc4.cpp | 5 +-\n src/libcamera/pipeline/simple/simple.cpp | 232 ++++--\n src/libcamera/shared_mem_object.cpp | 191 +++++\n src/libcamera/software_isp/debayer.cpp | 29 +\n src/libcamera/software_isp/debayer.h | 104 +++\n src/libcamera/software_isp/debayer_cpu.cpp | 779 ++++++++++++++++++\n src/libcamera/software_isp/debayer_cpu.h | 157 ++++\n src/libcamera/software_isp/meson.build | 8 +\n src/libcamera/software_isp/software_isp.cpp | 349 ++++++++\n src/libcamera/software_isp/swstats_cpu.cpp | 336 ++++++++\n src/libcamera/software_isp/swstats_cpu.h | 167 ++++\n 33 files changed, 3186 insertions(+), 192 deletions(-)\n create mode 100644 Documentation/software-isp-benchmarking.rst\n rename {src/libcamera/pipeline/rpi/vc4 => include/libcamera/internal}/dma_heaps.h (65%)\n rename {src/libcamera/pipeline/rpi/common => include/libcamera/internal}/shared_mem_object.h (66%)\n create mode 100644 include/libcamera/internal/software_isp/debayer_params.h\n create mode 100644 include/libcamera/internal/software_isp/meson.build\n create mode 100644 include/libcamera/internal/software_isp/software_isp.h\n create mode 100644 include/libcamera/internal/software_isp/swisp_stats.h\n create mode 100644 include/libcamera/ipa/soft.mojom\n create mode 100644 src/ipa/simple/data/meson.build\n create mode 100644 src/ipa/simple/data/soft.conf\n create mode 100644 src/ipa/simple/meson.build\n create mode 100644 src/ipa/simple/soft_simple.cpp\n create mode 100644 src/libcamera/dma_heaps.cpp\n delete mode 100644 src/libcamera/pipeline/rpi/vc4/dma_heaps.cpp\n create mode 100644 src/libcamera/shared_mem_object.cpp\n create mode 100644 src/libcamera/software_isp/debayer.cpp\n create mode 100644 src/libcamera/software_isp/debayer.h\n create mode 100644 src/libcamera/software_isp/debayer_cpu.cpp\n create mode 100644 src/libcamera/software_isp/debayer_cpu.h\n create mode 100644 src/libcamera/software_isp/meson.build\n create mode 100644 src/libcamera/software_isp/software_isp.cpp\n create mode 100644 src/libcamera/software_isp/swstats_cpu.cpp\n create mode 100644 src/libcamera/software_isp/swstats_cpu.h" }