{"id":25494,"url":"https://patchwork.libcamera.org/api/covers/25494/?format=json","web_url":"https://patchwork.libcamera.org/cover/25494/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20251211232246.31330-1-bryan.odonoghue@linaro.org>","date":"2025-12-11T23:22:25","name":"[v5,00/20] GPUISP precursor series","submitter":{"id":175,"url":"https://patchwork.libcamera.org/api/people/175/?format=json","name":"Bryan O'Donoghue","email":"bryan.odonoghue@linaro.org"},"mbox":"https://patchwork.libcamera.org/cover/25494/mbox/","series":[{"id":5656,"url":"https://patchwork.libcamera.org/api/series/5656/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5656","date":"2025-12-11T23:22:25","name":"GPUISP precursor series","version":5,"mbox":"https://patchwork.libcamera.org/series/5656/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/25494/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 22D30C3257\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 11 Dec 2025 23:23:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 437F161628;\n\tFri, 12 Dec 2025 00:23:08 +0100 (CET)","from mail-pf1-x432.google.com (mail-pf1-x432.google.com\n\t[IPv6:2607:f8b0:4864:20::432])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1BE9B61499\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Dec 2025 00:23:06 +0100 (CET)","by mail-pf1-x432.google.com with SMTP id\n\td2e1a72fcca58-7acd9a03ba9so700298b3a.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 11 Dec 2025 15:23:05 -0800 (PST)","from inspiron14p-linux (M106185144161.v4.enabler.ne.jp.\n\t[106.185.144.161]) by smtp.gmail.com with ESMTPSA id\n\td2e1a72fcca58-7f4c4ab52aasm3399933b3a.38.2025.12.11.15.23.00\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 11 Dec 2025 15:23:03 -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=\"JrntDiAh\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1765495384; x=1766100184;\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=SKQuuIyHX5qD88Oclf8euBRN/bf6ULATuFVoYVGLr48=;\n\tb=JrntDiAhpzld+CoUf2qqRSDDnSS7hmttyUZJSA4/j/n2G7OQvuuWmRjj5GV1+q94cA\n\t+qygeZDNFO8mjqq9vw8C7mreHbyT7KAJX9xujBOkpgELDmLRKlTT29KY+/R6GTINDRDf\n\tjilQ8vnpfF4yocNQfqxj/COx9nuvFCRNobGOfyL+N0QneK4kNYybDaZXKOPU68k/CcFG\n\tW0cVUheKdoipaHKvjyuVteFVmj2440je84wWNR03aO7R+5e3McNJ0EZ7+SmlCFC/KMx8\n\tpObtrOlXpPZZMK1PULa92GtW9+7kg7rU8ZddTJBpbb7Vd3Evxqr3aYEcwZmUZLLHnZHS\n\tSFzQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1765495384; x=1766100184;\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=SKQuuIyHX5qD88Oclf8euBRN/bf6ULATuFVoYVGLr48=;\n\tb=l5ulIAyFXunnHkvvLepGQuDzdXqP7vEa1GmMXTj5lgZycPzKukpWXSv847yMjEWIgE\n\tQUMzv4okUP4csdBlB0e9YwMtgC7UOgdmxt04N7+YZqc31v2knC+77zuXYmy4IcXeE8Xd\n\tBUkcR1titmcAg0E9AcePnEESzO27wiIbIWHPzuQN856YoR3d+7K5xmyN5KZLzn50KppB\n\tgFIq5MaxJFUbEOpK8B6wJhm5kYvPi5zdb7TeoSygruOhBRwukX17qFxAwwWEdtYuQd2u\n\tZDkFf3e3g7mcpVlhCKsiLx3aobuV1rygjVx1j+SVJDIB+GLqbZHHwoFNzkGStOlT6Z2V\n\taLag==","X-Gm-Message-State":"AOJu0Ywd0XFX6hcRPmOR+0Udbt6VHIVaxEh170VI98jOipZP+UJLaE2Z\n\tQuNtsS0lKib9FW/6D0LqZNX/RgJAigPKILP/rYWXCRdsqBa95KPNTNBBhPM13uI/hSYgrvkI0nR\n\t017db","X-Gm-Gg":"AY/fxX70ZzyClM/KZOw8zQ/UH96Db9bV9N+znlwDIL8pi8gOipPhmAmZQvzd1jDxMiM\n\t8zOxjuuQPPZMtdaRfT9E27ULs2duV/eQFIY880GjwBL6I5Z0i27F3zTFaMYRl/gYVOGCk/UNH3+\n\tpVmwAr01jWNhvkhm5UlViXYjilpVCe0FIA9vlbe9ZPweiMBiecTLtqhwGj0lBKweZEPOnOjdxnq\n\tI/Z5AJvEAeKGgHrhErSOxagLYGehVZJ0IyEF7/EDWI8NBmZ9GbNcTHx9SIBV9fBQAjJ9ssjglvz\n\tOsv32t6/GyJSYo4JQyMQXi94Rp37gjNl8HNsrLpyn6mjonm/wrOft+So1SHSfX0q0gLTYalUB7/\n\t/pIYIZcJ1bwYA5BKTMt13xpwtT4idGMs9108giRfIc5yt0c0FQSY2xkhzjGMQtLZMTRuXrU33E6\n\ts1l4IRSQ58VxxOwENFsQin64KEaFQeM0cjE/ufMGGmrUEE7Wx0v4JAWum3Aqj4fw==","X-Google-Smtp-Source":"AGHT+IGcejNZrkYzpKh2m5syDDkZCSbliMZjUvcJg/ifeIhoZ8ZaGN/VMM2EM/bEvadFbcW/thuWOA==","X-Received":"by 2002:a05:6a00:6caa:b0:7e8:4398:b373 with SMTP id\n\td2e1a72fcca58-7f66a075564mr182736b3a.70.1765495384082; \n\tThu, 11 Dec 2025 15:23:04 -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 v5 00/20] GPUISP precursor series","Date":"Thu, 11 Dec 2025 23:22:25 +0000","Message-ID":"<20251211232246.31330-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":"v5:\n- Patch 15/20\n  Replaced start/stop \\brief - Milan\n  Left object type DebayerCPU as subsequent patch changes to type Debayer - Milan\n  Commit log updated to reflect thread-blocking behaviour - Barnabas/Milan\n\n- Additional RB applied as indicated - Milan\n\nv4:\n- Adds a start() method to the bayer object.\n  Previous versions already had a stop() method but, the new start()\n  will allow us to do EGL init in start() not configure().\n- Additional comments from Milan missed in previous reviews addressed.\n- Patch 15 changed enough that I dropped Kieran and Milan's previous RB\n  please make sure you guys are still happy with this.\n\nv3:\n- Adds Kieran's RBs as given\n- Changes python script - Barnabas\n- Makes isStandardBayerOrder static earlier in series - Barnabas\n- Moves from DebayerCpu to Debayer object type in\n  one go for configure(), process() and stop() - Barnabas\n- Rebases on v0.6.0\n\nv2:\n- Moves shaders to src/libcamera/shaders - Laurent\n- Various Doxygen fixes - Kieran/Bryan/Milan\n- Takes Hans' change to process 1/4 frames in processFrame()\n- Implements suggested change in blackLevel calc - Milan\n- Only three patches in this series have no RB\n  I think it would be safe to merge this series - bod\n\nv1:\nThis series takes all of the already reviewed-by on-list stuff and\nparcels it into a more digestable series.\n\nRight at the end are some patches which were about making data available in\nthe debayer params strcutre and had some reviewed-by and/or comments from\nKiearn and Milan that I didn't apply review-by to because I wasn't 100%\nsure that was warranted from the list dicussion - CCM was clear enough, AWB\ngot dropped.\n\nAdding in blacklevel, gamma and contrast seem to fit-in with these patches\nand including in this series reduces the overall size of GPUISP as a series\nfrom 44 ! patches in total to 22. \n\nCI is passing both of this branch and for the aggregate branch so, I've\nopted to start sending out the broken apart series, even though I'm\nexpecting an IPU6 fix from Hans it shouldn't affect this early code.\n\nBryan O'Donoghue (15):\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  libcamera: software_isp: Move useful items from DebayerCpu to Debayer\n    base class\n  libcamera: software_isp: Move Bayer params init from DebayerCpu to\n    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: Make output DMA sync contingent\n  libcamera: software_isp: Move isStandardBayerOrder to base class\n  libcamera: software_isp: debayer: Introduce a start() / stop() methods\n    to the debayer object\n  libcamera: software_isp: debayer: Make the debayer_ object of type\n    class Debayer not DebayerCpu\n  libcamera: software_isp: lut: Make CCM available in debayer params\n  libcamera: software_isp: blacklevel: Make black level available in\n    debayer params\n  libcamera: software_isp: lut: Make gamma from lut.cpp available in\n    debayer params\n  libcamera: software_isp: lut: Make contrast available in debayer\n    params\n\nHans de Goede (5):\n  libcamera: swstats_cpu: Update statsProcessFn() / processLine0()\n    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\n .../internal/software_isp/benchmark.h         |  39 +++\n .../internal/software_isp/debayer_params.h    |  11 +\n .../internal/software_isp/meson.build         |   2 +\n .../internal/software_isp/software_isp.h      |   5 +-\n .../internal}/software_isp/swstats_cpu.h      |  15 +-\n src/apps/qcam/assets/shader/shaders.qrc       |  16 +-\n src/apps/qcam/meson.build                     |   3 +\n src/apps/qcam/viewfinder_gl.cpp               |  70 ++---\n src/ipa/simple/algorithms/blc.cpp             |   9 +\n src/ipa/simple/algorithms/blc.h               |   4 +\n src/ipa/simple/algorithms/lut.cpp             |   4 +\n src/libcamera/meson.build                     |  11 +\n .../shader => libcamera/shaders}/RGB.frag     |   0\n .../shaders}/YUV_2_planes.frag                |   0\n .../shaders}/YUV_3_planes.frag                |   0\n .../shaders}/YUV_packed.frag                  |   0\n .../shaders}/bayer_1x_packed.frag             |   0\n .../shader => libcamera/shaders}/bayer_8.frag |   0\n .../shader => libcamera/shaders}/bayer_8.vert |   0\n .../shaders}/identity.vert                    |   0\n src/libcamera/shaders/meson.build             |  10 +\n src/libcamera/software_isp/benchmark.cpp      |  92 +++++++\n src/libcamera/software_isp/debayer.cpp        | 258 ++++++++++++++++++\n src/libcamera/software_isp/debayer.h          |  44 ++-\n src/libcamera/software_isp/debayer_cpu.cpp    |  89 +-----\n src/libcamera/software_isp/debayer_cpu.h      |  45 +--\n src/libcamera/software_isp/meson.build        |   1 +\n src/libcamera/software_isp/software_isp.cpp   |  15 +-\n src/libcamera/software_isp/swstats_cpu.cpp    |  93 ++++++-\n utils/gen-shader-header.py                    |  37 +++\n utils/gen-shader-headers.sh                   |  55 ++++\n utils/meson.build                             |   2 +\n 32 files changed, 742 insertions(+), 188 deletions(-)\n create mode 100644 include/libcamera/internal/software_isp/benchmark.h\n rename {src/libcamera => include/libcamera/internal}/software_isp/swstats_cpu.h (84%)\n rename src/{apps/qcam/assets/shader => libcamera/shaders}/RGB.frag (100%)\n rename src/{apps/qcam/assets/shader => libcamera/shaders}/YUV_2_planes.frag (100%)\n rename src/{apps/qcam/assets/shader => libcamera/shaders}/YUV_3_planes.frag (100%)\n rename src/{apps/qcam/assets/shader => libcamera/shaders}/YUV_packed.frag (100%)\n rename src/{apps/qcam/assets/shader => libcamera/shaders}/bayer_1x_packed.frag (100%)\n rename src/{apps/qcam/assets/shader => libcamera/shaders}/bayer_8.frag (100%)\n rename src/{apps/qcam/assets/shader => libcamera/shaders}/bayer_8.vert (100%)\n rename src/{apps/qcam/assets/shader => libcamera/shaders}/identity.vert (100%)\n create mode 100644 src/libcamera/shaders/meson.build\n create mode 100644 src/libcamera/software_isp/benchmark.cpp\n create mode 100755 utils/gen-shader-header.py\n create mode 100755 utils/gen-shader-headers.sh"}