From patchwork Thu Nov 20 23:19:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bryan O'Donoghue X-Patchwork-Id: 25101 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 0D139C3330 for ; Thu, 20 Nov 2025 23:20:29 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 41AF560A9D; Fri, 21 Nov 2025 00:20:28 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="pLDk2llY"; dkim-atps=neutral Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 118CE606A0 for ; Fri, 21 Nov 2025 00:20:26 +0100 (CET) Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-4775895d69cso6364005e9.0 for ; Thu, 20 Nov 2025 15:20:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1763680825; x=1764285625; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=U9CWY42zrjQ8bpNjtcuWuC/DvfqKykTNHJtK5L6bELs=; b=pLDk2llYyC6uiYIE28PfHjSr1NNMXgysUFvibXqMzd+qmDnsjl8LEISVuXJMA9MLl7 CdaBe2E7mQwj2gR0ebqivIvsHWH2FiMMWpE2MjUnjD0TsgiNPlsBQi2u9w17BXEuuXVn rZngWHTIN5oysg29N+9looc0ztNcqw1LF9rsJEgEfsl/S/GVzinauLg+aekDrj4GJfZ8 ci7gYh6rhgk//R44QPw9OgoAwQyJpclnrKxIc9XqAXQdTNdyNOYhP/+sP2OmN+yoFNzy h1eN2OzV3H7lJXv/4YySE4wdFnVHxFXxYf6nWcYH/T7OwUHOOkwnmmGuNWX9wWnaZYHZ 7Gdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763680825; x=1764285625; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=U9CWY42zrjQ8bpNjtcuWuC/DvfqKykTNHJtK5L6bELs=; b=TKx3sEoMoVwLrdWhtamJUBIt0nX8DmTjMSFswmO1MXdDB605aew9VhVccqsTGTL1Un Wm3A9HzZShhvcOXaP3CotpiKMKPMLaPUqQPln53yR7gDXGkyoBBJEkt5q5wY3gQWwu+p K1nSFtDcy7dMAoyYO5eIefyV4ocJdnnXCRRREXpn4NBAWPyF/x4R4DcUXjx/RrIPtUPT 9nQld+2cVteDv22W0XS9RUjzNeb58n0P8JgSHRTN4PLAbYjHw5uYPxkiev9TMHYzEnPq sAujF5MYwioN0uiXTwIJwBIqPrkSFofuyKOwD8SvjpKd678WQtHTXAkkYcpQTUMoED6c jmfg== X-Gm-Message-State: AOJu0YwpAktyArWrIUNaEHp+j/30uXOYA35YvO8vmPbDoixXlwSP8phQ h4NtAXt6AVOqFt2AU915gmdU7ERRbd21EH1XEZjRHJ6xV64guR+fbDMCVA1n4hCqHSd9fLdeJeT ku3OTihQ= X-Gm-Gg: ASbGnctJO8ziQfl6coznom6jbN4BCsuGQ5kLbYI/exWMVyZZ3uknFE1Ui2q/cGXFcJI z6EJtVarI/MEpgOkYFPh/TyrUEaYpSOPE5nWg7ElJK0rlmxU8/Vm8wVkozLEGCbGhS185AJIPr0 OodWFDNAk0h90u1CkoQk5d+ED+KnGMFqXGJ3AjNhiGNU61ZJTyIEg+/yiLtXhmHhfFWmuow8xVt 36hVj3ucFVU4epVXumxb9Zet3xsAECS/KLWdXHtjNXW/+pjI2vYJxTrlwh69RgdFdSOVIblMtEi 4sN/FoQUXnC0js7tIRXW7dZj32lB2Ci2dcIkNq/VNRkHMdVeY33TJFX6EGccg0M50xH6l6iLi9R wdL3fgASGQD8ldIgCwB6nYDJV1ybDaY69Faomv0eqmXUsHm/HZobZonaQgnRXwNIOFslAixGOvh nalO5D8FEPwd6z+diW2YcGLFgQ/X8K1PsLdr5gKcVXtxSaYwjrBPEC094hGNky+FWDr5g= X-Google-Smtp-Source: AGHT+IHcEzR9VpB1EMBklMplRlzzcRKVN/KfBGOrj5/tCroLgzvMRWetjfvv+oFUe1vM5+1ouHjiyA== X-Received: by 2002:a05:600c:1994:b0:477:a9e:859a with SMTP id 5b1f17b1804b1-477c01c0073mr2946105e9.22.1763680825076; Thu, 20 Nov 2025 15:20:25 -0800 (PST) Received: from inspiron14p-linux.ht.home (188-141-3-146.dynamic.upc.ie. [188.141.3.146]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-477bf3af0ecsm11618415e9.9.2025.11.20.15.20.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Nov 2025 15:20:24 -0800 (PST) From: Bryan O'Donoghue To: libcamera-devel@lists.libcamera.org Cc: pavel@ucw.cz, Bryan O'Donoghue Subject: [PATCH 00/22] GPUISP precursor series Date: Thu, 20 Nov 2025 23:19:57 +0000 Message-ID: <20251120232019.3590-1-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.51.2 MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" This series takes all of the already reviewed-by on-list stuff and parcels it into a more digestable series. Right at the end are some patches which were about making data available in the debayer params strcutre and had some reviewed-by and/or comments from Kiearn and Milan that I didn't apply review-by to because I wasn't 100% sure that was warranted from the list dicussion - CCM was clear enough, AWB got dropped. Adding in blacklevel, gamma and contrast seem to fit-in with these patches and including in this series reduces the overall size of GPUISP as a series from 44 ! patches in total to 22. CI is passing both of this branch and for the aggregate branch so, I've opted to start sending out the broken apart series, even though I'm expecting an IPU6 fix from Hans it shouldn't affect this early code. Bryan O'Donoghue (17): libcamera: shaders: Move GL shader programs to src/libcamera/assets/shader utils: gen-shader-headers: Add a utility to generate headers from shaders meson: Automatically generate glsl_shaders.h from specified shader programs libcamera: software_isp: Move useful items from DebayerCpu to Debayer base class libcamera: software_isp: Move Bayer params init from DebayerCpu to Debayer libcamera: software_isp: Move param select code to Debayer base class libcamera: software_isp: Move DMA Sync code to Debayer base class libcamera: software_isp: Make output DMA sync contingent libcamera: software_isp: Move isStandardBayerOrder to base class libcamera: software_isp: Start the ISP thread in configure libcamera: software_isp: Move configure to worker thread libcamera: software_isp: debayer: Introduce a stop() callback to the debayer object libcamera: software_isp: debayer: Make the debayer_ object of type class Debayer not DebayerCpu libcamera: software_isp: lut: Make CCM available in debayer params libcamera: software_isp: blacklevel: Make black level available in debayer params libcamera: software_isp: lut: Make gamma from lut.cpp available in debayer params libcamera: software_isp: lut: Make contrast available in debayer params Hans de Goede (5): libcamera: swstats_cpu: Update statsProcessFn() / processLine0() documentation libcamera: swstats_cpu: Drop patternSize_ documentation libcamera: swstats_cpu: Move header to libcamera/internal/software_isp libcamera: software_isp: Move benchmark code to its own class libcamera: swstats_cpu: Add processFrame() method include/libcamera/internal/meson.build | 10 ++ .../libcamera/internal/shaders}/RGB.frag | 0 .../internal/shaders}/YUV_2_planes.frag | 0 .../internal/shaders}/YUV_3_planes.frag | 0 .../internal/shaders}/YUV_packed.frag | 0 .../internal/shaders}/bayer_1x_packed.frag | 0 .../libcamera/internal/shaders}/bayer_8.frag | 0 .../libcamera/internal/shaders}/bayer_8.vert | 0 .../libcamera/internal/shaders}/identity.vert | 0 .../libcamera/internal/shaders/meson.build | 10 ++ .../internal/software_isp/benchmark.h | 39 ++++++++ .../internal/software_isp/debayer_params.h | 23 +++++ .../internal/software_isp/meson.build | 2 + .../internal/software_isp/software_isp.h | 5 +- .../internal}/software_isp/swstats_cpu.h | 15 ++- src/apps/qcam/assets/shader/shaders.qrc | 16 +-- src/apps/qcam/meson.build | 3 + src/apps/qcam/viewfinder_gl.cpp | 70 ++++++------- src/ipa/simple/algorithms/blc.cpp | 13 +++ src/ipa/simple/algorithms/blc.h | 4 + src/ipa/simple/algorithms/lut.cpp | 4 + src/libcamera/software_isp/benchmark.cpp | 92 +++++++++++++++++ src/libcamera/software_isp/debayer.cpp | 70 +++++++++++++ src/libcamera/software_isp/debayer.h | 71 ++++++++++++- src/libcamera/software_isp/debayer_cpu.cpp | 99 ++++--------------- src/libcamera/software_isp/debayer_cpu.h | 46 +-------- src/libcamera/software_isp/meson.build | 1 + src/libcamera/software_isp/software_isp.cpp | 23 ++++- src/libcamera/software_isp/swstats_cpu.cpp | 88 +++++++++++++++-- utils/gen-shader-header.py | 38 +++++++ utils/gen-shader-headers.sh | 44 +++++++++ utils/meson.build | 2 + 32 files changed, 600 insertions(+), 188 deletions(-) rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/RGB.frag (100%) rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_2_planes.frag (100%) rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_3_planes.frag (100%) rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_packed.frag (100%) rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_1x_packed.frag (100%) rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_8.frag (100%) rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_8.vert (100%) rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/identity.vert (100%) create mode 100644 include/libcamera/internal/shaders/meson.build create mode 100644 include/libcamera/internal/software_isp/benchmark.h rename {src/libcamera => include/libcamera/internal}/software_isp/swstats_cpu.h (84%) create mode 100644 src/libcamera/software_isp/benchmark.cpp create mode 100755 utils/gen-shader-header.py create mode 100755 utils/gen-shader-headers.sh