Show a cover letter.

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

{
    "id": 23213,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/23213/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/23213/",
    "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": "<20250422215920.4297-1-bryan.odonoghue@linaro.org>",
    "date": "2025-04-22T21:58:53",
    "name": "[00/27] RFC: Add in a eGL based GPUISP in 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/23213/mbox/",
    "series": [
        {
            "id": 5142,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5142/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5142",
            "date": "2025-04-22T21:58:53",
            "name": "RFC: Add in a eGL based GPUISP in libcamera",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/5142/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/23213/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 AAB63C327D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 22 Apr 2025 21:59:26 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9814668ACE;\n\tTue, 22 Apr 2025 23:59:25 +0200 (CEST)",
            "from mail-wm1-x331.google.com (mail-wm1-x331.google.com\n\t[IPv6:2a00:1450:4864:20::331])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A3309617E3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Apr 2025 23:59:23 +0200 (CEST)",
            "by mail-wm1-x331.google.com with SMTP id\n\t5b1f17b1804b1-43cf034d4abso52043885e9.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Apr 2025 14:59:23 -0700 (PDT)",
            "from inspiron14p-linux.ht.home (188-141-3-146.dynamic.upc.ie.\n\t[188.141.3.146]) by smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-44092d2eccesm2726615e9.20.2025.04.22.14.59.21\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 22 Apr 2025 14:59:22 -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=\"gxCmqW2p\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1745359163; x=1745963963;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:from:to:cc:subject:date:message-id:reply-to;\n\tbh=J1eu+VFkRk+vqNPfv+gMqeAgR9bS2BFJuAcxD0sE2oI=;\n\tb=gxCmqW2pEEsFIf0+jCSWhlb2RA3ZNDXT9dRmZeKR4d+PmHjKastbiT2w7VlPTWQec4\n\tPDjN0w4dRlFM0zD5Fqtcw70JTfKG6aLwOl9JO2eWi4kPGWAvnxZyCrASyoYjB5+xOyZa\n\tGzhyTfl0rH2HsGLqFIp4kb/hjXyOGZuri4Hbh/ZY2N5eo2fcRf52SfOY4gCUB4VDzEcg\n\tJ2oDpaHKoE9HR0xrXyljdEf3Qk7vGek3YXVufCJLg5AAraid+XYji8kgUSV/zddAjdHU\n\tUhUWfmpcrKZUgmhd0bHpCksP8+0bKavz1APFpVSeWPftEFPpZi0MejkXKM+fdsWNl9Mo\n\tGiwg==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1745359163; x=1745963963;\n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=J1eu+VFkRk+vqNPfv+gMqeAgR9bS2BFJuAcxD0sE2oI=;\n\tb=bHHaaP42LwRzJurY2Q0vX7LUo2beA3c7s5tLDXGcCtnEOC8mKEqfW4BllKAqva754l\n\thQQZ03mAy/lXJ7yNOEXKmsPwl3Q0cKDy4BwW2TmpsRcBckf9HgOXSyOJh1M7zZV2re4w\n\tDC4EYktvkBT0bf+oAe/P/hDQXwEJyJ7cCquUJDEvrVbiMv1jcrf1ZRtTKqAb17r4iIug\n\tT2nIDW1RLpRVDUX6rOSpGwzMRs8OYKBJY5wz8XVKeiPPDHC4RSe9a6cerjbED+HnNNxM\n\tIvk64nho0yd5XVq7Gzny0COmnsDFZMv/1dfTjFBXou9LgyCM86SOlsVV/pzCSKIItYVn\n\to6qQ==",
        "X-Gm-Message-State": "AOJu0YxQxUjuZex59z3LEOtyq9XC21p1mvPv7ywugkxUPmDazEw2iBVc\n\tnOzah2SeniZ1Tp4PuoJ0/0So36kDKUwAGstPr6L4RWyZ6Dg8C5D5xkNuo46D1XjKlxBMfgKzfUm\n\t3eHI=",
        "X-Gm-Gg": "ASbGncvgBlrAnsnguLDkIMUOQSn5YMo2dobwthrrotxWOpsl8K8awOZLYEcruIYbMNz\n\tSDT7NRU9VxRaYP1liH/kDX8nYNOMCbO8aNcq/jWT+lbpwstce5TXCfLMZY98jjgWmkUbjsU2EPJ\n\trLMX4lNifIEq8hdg0wEPE6aHFNX7FAmEZejoaO6KmO2DM/b4umelicDxvkKEhrVlP0uEPw3/eOX\n\t0VhQbneqYV+H7s/nzWuZUiIPAaNnY/Bh+32opWXO9+BuwUiFFgB+sOjXkRrla71Qdofh13ODJ4z\n\tR441wt3a9aX7zSP+Aq6bbvURMMBjPgcEL3ER1VC85+c/rWVCPTimS4959EvCi8/+4/QXZeE4Aba\n\ttWEO3EjIQH0m09EIhWREahq6fNG10Gs4=",
        "X-Google-Smtp-Source": "AGHT+IHB1kycjXHKEYDn8wll0gaIm9cn1WVXxipCuzeokx2bIqALYNO9VVHMFDR3OZ5SsFJ1aa87Qg==",
        "X-Received": "by 2002:a05:600c:3482:b0:43c:ec0a:ddfd with SMTP id\n\t5b1f17b1804b1-4406ab7fe91mr143086035e9.6.1745359162716; \n\tTue, 22 Apr 2025 14:59:22 -0700 (PDT)",
        "From": "Bryan O'Donoghue <bryan.odonoghue@linaro.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "hdegoede@redhat.com, mzamazal@redhat.com, bryan.odonoghue@linaro.org,\n\tbod.linux@nxsw.ie",
        "Subject": "[PATCH 00/27] RFC: Add in a eGL based GPUISP in libcamera",
        "Date": "Tue, 22 Apr 2025 22:58:53 +0100",
        "Message-ID": "<20250422215920.4297-1-bryan.odonoghue@linaro.org>",
        "X-Mailer": "git-send-email 2.49.0",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "This series takes the existing debayer shaders we have for qcam and\nrepurposes those to operate inside of libcamera/softisp.\n\nEGL based to support the widest range of hardware. This code integrates\nwith the stastics and parameters code in softisp with CCM an additional WIP\non top.\n\nWe've been doing this project on the back burner for ~ 12 months with alot\nof fun and learning on my end in the process.\n\nI've tidied up the code somewhat and gotten it to the stage of producing a\npretty OK picture.\n\nStill todo here:\n\n- CCM\n- DMA for input and output\n- Adding something on the algorithms side that cannot be done in CPU.\n\nThis code isn't ready for merge but, its certainly ready for comment and\ntest.\n\nBryan O'Donoghue (21):\n  libcamera: MappedFrameBuffer: Add tracking of mmap file descriptors to\n    MappedFrameBuffer\n  libcamera: MappedFrameBuffer: Add accessor for MappedFrameBuffer plane\n    maps\n  libcamera: dma_buf_allocator: Favour udmabuf over cma heap allocations\n  libcamera: software_isp: Start the ISP thread in configure\n  libcamera: software_isp: Move configure to worker thread\n  libcamera: software_isp: Virtual base class reference in invokeMethod\n  libcamera: software_isp: gbm: Add in a GBM helper class for GPU\n    surface access\n  libcamera: software_isp: egl: Introduce an eGL base helper class\n  libcamera: software_isp: Move useful items from DebayerCpu to Debayer\n    base class\n  libcamera: software_isp: Move param select code to Debayer base class\n  libcamera: software_isp: Move DMA sync code to common place in Debayer\n    base\n  libcamera: software_isp: Make the debayer_ object of type class\n    Debayer not DebayerCpu\n  libcamera: software_isp: debayer_egl: Add an eGL debayer class\n  libcamera: software_isp: debayer_egl: Extend logic to enable\n    application of softISP RGB debayer params\n  libcamera: software_isp: debayer_egl: Make DebayerEGL the default\n    debayer method\n  libcamera: software_isp: egl: Bind each eglImage to its own texture\n    unit\n  libcamera: shaders: Use highp not mediump for float precision\n  libcamera: shaders: Move GL shader programs to\n    src/libcamera/assets/shader\n  utils: gen-shader-headers: Add a utility to generate headers from\n    shaders\n  meson: Automatically generate glsl_shaders.h from specified shader\n    programs\n  shaders: Extend debayer shaders to apply RGB gain values on output\n\nHans de Goede (6):\n  libcamera: swstats_cpu: Update statsProcessFn() / processLine0()\n    documentation\n  libcamera: swstats_cpu: Drop patternSize_ documentation\n  libcamera: software_isp: Move benchmark code to its own class\n  libcamera: swstats_cpu: Add processFrame() method\n  libcamera: swstats_cpu: Add support for YUV420\n  libcamera: swstats_cpu: Move header to libcamera/internal/software_isp\n\n .../libcamera/internal/mapped_framebuffer.h   |   3 +\n include/libcamera/internal/meson.build        |  10 +\n .../libcamera/internal/shaders}/RGB.frag      |   2 +-\n .../internal/shaders}/YUV_2_planes.frag       |   2 +-\n .../internal/shaders}/YUV_3_planes.frag       |   2 +-\n .../internal/shaders}/YUV_packed.frag         |   2 +-\n .../internal/shaders}/bayer_1x_packed.frag    |  12 +-\n .../libcamera/internal/shaders}/bayer_8.frag  |  18 +-\n .../libcamera/internal/shaders}/bayer_8.vert  |   0\n .../libcamera/internal/shaders}/identity.vert |   0\n .../libcamera/internal/shaders/meson.build    |  10 +\n .../internal/software_isp/benchmark.h         |  36 ++\n .../internal/software_isp/meson.build         |   2 +\n .../internal/software_isp/software_isp.h      |   5 +-\n .../internal}/software_isp/swstats_cpu.h      |  18 +\n src/apps/qcam/assets/shader/shaders.qrc       |  16 +-\n src/apps/qcam/viewfinder_gl.cpp               |  70 +--\n src/libcamera/dma_buf_allocator.cpp           |   2 +-\n src/libcamera/mapped_framebuffer.cpp          |   1 +\n src/libcamera/software_isp/benchmark.cpp      |  93 +++\n src/libcamera/software_isp/debayer.cpp        |  40 ++\n src/libcamera/software_isp/debayer.h          |  41 +-\n src/libcamera/software_isp/debayer_cpu.cpp    |  65 +-\n src/libcamera/software_isp/debayer_cpu.h      |  39 +-\n src/libcamera/software_isp/debayer_egl.cpp    | 571 ++++++++++++++++++\n src/libcamera/software_isp/debayer_egl.h      | 175 ++++++\n src/libcamera/software_isp/egl.cpp            | 347 +++++++++++\n src/libcamera/software_isp/egl.h              | 110 ++++\n src/libcamera/software_isp/gbm.cpp            | 136 +++++\n src/libcamera/software_isp/gbm.h              |  52 ++\n src/libcamera/software_isp/meson.build        |  31 +\n src/libcamera/software_isp/software_isp.cpp   |  25 +-\n src/libcamera/software_isp/swstats_cpu.cpp    | 178 +++++-\n utils/gen-shader-header.py                    |  38 ++\n utils/gen-shader-headers.sh                   |  41 ++\n utils/meson.build                             |   2 +\n 36 files changed, 2016 insertions(+), 179 deletions(-)\n rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/RGB.frag (93%)\n rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_2_planes.frag (97%)\n rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_3_planes.frag (96%)\n rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_packed.frag (99%)\n rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_1x_packed.frag (95%)\n rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_8.frag (89%)\n rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_8.vert (100%)\n rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/identity.vert (100%)\n create mode 100644 include/libcamera/internal/shaders/meson.build\n create mode 100644 include/libcamera/internal/software_isp/benchmark.h\n rename {src/libcamera => include/libcamera/internal}/software_isp/swstats_cpu.h (79%)\n create mode 100644 src/libcamera/software_isp/benchmark.cpp\n create mode 100644 src/libcamera/software_isp/debayer_egl.cpp\n create mode 100644 src/libcamera/software_isp/debayer_egl.h\n create mode 100644 src/libcamera/software_isp/egl.cpp\n create mode 100644 src/libcamera/software_isp/egl.h\n create mode 100644 src/libcamera/software_isp/gbm.cpp\n create mode 100644 src/libcamera/software_isp/gbm.h\n create mode 100755 utils/gen-shader-header.py\n create mode 100755 utils/gen-shader-headers.sh"
}