Show a cover letter.

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

{
    "id": 24183,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/24183/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/24183/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/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": "<20250824-b4-v0-5-2-gpuisp-v2-a-v2-0-96f4576c814e@linaro.org>",
    "date": "2025-08-24T00:48:12",
    "name": "[v2,00/37] Add GLES 2.0 GPUISP to libcamera",
    "submitter": {
        "id": 175,
        "url": "https://patchwork.libcamera.org/api/1.1/people/175/?format=api",
        "name": "Bryan O'Donoghue",
        "email": "bryan.odonoghue@linaro.org"
    },
    "mbox": "https://patchwork.libcamera.org/cover/24183/mbox/",
    "series": [
        {
            "id": 5400,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5400/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5400",
            "date": "2025-08-24T00:48:12",
            "name": "Add GLES 2.0 GPUISP to libcamera",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/5400/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/24183/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 67048BEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 24 Aug 2025 00:48:40 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E60C0692E7;\n\tSun, 24 Aug 2025 02:48:38 +0200 (CEST)",
            "from mail-wr1-x431.google.com (mail-wr1-x431.google.com\n\t[IPv6:2a00:1450:4864:20::431])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E0BDE613BE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 24 Aug 2025 02:48:36 +0200 (CEST)",
            "by mail-wr1-x431.google.com with SMTP id\n\tffacd0b85a97d-3c79f0a606fso432792f8f.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 23 Aug 2025 17:48:36 -0700 (PDT)",
            "from [192.168.0.13] (188-141-3-146.dynamic.upc.ie. [188.141.3.146])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-45b4e1d530esm69347225e9.0.2025.08.23.17.48.35\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tSat, 23 Aug 2025 17:48:35 -0700 (PDT)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=linaro.org header.i=@linaro.org\n\theader.b=\"LNdQHoTC\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1755996516; x=1756601316;\n\tdarn=lists.libcamera.org; \n\th=cc:to:content-transfer-encoding:mime-version:message-id:date\n\t:subject:from:from:to:cc:subject:date:message-id:reply-to;\n\tbh=xrAbCCxjkzyBtd08rCDydNa0a+sWY+zQ+miNMuHwzUM=;\n\tb=LNdQHoTCVIxU49w0m8sc8sw5llaW8Pdm76irfBVTZfw78T5AypQwWk0rPP5HQTp+sq\n\tELzUlWQ0PgdxIRboLkubOZi9Cn8oP1x193zY1MDlgxPsS4pC9p84Tv+o6I4CDbGbIwaV\n\tXEipYynhfjdNaC/m89lgdNXHupRPMdfEwD3bUny0AiX6BHh2+w17yR/+Xmq8l2dttxnB\n\tsm9gKs4S8hDyNYt8m3ndKTgt463ri02JLpZtn50eFk0LaFeQJmbO27fQowi8TrcsmImN\n\tvj4D+wkqudIiUuNOwEID9iMUV8BUIzvKRUsVNx9jpTaloo6d3ohWBU4ADVGrVDWR5kVA\n\tuQLA==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1755996516; x=1756601316;\n\th=cc:to:content-transfer-encoding:mime-version:message-id:date\n\t:subject:from:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=xrAbCCxjkzyBtd08rCDydNa0a+sWY+zQ+miNMuHwzUM=;\n\tb=PGahws8QiUIVXCz32fo7PZyGH7Urf/3GdZioJfZ+L0PM4NOcFB8qQmrVGpZALXetIl\n\tYZX5Ef0KZNR3w+vYILI2kukEfyAFAQnmCx0uX/gPf8d+6upMCwSVMVsp5VYudBuMYhQ8\n\t7+LZvLh+zQ8ADcGjWXgCo6TtzZXhIOezBwaZtxorA4WLJKCIttRdHnLvFYvJTlcE9zEt\n\tdLgxox5gRVO9XQzucNrd+BaOkenHlPlVVWm8DfmAU7YUrmsTFLPiwbgOkPYgzgZxudwE\n\tsl9fFHcwUHXYnKaPlHNRUwIpsQAWJuQACeI3cUbyI9hmcueETK3ejNiKf2bMh30nFdrN\n\tx4tg==",
        "X-Gm-Message-State": "AOJu0YyoF0Y4kNgUChcciNVyxUXRhKKeujymPdOcFBpv1RyG80468wJn\n\t8fUUQGSYfnkcGvJpUAc88FUK+sAkNsLvjKALzga7m5KjAsic6wJNXWf95jZ3Y7f63oY=",
        "X-Gm-Gg": "ASbGncv0/As3I/KUvOaQlw2T8DeD1JmhyWsJscpJF3FL+85DpTFJTbxpSX9NI1ip+zy\n\t6Wd2PpcQnvvasgzMPQBcpGnZ/Raj02VCE1wBwBcqiakrFq1NHLmSENeiTtXQKFhOk+tTAqWDVB/\n\tonCJN8BGkw9RRanlI5mNe8pUEUpJzTqtWJAmdVpVD8EUoHUT+KfMeuy6UumZF6JZNOOuwUMXN2v\n\tksoF2kJqp9MGxCGvTHt7LamxGvlINoYGAOZoKMY1TvINDEEwmPDGqwMFi8VLp17qalXdVuJX/5e\n\tsdq8c9vKWrPNSw9ioIY84MX5EYDhJ5pSna+kzlOMDF27oKxO0AHrrsodYPUYUQtF/qzBHxZWIey\n\ta/BeCUfPVyjMHi2IpS9LlgaIf23KdFpFitGVthdqOJ+8OPyMwM0iCQS+8jE9QKmzPihDadbzWoy\n\tFFu0/W4PRDhot6brlho/Dl",
        "X-Google-Smtp-Source": "AGHT+IEb6zksNQgOweAMLq/w3AHryYeDtVfiJ5mRex6h6HL9biCIDLL1JwgRgAIeDUo+2rJ3YbewXw==",
        "X-Received": "by 2002:a05:6000:230d:b0:3b9:5002:3b4d with SMTP id\n\tffacd0b85a97d-3c5dbf68962mr4478147f8f.19.1755996516198; \n\tSat, 23 Aug 2025 17:48:36 -0700 (PDT)",
        "From": "Bryan O'Donoghue <bryan.odonoghue@linaro.org>",
        "Subject": "[PATCH v2 00/37] Add GLES 2.0 GPUISP to libcamera",
        "Date": "Sun, 24 Aug 2025 01:48:12 +0100",
        "Message-Id": "<20250824-b4-v0-5-2-gpuisp-v2-a-v2-0-96f4576c814e@linaro.org>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "X-B4-Tracking": "v=1; b=H4sIAE1hqmgC/x3MQQrDIBBG4auEWfcHM1EScpXSRYwTO5tUlEpAc\n\tvdKl9/ivUZFskqhdWiUpWrRz9nBj4H293ZGgYZuYsPOLDzBW1QDB0ZMXy0JlbEhWOMnPy9htiP\n\t1NmU59Pp/n6/7/gGdM0YYZwAAAA==",
        "X-Change-ID": "20250823-b4-v0-5-2-gpuisp-v2-a-d40b3b78d741",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Bryan O'Donoghue <bryan.odonoghue@linaro.org>, \n\tHans de Goede <hdegoede@redhat.com>, \n\tKieran Bingham <kieran.bingham@ideasonboard.com>, \n\tMilan Zamazal <mzamazal@redhat.com>",
        "X-Mailer": "b4 0.14.2",
        "X-Developer-Signature": "v=1; a=openpgp-sha256; l=11986;\n\ti=bryan.odonoghue@linaro.org; h=from:subject:message-id;\n\tbh=WMfET/qspFAi8zv6LLfXPrETVmV+9nz5bgrl+xNz/rk=;\n\tb=owEBbQKS/ZANAwAKASJxO7Ohjcg6AcsmYgBoqmFcyhld1xKudBhrRvf7m65sRCATcF/gr8ZeB\n\tJ3GkkyrApyJAjMEAAEKAB0WIQTmk/sqq6Nt4Rerb7QicTuzoY3IOgUCaKphXAAKCRAicTuzoY3I\n\tOl1HD/0S4qlI+5Ece6QMGf/vNfVqqhoW8RTqIw44ROKHbnDnannbtUkb2OrQ4fZfEwPia61hyer\n\tLfH6Q97SRaxO2ghFmSwcg0Vl4BALGfKAxDvQN+/WsT2YcP+FmpADW+hXWEl73RRHkc3/X65GA+f\n\tTfjARpDYS4zyIO7SPf9Wg6yVP3Et1zIdlZF5uEVskCcae+g0nG0Ww3hMmTDSK/yhfihKvLfbf6x\n\t7aZhIakk9eEkwsRrPa1EC4Dnb5lUIeNaSLURsdQIKnB0peBWSYvDy1idMrQbIf3mWxl9sMSnLVw\n\t9NeKTewwMNSa1eNKsK3fIx8kvNicJCqGBthZRj+FojCDlopvBwDMVtl2A2EJKMgx7pJWMsLIEXw\n\t8YZxt/I5v1wMQbJpMwj8vpBf5iNyRHS6rfe7KFkkdYToJPUHoDe1ccThL2h0vPnDUQ3E7aLoahG\n\tOQiRju6jgbEmRMWTvOdF+tEUcaKatSyFcJhlum7xpZGkn+QMJpfmj+uVBaM01q/FMfz76NsnDX0\n\tN2ZSWqcHhMNOYXFkqVra37umxc7/xR/IaGH9kc78PWnpzDq4yPFy7FMGqJuAVzQllBJCUDX9mnt\n\tIDt3CDLbvpRDFLhEqfUyMvcVPnUxnHfBm4B2XHGNODrfZBRnWB52JGFFPj3tEo48fax8z2Um9/r\n\tzKCGxo22m7z/Huw==",
        "X-Developer-Key": "i=bryan.odonoghue@linaro.org; a=openpgp;\n\tfpr=E693FB2AABA36DE117AB6FB422713BB3A18DC83A",
        "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>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "v2:\n\nThis version 2 is an incomplete update with-respect-to previous comment\nfeedback, which ordinarily I would not publish however, given OSSEU is\nstarting on Monday and we have talk about this topic, in addition to some\npretty good progress in the interregnum I thought a v2 would be\nappropriate.\n\n- V2 drops use of GBM surface in favour of generating a framebuffer from\n  the dma-buf handle, called render-to-texture.\n\n  The conversion from GBM surface + memcpy() including the associated cache\n  invalidate has a dramatic effect on GPUISP performance.\n\n  Some rough stats for a Qualcomm sm8250 \"kona\" device with an imx517\n  sensor @ 4048 x 3040 ABRG8888 - debug builds\n\n    CPUISP + CCM:\n      2 FPS CPU usage > 100% single core pulls about 9 watts\n\n    GPUISP v1 + CCM:\n      14 FPS - power not measured\n\n    GPUISP v2 + CCM:\n      30 FPS - sensor linerate - CPU usage ~ 70 % pulling 8 Watts.\n\n  Milan Zamal has reported a TI AM69 + imx219 - unknown resolution\n\n    CPUISP 4 FPS\n    GPUISP v2 - 2 or 3 FPS\n    GPUISP v2 - 15 FPS == sensor linerate\n\n  In other words for these boards we can hit linerate with GPUISP + 3A +\n  CCM.\n\n- Drop GBM surface rendering\n- Drop swapbuffers\n- Use eglCreateImageKHR to directly render into the output dma-buf buffer\n  eglCreateImageKHR lets you specify the FOURCC of the texture which means\n  we can create the texture in the uncompressed target output pixel format\n  we want.\n- Fix stride calculation to 256 bytes\n  Laurent and Maxime explained to me about GPU stride alignments being\n  tribal wisdom and that 256 bytes is a good cross-platform value.\n  This helped to get the render-to-texture command right.\n- A synchronous blocking wait is used to ensure GPU operations have\n  completed. Laurent wants this to be made async.\n  At the moment its not clear to me the eglWaitSyncKHR is really required\n  and in any case doesn't seem to have any performance impact.\n  But this part is still TBD - I've included the sync wait for simplicity\n  and safety.\n- A Debayer::stop() method has been introduced to ensure we call\n  eglDestroySyncKHR when the eGL context is valid, as opposed to in the\n  callchain of destructors triggering eGL::~eGL();\n- stats move constructor call chain dropped - Branabas\n- Incorporates Milan's area-of-interest constraint for Bayer stats\n  i.e. squashes his v3 update into debayer_egl.cpp directly\n- Moves ALIGN_TO into a common area to facilitate its reuse in\n  egl.cpp\n- Rebases on 0.5.2\n\n- There are a number of known checks failing on the CI loop right now\n\nLink to v1: https://lists.libcamera.org/pipermail/libcamera-devel/2025-June/050692.html\n\nv1:\nThis series introduces a GLES 2.0 GPU ISP to libcamera.\n\nWe have had extensive discussions, meetings and collaborative discussions\nabout this topic over the last year or so.\n\nAs an overview we want to start to move as much processing of software_isp\ninto the GPU as possible. This is especially advantageous when we are\ntalking about processing a framebuffer's worth of pixels as quickly as\npossible.\n\nThe decision to use GLES 2.0 instead of say Vulcan stems from a desire to\nsupport as much in the way of older hardware as possible and the fact we\nalready have upstream GLES 2.0 fragment shaders to do debayer.\n\nGenerally the approach is\n\n- Move the fragment shaders out of qcam and into a common location\n- Update the existing SoftwareISP Debayer/DebayerCPU pair to facilitate\n  addition of a new class DebayerEGL.\n- Introduce that class\n- Then do progressive change of the shaders and DebayerEGL class to make\n  the modifications as transparent as possible in the git log.\n- Reuse as much of the SoftIPA data-structures and logic as possible.\n- Consume the data from SoftIPA in the Debayer Shaders so that CPUISP and\n  GPUISP give similar - hopefully the same results but with GPUISP going\n  faster.\n\nIn order to get untiled and uncompressed pixel data out of the GPU\nframebuffer we need to tell the GPU how to store the data it is writing to\nthat framebuffer. GPUs can store their framebuffer data in tiled or even\ncompressed formats which is why the naive approach of running your fragment\nshader and then using glReadPixels(GL_RGBA); will be horrendously slow as\nglReadPixels must convert from the internal GPU format to the requested\noutput format - an operation that for me takes ~ 10 milliseconds per frame.\n\nInstead we get the GPU to store its data as ARGB8888 swap buffers and\nmemcpy() from the swapped buffer to our output frame. Right now this series\nsupports 32 bit output formats only.\n\nThe memcpy() also entails flushing the cache of the target buffer as per\nthe terms of the dma-buf software contract.\n\nThis leads us onto the main outstanding TODOs\n\n- 24 bit GBM buffer support leading\n- 24 bit output framebuffer support\n- Surfaceless GBM and eGL context with no swapbuffer\n- Render to texture\n  If we render directly to a buffer provided to the GPU the output\n  buffer we will not need to memcpy() to the output buffer\n  nor will we need to invalidate the output buffer cache.\n- eglCreateImageKHR for the texture upload.\n\nThis list is of the colour \"make it go faster\" not \"make it work\" which is\nwhy we are moving to start to submit a v1 for discussion in the full\nrealisation it will have to go through several cycles of review giving us\nthe opportunity to fix:\n\n- Doxygen is missing for new classes and methods\n- Some of the pipelines don't complete in gitlab\n- 24 bit output seems doable before merge\n- Render to texture perhaps even too\n\nFor me on my Qualcomm hardware GPUISP works very well I get 30fps in qcam\nwith about 75% CPU usage versus > 100% - cam goes faster which to me\nimplies a good bit of time is being consumed in qcam itself.\n\nThe series starts out with fixes and updates from Hans and finishes it out\nwith shader modifications from Milan both of whom along with Kieran,\nLaurent and Maxime I'd like to thank for being some helpful and patient.\n\nSigned-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n---\nBryan O'Donoghue (28):\n      libcamera: MappedFrameBuffer: Add MappedFrameBuffer::getPlaneFD()\n      libcamera: software_isp: Move useful items from DebayerCpu to Debayer base class\n      libcamera: software_isp: Move Bayer params init from DebayerCpu to Debayer\n      libcamera: software_isp: Move param select code to Debayer base class\n      libcamera: software_isp: Move DMA Sync code to Debayer base class\n      libcamera: software_isp: Move isStandardBayerOrder to base class\n      libcamera: software_isp: Start the ISP thread in configure\n      libcamera: software_isp: Move configure to worker thread\n      libcamera: software_isp: debayer: Make the debayer_ object of type class Debayer not DebayerCpu\n      libcamera: software_isp: debayer: Extend DebayerParams struct to hold a copy of per-frame CCM values\n      libcamera: software_isp: debayer: Introduce a stop() callback to the debayer object\n      libcamera: shaders: Move GL shader programs to src/libcamera/assets/shader\n      utils: gen-shader-headers: Add a utility to generate headers from shaders\n      meson: Automatically generate glsl_shaders.h from specified shader programs\n      libcamera: software_isp: ccm: Populate CCM table to Debayer params structure\n      libcamera: software_isp: lut: Make gain corrected CCM in lut.cpp available in debayer params\n      libcamera: software_isp: gbm: Add in a GBM helper class for GPU surface access\n      libcamera: utils: Move ALIGN_TO from camera_metadata.c to utils.h\n      libcamera: software_isp: egl: Introduce an eGL base helper class\n      libcamera: software_isp: debayer_egl: Add an eGL debayer class\n      libcamera: software_isp: debayer_egl: Make DebayerEGL an environment option\n      libcamera: shaders: Use highp not mediump for float precision\n      libcamera: shaders: Extend debayer shaders to apply RGB gain values on output\n      libcamera: software_isp: Switch on uncalibrated CCM to validate eGLDebayer\n      libcamera: software_isp: Make isStandardBayerOrder static\n      libcamera: software_isp: debayer_cpu: Make getInputConfig and getOutputConfig static\n      libcamera: shaders: Extend bayer shaders to support swapping R and B on output\n      libcamera: software_isp: Add a gpuisp todo list\n\nHans de Goede (5):\n      libcamera: swstats_cpu: Update statsProcessFn() / processLine0() documentation\n      libcamera: swstats_cpu: Drop patternSize_ documentation\n      libcamera: swstats_cpu: Move header to libcamera/internal/software_isp\n      libcamera: software_isp: Move benchmark code to its own class\n      libcamera: swstats_cpu: Add processFrame() method\n\nMilan Zamazal (4):\n      libcamera: shaders: Fix neighbouring positions in 8-bit debayering\n      libcamera: software_isp: GPU support for unpacked 10/12-bit formats\n      libcamera: shaders: Rename bayer_8 to bayer_unpacked\n      libcamera: software_isp: Reduce statistics image area\n\n include/libcamera/base/utils.h                     |   3 +\n include/libcamera/internal/egl.h                   | 133 +++++\n include/libcamera/internal/gbm.h                   |  39 ++\n include/libcamera/internal/mapped_framebuffer.h    |   4 +\n include/libcamera/internal/meson.build             |  11 +\n .../libcamera/internal/shaders}/RGB.frag           |   2 +-\n .../libcamera/internal/shaders}/YUV_2_planes.frag  |   2 +-\n .../libcamera/internal/shaders}/YUV_3_planes.frag  |   2 +-\n .../libcamera/internal/shaders}/YUV_packed.frag    |   2 +-\n .../internal/shaders}/bayer_1x_packed.frag         |  62 +-\n .../libcamera/internal/shaders/bayer_unpacked.frag |  78 ++-\n .../libcamera/internal/shaders/bayer_unpacked.vert |   8 +-\n .../libcamera/internal/shaders}/identity.vert      |   0\n include/libcamera/internal/shaders/meson.build     |  10 +\n .../libcamera/internal/software_isp/benchmark.h    |  36 ++\n .../internal/software_isp/debayer_params.h         |   7 +\n .../libcamera/internal/software_isp/meson.build    |   2 +\n .../libcamera/internal/software_isp/software_isp.h |   5 +-\n .../libcamera/internal}/software_isp/swstats_cpu.h |  12 +\n src/android/metadata/camera_metadata.c             |   4 +-\n src/apps/qcam/assets/shader/shaders.qrc            |  16 +-\n src/apps/qcam/viewfinder_gl.cpp                    |  70 +--\n src/ipa/simple/algorithms/ccm.cpp                  |   4 +-\n src/ipa/simple/algorithms/lut.cpp                  |   1 +\n src/ipa/simple/data/uncalibrated.yaml              |  12 +-\n src/libcamera/egl.cpp                              | 408 +++++++++++++\n src/libcamera/gbm.cpp                              |  61 ++\n src/libcamera/mapped_framebuffer.cpp               |  10 +\n src/libcamera/meson.build                          |  34 ++\n src/libcamera/software_isp/benchmark.cpp           |  93 +++\n src/libcamera/software_isp/debayer.cpp             |  61 ++\n src/libcamera/software_isp/debayer.h               |  42 +-\n src/libcamera/software_isp/debayer_cpu.cpp         |  88 +--\n src/libcamera/software_isp/debayer_cpu.h           |  44 +-\n src/libcamera/software_isp/debayer_egl.cpp         | 628 +++++++++++++++++++++\n src/libcamera/software_isp/debayer_egl.h           | 171 ++++++\n src/libcamera/software_isp/gpuisp-todo.txt         |  61 ++\n src/libcamera/software_isp/meson.build             |   9 +\n src/libcamera/software_isp/software_isp.cpp        |  40 +-\n src/libcamera/software_isp/swstats_cpu.cpp         |  89 ++-\n utils/gen-shader-header.py                         |  38 ++\n utils/gen-shader-headers.sh                        |  44 ++\n utils/meson.build                                  |   2 +\n 43 files changed, 2236 insertions(+), 212 deletions(-)\n---\nbase-commit: 1bd66f54a6bc928f99e321630f43d200df4d3579\nchange-id: 20250823-b4-v0-5-2-gpuisp-v2-a-d40b3b78d741\n\nBest regards,"
}