Cover Letter Detail
Show a cover letter.
GET /api/covers/25515/?format=api
{ "id": 25515, "url": "https://patchwork.libcamera.org/api/covers/25515/?format=api", "web_url": "https://patchwork.libcamera.org/cover/25515/", "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": "<20251212002937.3118-1-bryan.odonoghue@linaro.org>", "date": "2025-12-12T00:29:11", "name": "[v8,00/26] Add GLES 2.0 GPUISP to libcamera", "submitter": { "id": 175, "url": "https://patchwork.libcamera.org/api/people/175/?format=api", "name": "Bryan O'Donoghue", "email": "bryan.odonoghue@linaro.org" }, "mbox": "https://patchwork.libcamera.org/cover/25515/mbox/", "series": [ { "id": 5657, "url": "https://patchwork.libcamera.org/api/series/5657/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5657", "date": "2025-12-12T00:29:11", "name": "Add GLES 2.0 GPUISP to libcamera", "version": 8, "mbox": "https://patchwork.libcamera.org/series/5657/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/25515/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 1A70BBD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 12 Dec 2025 00:33:24 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 00B2061623;\n\tFri, 12 Dec 2025 01:33:22 +0100 (CET)", "from mail-pf1-x429.google.com (mail-pf1-x429.google.com\n\t[IPv6:2607:f8b0:4864:20::429])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CC7A261613\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Dec 2025 01:33:21 +0100 (CET)", "by mail-pf1-x429.google.com with SMTP id\n\td2e1a72fcca58-7b89c1ce9easo809725b3a.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 11 Dec 2025 16:33:21 -0800 (PST)", "from inspiron14p-linux (p99250-ipoefx.ipoe.ocn.ne.jp.\n\t[153.246.134.249]) by smtp.gmail.com with ESMTPSA id\n\t41be03b00d2f7-c0c26eb0f6bsm3317282a12.14.2025.12.11.16.33.16\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 11 Dec 2025 16:33:19 -0800 (PST)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=linaro.org header.i=@linaro.org\n\theader.b=\"Gg/6KmFH\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1765499600; x=1766104400;\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=hJu2llA1senP4OwRJgGlYcIRb2InkqWEJeerRSzdne8=;\n\tb=Gg/6KmFHqRbjAoFzmCQskJqLuWIsoto7ebJF8khiRmo5UXWGet7fGYwGgOgyqtDoVg\n\t5oi7+pK+hLxo5axaopLJNXoSue/H/PYdnQk+eNxUg3yQXU0BqAB/dlNraA4l9qAsKIvz\n\tCbEcejR+x8DfeiRXFvIZAnMhnSDB/zgF10QKX+QxZLmtF77IZkupS/NEoVapSgx/zwmV\n\tGm6z7a5wUwu2VZSRXyFf2oZzxyghvYimo8lHtyc3GKOYpE7bhJvhNZqPNwiA7PXlFzBs\n\tj6FQr1fmoS0bK1bRnlS9AHbENrWlk8k2zzdajyYicMcSo1bOuTYUlx2axsfkQ2YBQN60\n\tIX8A==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1765499600; x=1766104400;\n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=hJu2llA1senP4OwRJgGlYcIRb2InkqWEJeerRSzdne8=;\n\tb=viq69G0kfrmkgMOQqnmkIC580eELEjU2Y7Jqwe5BEJhWVCTxjxngn24dCuJOR9dcPJ\n\tyr4ooHIgFJ90ODMt95L7Gi0WP0F/PiIt7fJjKmaXpEDhwCAz6i67xnLiYfDhZr6BdQmc\n\tPeweYuSZQd39zvLIQghK4qr+lvi+tdFJn4XsQ35tPlhZ/TDuZh3L5z3j2pt/GcX06Pxi\n\tdjDj0g1Hf83vFbxiL6opSLWIiJjGakpiKtlQ63Bw2DXWyPDaNOdvPnkWp09M3VkZUQ5w\n\tIZ4Cnrh1DlnMxuuqdrNHqsZorVNHA5ipLJp8Xt6ZC55XM9APn1fZ5z8VHvywUDZZ7ELv\n\tw8OA==", "X-Gm-Message-State": "AOJu0YyosZr8CuWlqsbZBs4+fyvAonb/KIojBtZK3fpfnZpDuBaEbdjq\n\tppoT7EEPB7OqMwOtef2MkC5dFtzXIB4bEFaJoUYAsFiozpaua28UwoDFXMZ4o4PWC22XAvEafYi\n\t/nud/", "X-Gm-Gg": "AY/fxX5B8hXwT5yB+o2qIk2Xa34gDWIfHYJSvTrt0Dwwjek9tEzZFyA+IwtJQuehH5I\n\tsPWsjzJ4B4BNuvr7CZygWHnuH5jn+XCnJkTKUQuj27sM9npsTxD3csFEchMhQEtcZum6bCPekVq\n\t3J3z5VGYLVewmeZdAxG1AI5DfoSs9jvO9cGkXHSz1LTDRhWev9yiM8UphhOql+ew92C7Yjr1FSj\n\tXMumgQ9urBlSd+xCnI9WUVwjGG6T9IFfjLUc6UhUAjkxGIwo3kkbcRJr2pb2aPcKIoUpR+YnOKh\n\tMbLtyLu0NCfuLbASTi5DUZKkBjh/kLAGL3DIFj7S/+HHp0+ntCn4XmmWiGar/VP6AefyWKntpXl\n\to0xXXF7fFIGy85Eib1E6oYcNB2lHf8Vck+k+VDIV+DsaEEQtWtCCiuy+fQRJGuJjRYMATT6NIE/\n\tpVJq2p8nIVuJ0K8YdYLmfQ++w/mFq46S9Y7LDcliSc5VWnf+jddpWisP0pfphRzVzITA5OTg==", "X-Google-Smtp-Source": "AGHT+IHwAFEqZJTAozc17HOhGLb+68/NYR+2kwBiOTLuwTifKwtKxY3L4Pp2a3OBsATe4i/CVuRejA==", "X-Received": "by 2002:a05:6a21:99a7:b0:364:31e:2cac with SMTP id\n\tadf61e73a8af0-369afa02a4emr313748637.46.1765499599830; \n\tThu, 11 Dec 2025 16:33:19 -0800 (PST)", "From": "Bryan O'Donoghue <bryan.odonoghue@linaro.org>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "pavel@ucw.cz,\n\tBryan O'Donoghue <bryan.odonoghue@linaro.org>", "Subject": "[PATCH v8 00/26] Add GLES 2.0 GPUISP to libcamera", "Date": "Fri, 12 Dec 2025 00:29:11 +0000", "Message-ID": "<20251212002937.3118-1-bryan.odonoghue@linaro.org>", "X-Mailer": "git-send-email 2.52.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": "v8:\n\nA small number of updates. I'll copy and paste my change notes directly.\n\n- gbm patch\n - \\todo, nullptr comments addressed - Milan\n - Left fail - meant fail\n - Changed cleanup flow\n - // namespace libcamera -> /* namespace libcamera */\n - Dropped HAVE_GBM\n\n- Contrast patch\n Passed contrastExp as argument to apply_contrast() - Milan\n\n- Dropped \"invalid.\" for \"invalid\"\n Left \"it makes sense\" not sure of \"let's try\" was a suggested\n commit log comment but - \"it makes sense\" to me :) - Milan\n\n- Changes CCM init to Matrix<float, 3, 3> identityMatrix = Matrix<float, 3, 3>::identity();\n Amends commit log - Milan\n\n- Fixes the identity CCM commit log\n Old commit log not updated on review changes - Milan\n\n- Changed selfEnumerating to use common code\n Milan left a comment on not having copied code so I created\n a helper function and moved a much as I thought I could - Milan\n\n- todo\n - rewriging -> rewiring.\n onomatopoeic error !\n - manging -> managing\n\nv7:\n\n- Takes Laurent's question on doing egl init in start() instead of\n configure() and implements it. Tested with repeated start()/stop() from\n qcam.\n\n- A few supporting patches to get data we require in configure() into\n start() has been added as a result.\n\n- Bayer object now has a start() and a stop() - introduced in the\n precursor series.\n\n- Dropped overloaded algorith init() function as Milan seemed to\n prefer a flag in context_ over an overloaded init().\n\n- Small tidy up on the use of TEXTURE1 instead of TEXTURE4 now\n that the RGB lookup tables have been dropped too.\n\n- Updates the todo list\n\n- The one thing not done is passing the complex contrast\n into the fragment shader per frame, instead of having it\n calculated per-pixel. I'd rather get the current series\n out/merged than add this extra bit right now.\n\nv6:\n\n- Rebases on 0.6.0\n\n- Removes conditional compilation for lookup-table v CCM.\n The conditional compile to switch the ordering of blue is kept. - Laurent\n\n- Removes Bayer lookup table code from shaders and debayer_egl logic\n Disussed with Laurent and agree it can be dropped now\n\n- Adds a patch to pass no-op values to the debayer shaders when\n running those shaders in qcam. Confirmed this works by switching\n the true/false flag in simple.cpp and recompiling. Once the raw-streams\n stuff gets merged changing simple.cpp shouldn't be required.\n\n This lets us continue to support the original behaviour of the debayer\n shaders in Qcam while also reusing those shaders with our extensions\n in softisp.\n\n- Re-orders the patches a bit to group changes a bit more logically\n especially on more recently added patches. CI is still happy with building\n as progressive changes.\n\n- Drops the patch to make isStandardBayerOrder static as this logic\n has been squashed into the precursor series. Barnabas\n\nv5:\n\n- Takes in a fix from Hans for the unpacked center bytes.\n I opted to have separate stride values passed to the shaders\n to maintain consistency with qcam\n- Implements the unique_ptr change Barnabas suggested\n- Changes to glFinish instead of eglWaitSyncKHR - Milan/Robert\n- Fixes interface to pass gpuIspEnabled as a parameter - Barnabas\n- Makes it an error if you request GPUISP but object instantiation fails - Barnabas\n- Fixes indentation splat in unpacked shader - I love whitespace :( - Laurent\n- Leaves the upload tables in place - I thought we noted to do this in weekly meeting\n I'm open/happy to drop this code though its not really necessary now.\n- Leaves conditional compilation in shaders.\n The reason being with conditional compilation we can still run the original\n unmodifed shaders - which gives a nice base to mess with the demosiac phase\n in isolation.\n\nv4:\n\n- Drops AWB since the CCM contains it already\n- Includes Gamma\n- Includes Contrast - testable via camshark\n- Includes Saturation - testable via camshark\n- Includes a scaler from Robert\n- Includes synch changes from Robert\n- Includes all feedback incorporated from Pavel\n- Generates a default 65k CCM if none is supplied\n- Various Doxygen torments fixed along the way\n- And is the \"top half\" of the precursor series as the GPUISP\n series becomes 44 patches long this is an unreasonable number\n to merge in one go.\n\n- Full testable branch\nLink: https://gitlab.freedesktop.org/camera/libcamera-softisp/-/tree/v0.5.2-gpuisp-v4e?ref_type=heads\n\n- The first part of the series is in the precurso here\nLink: https://gitlab.freedesktop.org/camera/libcamera-softisp/-/commits/v0.5.2-gpuisp-v4e-split\n\nThat precursor is just a tag about half way through the integrated series.\n\nBryan O'Donoghue (23):\n libcamera: software_isp: gbm: Add a GBM helper class for GPU surface\n access\n libcamera: software_isp: egl: Add a eGL base helper class\n qcam: viewfinder_gl: Set no-op Bayer shader values\n libcamera: shaders: Use highp not mediump for float precision\n libcamera: shaders: Extend debayer shaders to apply CCM gains\n libcamera: shaders: Extend bayer shaders to support swapping R and B\n on output\n libcamera: shaders: Add support for black level compensation\n libcamera: shaders: Add support for Gamma\n libcamera: shaders: Add support for contrast\n libcamera: software_isp: Add member variables to track selected\n input/output pixelFormat\n libcamera: software_isp: Add a Size_ member variable to pass to eGL\n later\n libcamera: software_isp: debayer_egl: Add an eGL Debayer class\n libcamera: software_isp: debayer_cpu: Make getInputConfig and\n getOutputConfig static\n libcamera: software_isp: debayer_egl: Make DebayerEGL an environment\n option\n libcamera: software_isp: debayer_egl: Make gpuisp default softisp mode\n ipa: software_isp: Add a selfInitialising flag to IPAContext\n libcamera: software_isp: ccm: Add self-initialising identity CCM to\n Ccm::init\n ipa: libipa: module: Add createSelfEnumeratingAlgorithm\n ipa: simple: Add a flag to indicate gpuIspEnabled\n ipa: software_isp: Call createSelfEnumeratingAlgorithm() to statically\n instantiate CCM algo\n libcamera: software_isp: lut: Skip calculation lookup tables if\n gpuIspEnabled is true\n libcamera: software_isp: lut: Change default Gamma to 1.0/2.2\n libcamera: software_isp: Add a gpuisp todo list\n\nHans de Goede (1):\n libcamera: shaders: Fix input sampling when width != stride\n\nMilan Zamazal (2):\n libcamera: shaders: Rename bayer_8 to bayer_unpacked\n libcamera: software_isp: GPU support for unpacked 10/12-bit formats\n\n include/libcamera/internal/egl.h | 186 +++++\n include/libcamera/internal/gbm.h | 39 ++\n include/libcamera/internal/meson.build | 1 +\n include/libcamera/ipa/soft.mojom | 3 +-\n src/apps/qcam/assets/shader/shaders.qrc | 4 +-\n src/apps/qcam/viewfinder_gl.cpp | 41 +-\n src/apps/qcam/viewfinder_gl.h | 12 +\n src/ipa/libipa/module.cpp | 34 +\n src/ipa/libipa/module.h | 47 +-\n src/ipa/simple/algorithms/ccm.cpp | 22 +-\n src/ipa/simple/algorithms/lut.cpp | 72 +-\n src/ipa/simple/ipa_context.h | 2 +\n src/ipa/simple/soft_simple.cpp | 9 +\n src/libcamera/egl.cpp | 619 +++++++++++++++++\n src/libcamera/gbm.cpp | 130 ++++\n src/libcamera/meson.build | 33 +\n src/libcamera/shaders/RGB.frag | 2 +-\n src/libcamera/shaders/YUV_2_planes.frag | 2 +-\n src/libcamera/shaders/YUV_3_planes.frag | 2 +-\n src/libcamera/shaders/YUV_packed.frag | 2 +-\n src/libcamera/shaders/bayer_1x_packed.frag | 79 ++-\n .../{bayer_8.frag => bayer_unpacked.frag} | 95 ++-\n .../{bayer_8.vert => bayer_unpacked.vert} | 6 +-\n src/libcamera/shaders/meson.build | 4 +-\n src/libcamera/software_isp/debayer.cpp | 15 +\n src/libcamera/software_isp/debayer.h | 3 +\n src/libcamera/software_isp/debayer_cpu.h | 4 +-\n src/libcamera/software_isp/debayer_egl.cpp | 641 ++++++++++++++++++\n src/libcamera/software_isp/debayer_egl.h | 142 ++++\n src/libcamera/software_isp/gpuisp-todo.txt | 40 ++\n src/libcamera/software_isp/meson.build | 8 +\n src/libcamera/software_isp/software_isp.cpp | 37 +-\n 32 files changed, 2258 insertions(+), 78 deletions(-)\n create mode 100644 include/libcamera/internal/egl.h\n create mode 100644 include/libcamera/internal/gbm.h\n create mode 100644 src/libcamera/egl.cpp\n create mode 100644 src/libcamera/gbm.cpp\n rename src/libcamera/shaders/{bayer_8.frag => bayer_unpacked.frag} (51%)\n rename src/libcamera/shaders/{bayer_8.vert => bayer_unpacked.vert} (90%)\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/gpuisp-todo.txt" }