Patch Detail
Show a patch.
GET /api/1.1/patches/26935/?format=api
{ "id": 26935, "url": "https://patchwork.libcamera.org/api/1.1/patches/26935/?format=api", "web_url": "https://patchwork.libcamera.org/patch/26935/", "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": "<20260618122245.946138-2-bryan.odonoghue@linaro.org>", "date": "2026-06-18T12:22:14", "name": "[01/30] libcamera: software_isp: Rename Bayer classes to SoftwareIspPipeline", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "036a331e96b854670b1d86b2870fcfeee051c226", "submitter": { "id": 175, "url": "https://patchwork.libcamera.org/api/1.1/people/175/?format=api", "name": "Bryan O'Donoghue", "email": "bryan.odonoghue@linaro.org" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/26935/mbox/", "series": [ { "id": 6005, "url": "https://patchwork.libcamera.org/api/1.1/series/6005/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6005", "date": "2026-06-18T12:22:13", "name": "RFC/RFT: gpuisp: Multipass with speed optimisations on top", "version": 1, "mbox": "https://patchwork.libcamera.org/series/6005/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/26935/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/26935/checks/", "tags": {}, "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 D951CC3301\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Jun 2026 12:23:06 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 71CCD62C6D;\n\tThu, 18 Jun 2026 14:23:04 +0200 (CEST)", "from mail-wm1-x335.google.com (mail-wm1-x335.google.com\n\t[IPv6:2a00:1450:4864:20::335])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 11EFB629A8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Jun 2026 14:22:59 +0200 (CEST)", "by mail-wm1-x335.google.com with SMTP id\n\t5b1f17b1804b1-490be29c1c5so7263125e9.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Jun 2026 05:22:59 -0700 (PDT)", "from inspiron14p-linux ([109.76.144.236])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-4922fa3a4easm275198015e9.3.2026.06.18.05.22.57\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 18 Jun 2026 05:22:57 -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=\"HDZAXm9Y\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1781785379; x=1782390179;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=lU+S6rm4EDKAJ6Icy3YR22fQP98Ke30bgUg2epSurEg=;\n\tb=HDZAXm9YutX0ACE/VQGOvCpu95OMz9EgRwU3zqLuyTKITmfJSw+mG591hk9R3Lru0u\n\tSnn5pYqg7u7Tk7aSseGMX5Y8Ym7zckesYsTtXWohlGJ0MfAAHXjKvVoKRpVCkU2VKRk+\n\taQzugDTolewHK/vh6IN6eNfxBZp4xvLg7xHlgxXLqrncSKHGCz2fP7T+d/1rlIGBDYTd\n\t1Y34SN2yJbblSMme6/Aqg2sIGHWeU0Yt7hG38QhO9vviXtC7tCjKVMGhBtNA+heTgLO0\n\tGNbhDNg7a7u6C8W9mOr8Wg99uOXXYEiCXkRDTJcPpWZuXW9t3Vn20B4XPf1tMJva651x\n\tYtZQ==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1781785379; x=1782390179;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=lU+S6rm4EDKAJ6Icy3YR22fQP98Ke30bgUg2epSurEg=;\n\tb=lX0DgDSbOIUI3UAHntCgqybekDCQ72Soj6be7xdj18EnS4C7prFCg5SGNl9FIPsU02\n\thw/jIUsSqJrXbuVkJ7kGIuK+nh3Hyfxb1iFpl1nQ2GLhda/sfhlh+yb5BwZaN5CnFvDL\n\timsnRjPQC5uxYMfPEZ6xGbt5dUJKLO10S0kj22+lCo/l7/X539ivMhpnvk5sHSxPY8NL\n\tO48/qvusDe2VfKKxW/SOUh2GOD7IrRcFbp2HR7CxmmJdzq5jiVeTZDhIMEO2q1JbjlgD\n\tSGjnZr89zut3PnYq033/Tr5QlZNUQqCxOFpObq1JDi9Of2F3E3GaiZNdRuCyTb7Xv0oE\n\tAIKQ==", "X-Gm-Message-State": "AOJu0YxxYWr1OeE+mY8bJxY/9Jywa3x66DV5wqCNacerpZlROGLQDWLp\n\tRDQXfktdDqbUkZ9T/5RNL+RIX/96vyzhzNqmwc8qK/0FpIC7EOd1I1NhOTHX9ks4L7n0J2Pv2fu\n\tfj2+aa4A=", "X-Gm-Gg": "AfdE7cnBvsSLPrFcrsSO5PZVcgDnD9Vj6NhJGmMoj+PMSpSkPz4bJJsNe95paT3COTg\n\t9aIfHXaJkWLBfaWQkw/JNEv0A8YgDNXSXIJdnuUVLlhmndhkOnv0SU9rt+mGdYLObEIVff+oRss\n\t8gAIA0yEhcDNEc+ChdxWLCOhLW5aTs3JKONiZLgx4PU3kei0ixjXwTS1JdQQ1aTlflJHFA1SwN5\n\tdPaVzjfZl2aqGeLYuHeAJ6rM0N5wCyjhFcvnd7T9Biv3u5g+2TIRluVSE6Zi8KykzoJWkRxsAPg\n\tenMj0xG+LFNzNdqYlEBgtU6TKOOLVFt95Iei+3e4mGKO2hyAVxVqgB3pguYsm3GvtrI8yWvGx6q\n\tneCZWBXIIzGOBckQDxYNBurguGB5DgwwpvIC1QXF+e9H5ce7S8aSMVeNMStwhbqTEKStYejihSQ\n\tggRHC5CwPBpfMdtwr+xpgh1mlcIcaW", "X-Received": "by 2002:a05:600c:a114:b0:490:e243:4806 with SMTP id\n\t5b1f17b1804b1-492333bf4ebmr114850085e9.9.1781785377832; \n\tThu, 18 Jun 2026 05:22:57 -0700 (PDT)", "From": "Bryan O'Donoghue <bryan.odonoghue@linaro.org>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "bryan.odonoghue@linaro.org,\n\tpavel@ucw.cz", "Subject": "[PATCH 01/30] libcamera: software_isp: Rename Bayer classes to\n\tSoftwareIspPipeline", "Date": "Thu, 18 Jun 2026 13:22:14 +0100", "Message-ID": "<20260618122245.946138-2-bryan.odonoghue@linaro.org>", "X-Mailer": "git-send-email 2.54.0", "In-Reply-To": "<20260618122245.946138-1-bryan.odonoghue@linaro.org>", "References": "<20260618122245.946138-1-bryan.odonoghue@linaro.org>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "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": "The GPUISP multi-pass really wants to run a series of shaders inside of its\nprocess() block. Looking at the classes we have now the Debayer class\nreally implements high level logic for the ISP that just so happens to be\ncentered around Bayer operations.\n\nWe have already done alot of work to make softisp mesa/thread safe so the\nlogical step to take is to start adding in support for more shaders to our\nexisting EGL implementation. It feels lazy sticking to the debayer_->\nobject and naming convention and moreover it won't be accurate in later\npatches.\n\nIts a little less satisfying for the DebayerCpu to rename it to\nSoftwareIspPipelineCpu but it also isn't a lie. SoftIsp itself doesn't\nespecially need to know what is happening inside of the\ninvokeMethod(process) signal save that \"sutff\" happens and data is\nreturned.\n\nFor obvious reasons we started with a base class of type Debayer but, now\nthat we are expanding the capabilities of SoftIsp to go beyond things that\nhappen in the demosiac phase - we also need to outgrow the constraining\nname Bayer - no disrespect to Bruce Bayer himself intended.\n\nSigned-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n---\n .../internal/software_isp/software_isp.h | 4 +-\n src/libcamera/software_isp/meson.build | 6 +-\n src/libcamera/software_isp/software_isp.cpp | 60 +++----\n ...{debayer.cpp => software_isp_pipeline.cpp} | 77 +++++----\n .../{debayer.h => software_isp_pipeline.h} | 8 +-\n ..._cpu.cpp => software_isp_pipeline_cpu.cpp} | 160 +++++++++---------\n ...ayer_cpu.h => software_isp_pipeline_cpu.h} | 10 +-\n ..._egl.cpp => software_isp_pipeline_gpu.cpp} | 51 +++---\n ...ayer_egl.h => software_isp_pipeline_gpu.h} | 8 +-\n 9 files changed, 192 insertions(+), 192 deletions(-)\n rename src/libcamera/software_isp/{debayer.cpp => software_isp_pipeline.cpp} (73%)\n rename src/libcamera/software_isp/{debayer.h => software_isp_pipeline.h} (93%)\n rename src/libcamera/software_isp/{debayer_cpu.cpp => software_isp_pipeline_cpu.cpp} (84%)\n rename src/libcamera/software_isp/{debayer_cpu.h => software_isp_pipeline_cpu.h} (95%)\n rename src/libcamera/software_isp/{debayer_egl.cpp => software_isp_pipeline_gpu.cpp} (90%)\n rename src/libcamera/software_isp/{debayer_egl.h => software_isp_pipeline_gpu.h} (93%)", "diff": "diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex 86cb8f8de..f29e478a5 100644\n--- a/include/libcamera/internal/software_isp/software_isp.h\n+++ b/include/libcamera/internal/software_isp/software_isp.h\n@@ -36,9 +36,9 @@\n \n namespace libcamera {\n \n-class Debayer;\n class FrameBuffer;\n class PixelFormat;\n+class SoftwareIspPipeline;\n class Stream;\n struct StreamConfiguration;\n \n@@ -93,7 +93,7 @@ private:\n \tvoid statsReady(uint32_t frame, uint32_t bufferId);\n \tvoid inputReady(FrameBuffer *input);\n \tvoid outputReady(FrameBuffer *output);\n-\tstd::unique_ptr<Debayer> debayer_;\n+\tstd::unique_ptr<SoftwareIspPipeline> pipeline_;\n \tThread ispWorkerThread_;\n \tSharedMemObject<DebayerParams> sharedParams_;\n \tDebayerParams debayerParams_;\ndiff --git a/src/libcamera/software_isp/meson.build b/src/libcamera/software_isp/meson.build\nindex 15f9e4032..51cc6ac3e 100644\n--- a/src/libcamera/software_isp/meson.build\n+++ b/src/libcamera/software_isp/meson.build\n@@ -21,8 +21,8 @@ summary({'SoftISP GPU acceleration' : mesa_works},\n \n libcamera_internal_sources += files([\n 'benchmark.cpp',\n- 'debayer.cpp',\n- 'debayer_cpu.cpp',\n+ 'software_isp_pipeline.cpp',\n+ 'software_isp_pipeline_cpu.cpp',\n 'software_isp.cpp',\n 'swstats_cpu.cpp',\n ])\n@@ -31,7 +31,7 @@ if mesa_works\n config_h.set('HAVE_DEBAYER_EGL', 1)\n libcamera_internal_sources += files([\n '../egl.cpp',\n- 'debayer_egl.cpp',\n+ 'software_isp_pipeline_gpu.cpp',\n ])\n libcamera_deps += [\n libegl,\ndiff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex 781cf02f8..c99d8654c 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -27,9 +27,9 @@\n #include \"libcamera/internal/framebuffer.h\"\n #include \"libcamera/internal/software_isp/debayer_params.h\"\n \n-#include \"debayer_cpu.h\"\n+#include \"software_isp_pipeline_cpu.h\"\n #if HAVE_DEBAYER_EGL\n-#include \"debayer_egl.h\"\n+#include \"software_isp_pipeline_gpu.h\"\n #endif\n \n /**\n@@ -120,20 +120,20 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,\n \t}\n \n \tif (!softISPMode || softISPMode == \"gpu\")\n-\t\tdebayer_ = std::make_unique<DebayerEGL>(std::move(stats), cm);\n+\t\tpipeline_ = std::make_unique<SoftwareIspPipelineGpu>(std::move(stats), cm);\n \n #endif\n-\tif (!debayer_)\n-\t\tdebayer_ = std::make_unique<DebayerCpu>(std::move(stats), cm);\n+\tif (!pipeline_)\n+\t\tpipeline_ = std::make_unique<SoftwareIspPipelineCpu>(std::move(stats), cm);\n \n-\tdebayer_->inputBufferReady.connect(this, &SoftwareIsp::inputReady);\n-\tdebayer_->outputBufferReady.connect(this, &SoftwareIsp::outputReady);\n+\tpipeline_->inputBufferReady.connect(this, &SoftwareIsp::inputReady);\n+\tpipeline_->outputBufferReady.connect(this, &SoftwareIsp::outputReady);\n \n \tipa_ = pipe->createIPA<ipa::soft::IPAProxySoft>(0, 0);\n \tif (!ipa_) {\n \t\tLOG(SoftwareIsp, Error)\n \t\t\t<< \"Creating IPA for software ISP failed\";\n-\t\tdebayer_.reset();\n+\t\tpipeline_.reset();\n \t\treturn;\n \t}\n \n@@ -152,7 +152,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,\n \t}\n \n \tret = ipa_->init(IPASettings{ ipaTuningFile, sensor->model() },\n-\t\t\t debayer_->getStatsFD(),\n+\t\t\t pipeline_->getStatsFD(),\n \t\t\t sharedParams_.fd(),\n \t\t\t sensorInfo,\n \t\t\t sensor->controls(),\n@@ -160,7 +160,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,\n \t\t\t &ccmEnabled_);\n \tif (ret) {\n \t\tLOG(SoftwareIsp, Error) << \"IPA init failed\";\n-\t\tdebayer_.reset();\n+\t\tpipeline_.reset();\n \t\treturn;\n \t}\n \n@@ -171,13 +171,13 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,\n \t\t\t\t });\n \tipa_->setSensorControls.connect(this, &SoftwareIsp::setSensorCtrls);\n \n-\tdebayer_->moveToThread(&ispWorkerThread_);\n+\tpipeline_->moveToThread(&ispWorkerThread_);\n }\n \n SoftwareIsp::~SoftwareIsp()\n {\n-\t/* make sure to destroy the DebayerCpu before the ispWorkerThread_ is gone */\n-\tdebayer_.reset();\n+\t/* make sure to destroy the SoftwareIspPipeline before the ispWorkerThread_ is gone */\n+\tpipeline_.reset();\n }\n \n /**\n@@ -212,7 +212,7 @@ void SoftwareIsp::processStats(const uint32_t frame, const uint32_t bufferId,\n */\n bool SoftwareIsp::isValid() const\n {\n-\treturn !!debayer_;\n+\treturn !!pipeline_;\n }\n \n /**\n@@ -222,9 +222,9 @@ bool SoftwareIsp::isValid() const\n */\n std::vector<PixelFormat> SoftwareIsp::formats(PixelFormat inputFormat)\n {\n-\tASSERT(debayer_);\n+\tASSERT(pipeline_);\n \n-\treturn debayer_->formats(inputFormat);\n+\treturn pipeline_->formats(inputFormat);\n }\n \n /**\n@@ -235,9 +235,9 @@ std::vector<PixelFormat> SoftwareIsp::formats(PixelFormat inputFormat)\n */\n SizeRange SoftwareIsp::sizes(PixelFormat inputFormat, const Size &inputSize)\n {\n-\tASSERT(debayer_);\n+\tASSERT(pipeline_);\n \n-\treturn debayer_->sizes(inputFormat, inputSize);\n+\treturn pipeline_->sizes(inputFormat, inputSize);\n }\n \n /**\n@@ -250,9 +250,9 @@ SizeRange SoftwareIsp::sizes(PixelFormat inputFormat, const Size &inputSize)\n std::tuple<unsigned int, unsigned int>\n SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)\n {\n-\tASSERT(debayer_);\n+\tASSERT(pipeline_);\n \n-\treturn debayer_->strideAndFrameSize(outputFormat, size);\n+\treturn pipeline_->strideAndFrameSize(outputFormat, size);\n }\n \n /**\n@@ -267,13 +267,13 @@ int SoftwareIsp::configure(const StreamConfiguration &inputCfg,\n \t\t\t const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,\n \t\t\t const ipa::soft::IPAConfigInfo &configInfo)\n {\n-\tASSERT(ipa_ && debayer_);\n+\tASSERT(ipa_ && pipeline_);\n \n \tint ret = ipa_->configure(configInfo);\n \tif (ret < 0)\n \t\treturn ret;\n \n-\tret = debayer_->configure(inputCfg, outputCfgs, ccmEnabled_);\n+\tret = pipeline_->configure(inputCfg, outputCfgs, ccmEnabled_);\n \tif (ret < 0)\n \t\treturn ret;\n \n@@ -296,13 +296,13 @@ int SoftwareIsp::configure(const StreamConfiguration &inputCfg,\n int SoftwareIsp::exportBuffers(const Stream *stream, unsigned int count,\n \t\t\t std::vector<std::unique_ptr<FrameBuffer>> *buffers)\n {\n-\tASSERT(debayer_ != nullptr);\n+\tASSERT(pipeline_ != nullptr);\n \n \t/* single output for now */\n \tif (stream == nullptr)\n \t\treturn -EINVAL;\n \n-\treturn dmaHeap_.exportBuffers(count, { debayer_->frameSize() }, buffers);\n+\treturn dmaHeap_.exportBuffers(count, { pipeline_->frameSize() }, buffers);\n }\n \n /**\n@@ -364,8 +364,8 @@ int SoftwareIsp::start()\n \n \tispWorkerThread_.start();\n \n-\treturn debayer_->invokeMethod(&Debayer::start,\n-\t\t\t\t ConnectionTypeBlocking);\n+\treturn pipeline_->invokeMethod(&SoftwareIspPipeline::start,\n+\t\t\t\t ConnectionTypeBlocking);\n }\n \n /**\n@@ -376,8 +376,8 @@ int SoftwareIsp::start()\n */\n void SoftwareIsp::stop()\n {\n-\tdebayer_->invokeMethod(&Debayer::stop,\n-\t\t\t ConnectionTypeBlocking);\n+\tpipeline_->invokeMethod(&SoftwareIspPipeline::stop,\n+\t\t\t ConnectionTypeBlocking);\n \n \tispWorkerThread_.exit();\n \tispWorkerThread_.wait();\n@@ -410,8 +410,8 @@ void SoftwareIsp::stop()\n void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output)\n {\n \tipa_->computeParams(frame);\n-\tdebayer_->invokeMethod(&Debayer::process,\n-\t\t\t ConnectionTypeQueued, frame, input, output, debayerParams_);\n+\tpipeline_->invokeMethod(&SoftwareIspPipeline::process,\n+\t\t\t ConnectionTypeQueued, frame, input, output, debayerParams_);\n }\n \n void SoftwareIsp::saveIspParams()\ndiff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/software_isp_pipeline.cpp\nsimilarity index 73%\nrename from src/libcamera/software_isp/debayer.cpp\nrename to src/libcamera/software_isp/software_isp_pipeline.cpp\nindex 2d7abfb83..85fd4b120 100644\n--- a/src/libcamera/software_isp/debayer.cpp\n+++ b/src/libcamera/software_isp/software_isp_pipeline.cpp\n@@ -6,10 +6,10 @@\n * Authors:\n * Hans de Goede <hdegoede@redhat.com>\n *\n- * debayer base class\n+ * SoftwareIspPipeline base class\n */\n \n-#include \"debayer.h\"\n+#include \"software_isp_pipeline.h\"\n \n namespace libcamera {\n \n@@ -44,7 +44,7 @@ namespace libcamera {\n */\n \n /**\n- * \\class Debayer\n+ * \\class SoftwareIspPipeline\n * \\brief Base debayering class\n *\n * Base class that provides functions for setting up the debayering process.\n@@ -56,17 +56,16 @@ LOG_DEFINE_CATEGORY(Debayer)\n * \\brief Construct a Debayer object\n * \\param[in] cm The camera manager\n */\n-Debayer::Debayer(const CameraManager &cm)\n+SoftwareIspPipeline::SoftwareIspPipeline(const CameraManager &cm)\n \t: bench_(cm, \"Debayer\")\n {\n }\n-\n-Debayer::~Debayer()\n+SoftwareIspPipeline::~SoftwareIspPipeline()\n {\n }\n \n /**\n- * \\fn int Debayer::configure()\n+ * \\fn int SoftwareIspPipeline::configure()\n * \\brief Configure the debayer object according to the passed in parameters\n * \\param[in] inputCfg The input configuration\n * \\param[in] outputCfgs The output configurations\n@@ -76,7 +75,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn Size Debayer::patternSize(PixelFormat inputFormat)\n+ * \\fn Size SoftwareIspPipeline::patternSize(PixelFormat inputFormat)\n * \\brief Get the width and height at which the bayer pattern repeats\n * \\param[in] inputFormat The input format\n *\n@@ -86,7 +85,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn std::vector<PixelFormat> Debayer::formats(PixelFormat inputFormat)\n+ * \\fn std::vector<PixelFormat> SoftwareIspPipeline::formats(PixelFormat inputFormat)\n * \\brief Get the supported output formats\n * \\param[in] inputFormat The input format\n *\n@@ -94,7 +93,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn std::tuple<unsigned int, unsigned int> Debayer::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)\n+ * \\fn std::tuple<unsigned int, unsigned int> SoftwareIspPipeline::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)\n * \\brief Get the stride and the frame size\n * \\param[in] outputFormat The output format\n * \\param[in] size The output size\n@@ -104,7 +103,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn void Debayer::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n+ * \\fn void SoftwareIspPipeline::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)\n * \\brief Process the bayer data into the requested format\n * \\param[in] frame The frame number\n * \\param[in] input The input buffer\n@@ -116,7 +115,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn virtual SizeRange Debayer::sizes(PixelFormat inputFormat, const Size &inputSize)\n+ * \\fn virtual SizeRange SoftwareIspPipeline::sizes(PixelFormat inputFormat, const Size &inputSize)\n * \\brief Get the supported output sizes for the given input format and size\n * \\param[in] inputFormat The input format\n * \\param[in] inputSize The input size\n@@ -125,7 +124,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn const SharedFD &Debayer::getStatsFD()\n+ * \\fn const SharedFD &SoftwareIspPipeline::getStatsFD()\n * \\brief Get the file descriptor for the statistics\n *\n * This file descriptor provides access to the output statistics buffer\n@@ -135,7 +134,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn unsigned int Debayer::frameSize()\n+ * \\fn unsigned int SoftwareIspPipeline::frameSize()\n * \\brief Get the output frame size\n *\n * \\return The total output frame size in bytes as configured for the\n@@ -143,17 +142,17 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\var Signal<FrameBuffer *> Debayer::inputBufferReady\n+ * \\var Signal<FrameBuffer *> SoftwareIspPipeline::inputBufferReady\n * \\brief Signals when the input buffer is ready\n */\n \n /**\n- * \\var Signal<FrameBuffer *> Debayer::outputBufferReady\n+ * \\var Signal<FrameBuffer *> SoftwareIspPipeline::outputBufferReady\n * \\brief Signals when the output buffer is ready\n */\n \n /**\n- * \\struct Debayer::DebayerInputConfig\n+ * \\struct SoftwareIspPipeline::DebayerInputConfig\n * \\brief Structure describing the incoming Bayer parameters\n *\n * The DebayerInputConfig structure defines the characteristics of the raw\n@@ -162,40 +161,40 @@ Debayer::~Debayer()\n * - Memory layout parameters such as stride and bytes per pixel (\\ref bpp)\n * - A list of supported output pixel formats.\n *\n- * \\var Debayer::DebayerInputConfig::patternSize\n+ * \\var SoftwareIspPipeline::DebayerInputConfig::patternSize\n * Size of the Bayer pattern in pixels. For standard Bayer formats such as\n * BGGR, GRBG, GBRG, and RGGB, this is typically 2×2 pixels.\n *\n- * \\var Debayer::DebayerInputConfig::bpp\n+ * \\var SoftwareIspPipeline::DebayerInputConfig::bpp\n * Number of bytes used per pixel in memory. This reflects storage size,\n * not precision.\n *\n- * \\var Debayer::DebayerInputConfig::stride\n+ * \\var SoftwareIspPipeline::DebayerInputConfig::stride\n * Line stride in bytes for the Bayer input frame.\n *\n- * \\var Debayer::DebayerInputConfig::outputFormats\n+ * \\var SoftwareIspPipeline::DebayerInputConfig::outputFormats\n * List of pixel formats supported as output for this input configuration.\n */\n \n /**\n- * \\struct Debayer::DebayerOutputConfig\n+ * \\struct SoftwareIspPipeline::DebayerOutputConfig\n * \\brief Structure describing the output frame configuration\n *\n * Defines how the output of the debayer process is laid out in memory.\n * It includes per-pixel size, stride, and total frame size.\n *\n- * \\var Debayer::DebayerOutputConfig::bpp\n+ * \\var SoftwareIspPipeline::DebayerOutputConfig::bpp\n * Bytes used per pixel in the output format.\n *\n- * \\var Debayer::DebayerOutputConfig::stride\n+ * \\var SoftwareIspPipeline::DebayerOutputConfig::stride\n * Line stride in bytes for the output frame.\n *\n- * \\var Debayer::DebayerOutputConfig::frameSize\n+ * \\var SoftwareIspPipeline::DebayerOutputConfig::frameSize\n * Total frame size in bytes for the output buffer.\n */\n \n /**\n- * \\var Debayer::inputConfig_\n+ * \\var SoftwareIspPipeline::inputConfig_\n * \\brief Input configuration parameters for the current debayer operation\n *\n * Holds metadata describing the incoming Bayer image layout, including\n@@ -204,7 +203,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\var Debayer::outputConfig_\n+ * \\var SoftwareIspPipeline::outputConfig_\n * \\brief Output configuration data for the debayered frame\n *\n * Contains bytes per pixel, stride, and total frame size for the\n@@ -212,22 +211,22 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\var Debayer::inputPixelFormat_\n+ * \\var SoftwareIspPipeline::inputPixelFormat_\n * \\brief The incoming pixel format\n */\n \n /**\n- * \\var Debayer::outputPixelFormat_\n+ * \\var SoftwareIspPipeline::outputPixelFormat_\n * \\brief The output pixel format\n */\n \n /**\n- * \\var Debayer::outputSize_\n+ * \\var SoftwareIspPipeline::outputSize_\n * \\brief Output size object\n */\n \n /**\n- * \\var Debayer::swapRedBlueGains_\n+ * \\var SoftwareIspPipeline::swapRedBlueGains_\n * \\brief Flag indicating whether red and blue channel gains should be swapped\n *\n * Used when the Bayer pattern order indicates that red/blue color channels are\n@@ -235,7 +234,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\var Debayer::bench_\n+ * \\var SoftwareIspPipeline::bench_\n * \\brief Benchmarking utility instance for performance measurements\n *\n * Used internally to track timing and performance metrics during\n@@ -243,7 +242,7 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn int Debayer::start()\n+ * \\fn int SoftwareIspPipeline::start()\n * \\brief Execute a start signal in the debayer object from workerthread context\n *\n * The start() method is invoked so that a Debayer object can initialise\n@@ -255,11 +254,11 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn void Debayer::stop()\n+ * \\fn void SoftwareIspPipeline::stop()\n * \\brief Stop the debayering process and perform cleanup\n *\n * The stop() method is invoked as the logically corollary of start().\n- * Debayer::stop() will be called by software_isp::stop() allowing for any\n+ * SoftwareIspPipeline::stop() will be called by software_isp::stop() allowing for any\n * cleanup which should happend with stop().\n *\n * The stop method similar to start() is useful for DebayerEGL as it allows\n@@ -268,10 +267,10 @@ Debayer::~Debayer()\n */\n \n /**\n- * \\fn void Debayer::dmaSyncBegin(DebayerParams ¶ms)\n+ * \\fn void SoftwareIspPipeline::dmaSyncBegin(DebayerParams ¶ms)\n * \\brief Common CPU/GPU Dma Sync Buffer begin\n */\n-void Debayer::dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *input, FrameBuffer *output)\n+void SoftwareIspPipeline::dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *input, FrameBuffer *output)\n {\n \tfor (const FrameBuffer::Plane &plane : input->planes())\n \t\tdmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Read);\n@@ -283,10 +282,10 @@ void Debayer::dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *inpu\n }\n \n /**\n- * \\fn void Debayer::isStandardBayerOrder(BayerFormat::Order order)\n+ * \\fn void SoftwareIspPipeline::isStandardBayerOrder(BayerFormat::Order order)\n * \\brief Common method to validate standard 2x2 Bayer pattern of 2 Green, 1 Blue, 1 Red pixels\n */\n-bool Debayer::isStandardBayerOrder(BayerFormat::Order order)\n+bool SoftwareIspPipeline::isStandardBayerOrder(BayerFormat::Order order)\n {\n \treturn order == BayerFormat::BGGR || order == BayerFormat::GBRG ||\n \t order == BayerFormat::GRBG || order == BayerFormat::RGGB;\ndiff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/software_isp_pipeline.h\nsimilarity index 93%\nrename from src/libcamera/software_isp/debayer.h\nrename to src/libcamera/software_isp/software_isp_pipeline.h\nindex a2a17ec18..63b7dddd7 100644\n--- a/src/libcamera/software_isp/debayer.h\n+++ b/src/libcamera/software_isp/software_isp_pipeline.h\n@@ -6,7 +6,7 @@\n * Authors:\n * Hans de Goede <hdegoede@redhat.com>\n *\n- * debayering base class\n+ * SoftwareIspPipeline base class\n */\n \n #pragma once\n@@ -32,11 +32,11 @@ class FrameBuffer;\n \n LOG_DECLARE_CATEGORY(Debayer)\n \n-class Debayer : public Object\n+class SoftwareIspPipeline : public Object\n {\n public:\n-\tDebayer(const CameraManager &cm);\n-\tvirtual ~Debayer() = 0;\n+\tSoftwareIspPipeline(const CameraManager &cm);\n+\tvirtual ~SoftwareIspPipeline() = 0;\n \n \tvirtual int configure(const StreamConfiguration &inputCfg,\n \t\t\t const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,\ndiff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/software_isp_pipeline_cpu.cpp\nsimilarity index 84%\nrename from src/libcamera/software_isp/debayer_cpu.cpp\nrename to src/libcamera/software_isp/software_isp_pipeline_cpu.cpp\nindex d2596d32b..affe4f180 100644\n--- a/src/libcamera/software_isp/debayer_cpu.cpp\n+++ b/src/libcamera/software_isp/software_isp_pipeline_cpu.cpp\n@@ -9,7 +9,7 @@\n * CPU based debayering class\n */\n \n-#include \"debayer_cpu.h\"\n+#include \"software_isp_pipeline_cpu.h\"\n \n #include <algorithm>\n #include <stdlib.h>\n@@ -38,7 +38,7 @@ namespace libcamera {\n class DebayerCpuThread : public Thread, public Object\n {\n public:\n-\tDebayerCpuThread(DebayerCpu *debayer, unsigned int threadIndex,\n+\tDebayerCpuThread(SoftwareIspPipelineCpu *pipeline, unsigned int threadIndex,\n \t\t\t bool enableInputMemcpy);\n \n \tvoid configure(unsigned int yStart, unsigned int yEnd);\n@@ -54,7 +54,7 @@ private:\n \t/* Max. supported Bayer pattern height is 4, debayering this requires 5 lines */\n \tstatic constexpr unsigned int kMaxLineBuffers = 5;\n \n-\tDebayerCpu *debayer_;\n+\tSoftwareIspPipelineCpu *pipeline_;\n \tunsigned int threadIndex_;\n \tunsigned int yStart_;\n \tunsigned int yEnd_;\n@@ -67,33 +67,33 @@ private:\n \n /**\n * \\brief Construct a DebayerCpuThread object\n- * \\param[in] debayer pointer back to the DebayerCpuObject this thread belongs to\n+ * \\param[in] debayer pointer back to the SoftwareIspPipelineCpu this thread belongs to\n * \\param[in] threadIndex 0 .. n thread-index value for the thread\n * \\param[in] enableInputMemcpy when set copy input data to a heap buffer before use\n */\n-DebayerCpuThread::DebayerCpuThread(DebayerCpu *debayer, unsigned int threadIndex,\n+DebayerCpuThread::DebayerCpuThread(SoftwareIspPipelineCpu *pipeline, unsigned int threadIndex,\n \t\t\t\t bool enableInputMemcpy)\n \t: Thread(\"DebayerCpu:\" + std::to_string(threadIndex)),\n-\t debayer_(debayer), threadIndex_(threadIndex),\n+\t pipeline_(pipeline), threadIndex_(threadIndex),\n \t enableInputMemcpy_(enableInputMemcpy)\n {\n \tmoveToThread(this);\n }\n \n /**\n- * \\class DebayerCpu\n+ * \\class SoftwareIspPipelineCpu\n * \\brief Class for debayering on the CPU\n *\n * Implementation for CPU based debayering\n */\n \n /**\n- * \\brief Constructs a DebayerCpu object\n+ * \\brief Constructs a SoftwareIspPipelineCpu object\n * \\param[in] stats Pointer to the stats object to use\n * \\param[in] cm The camera manager\n */\n-DebayerCpu::DebayerCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)\n-\t: Debayer(cm), stats_(std::move(stats))\n+SoftwareIspPipelineCpu::SoftwareIspPipelineCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)\n+\t: SoftwareIspPipeline(cm), stats_(std::move(stats))\n {\n \t/*\n \t * Reading from uncached buffers may be very slow.\n@@ -121,7 +121,7 @@ DebayerCpu::DebayerCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &c\n \tLOG(Debayer, Debug) << \"Thread count \" << threadCount;\n }\n \n-DebayerCpu::~DebayerCpu() = default;\n+SoftwareIspPipelineCpu::~SoftwareIspPipelineCpu() = default;\n \n #define DECLARE_SRC_POINTERS(pixel_t) \\\n \tconst pixel_t *prev = (const pixel_t *)src[0] + xShift_; \\\n@@ -193,7 +193,7 @@ DebayerCpu::~DebayerCpu() = default;\n \t\tcurr[x] / (div))\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tDECLARE_SRC_POINTERS(uint8_t)\n \n@@ -204,7 +204,7 @@ void DebayerCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tDECLARE_SRC_POINTERS(uint8_t)\n \n@@ -215,7 +215,7 @@ void DebayerCpu::debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tDECLARE_SRC_POINTERS(uint16_t)\n \n@@ -227,7 +227,7 @@ void DebayerCpu::debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tDECLARE_SRC_POINTERS(uint16_t)\n \n@@ -239,7 +239,7 @@ void DebayerCpu::debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tDECLARE_SRC_POINTERS(uint16_t)\n \n@@ -251,7 +251,7 @@ void DebayerCpu::debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tDECLARE_SRC_POINTERS(uint16_t)\n \n@@ -263,7 +263,7 @@ void DebayerCpu::debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tconst int widthInBytes = window_.width * 5 / 4;\n \tconst uint8_t *prev = src[0];\n@@ -289,7 +289,7 @@ void DebayerCpu::debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tconst int widthInBytes = window_.width * 5 / 4;\n \tconst uint8_t *prev = src[0];\n@@ -310,7 +310,7 @@ void DebayerCpu::debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tconst int widthInBytes = window_.width * 5 / 4;\n \tconst uint8_t *prev = src[0];\n@@ -331,7 +331,7 @@ void DebayerCpu::debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tconst int widthInBytes = window_.width * 5 / 4;\n \tconst uint8_t *prev = src[0];\n@@ -352,7 +352,7 @@ void DebayerCpu::debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer12P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer12P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tconst int widthInBytes = window_.width * 3 / 2;\n \tconst uint8_t *prev = src[0];\n@@ -370,7 +370,7 @@ void DebayerCpu::debayer12P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer12P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer12P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tconst int widthInBytes = window_.width * 3 / 2;\n \tconst uint8_t *prev = src[0];\n@@ -388,7 +388,7 @@ void DebayerCpu::debayer12P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer12P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer12P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tconst int widthInBytes = window_.width * 3 / 2;\n \tconst uint8_t *prev = src[0];\n@@ -406,7 +406,7 @@ void DebayerCpu::debayer12P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])\n }\n \n template<bool addAlphaByte, bool ccmEnabled>\n-void DebayerCpu::debayer12P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])\n+void SoftwareIspPipelineCpu::debayer12P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])\n {\n \tconst int widthInBytes = window_.width * 3 / 2;\n \tconst uint8_t *prev = src[0];\n@@ -428,7 +428,7 @@ void DebayerCpu::debayer12P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])\n * Return 0 on success, a negative errno value on failure\n * (unsupported parameters).\n */\n-int DebayerCpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config)\n+int SoftwareIspPipelineCpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config)\n {\n \tBayerFormat bayerFormat =\n \t\tBayerFormat::fromPixelFormat(inputFormat);\n@@ -474,7 +474,7 @@ int DebayerCpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &conf\n \treturn -EINVAL;\n }\n \n-int DebayerCpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config)\n+int SoftwareIspPipelineCpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config)\n {\n \tif (outputFormat == formats::RGB888 || outputFormat == formats::BGR888) {\n \t\tconfig.bpp = 24;\n@@ -496,7 +496,7 @@ int DebayerCpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &c\n * Check for standard Bayer orders and set xShift_ and swap debayer0/1, so that\n * a single pair of BGGR debayer functions can be used for all 4 standard orders.\n */\n-int DebayerCpu::setupStandardBayerOrder(BayerFormat::Order order)\n+int SoftwareIspPipelineCpu::setupStandardBayerOrder(BayerFormat::Order order)\n {\n \tswitch (order) {\n \tcase BayerFormat::BGGR:\n@@ -520,13 +520,13 @@ int DebayerCpu::setupStandardBayerOrder(BayerFormat::Order order)\n \n #define SET_DEBAYER_METHODS(method0, method1) \\\n \tdebayer0_ = addAlphaByte \\\n-\t\t\t ? (ccmEnabled ? &DebayerCpu::method0<true, true> : &DebayerCpu::method0<true, false>) \\\n-\t\t\t : (ccmEnabled ? &DebayerCpu::method0<false, true> : &DebayerCpu::method0<false, false>); \\\n+\t\t\t ? (ccmEnabled ? &SoftwareIspPipelineCpu::method0<true, true> : &SoftwareIspPipelineCpu::method0<true, false>) \\\n+\t\t\t : (ccmEnabled ? &SoftwareIspPipelineCpu::method0<false, true> : &SoftwareIspPipelineCpu::method0<false, false>); \\\n \tdebayer1_ = addAlphaByte \\\n-\t\t\t ? (ccmEnabled ? &DebayerCpu::method1<true, true> : &DebayerCpu::method1<true, false>) \\\n-\t\t\t : (ccmEnabled ? &DebayerCpu::method1<false, true> : &DebayerCpu::method1<false, false>);\n+\t\t\t ? (ccmEnabled ? &SoftwareIspPipelineCpu::method1<true, true> : &SoftwareIspPipelineCpu::method1<true, false>) \\\n+\t\t\t : (ccmEnabled ? &SoftwareIspPipelineCpu::method1<false, true> : &SoftwareIspPipelineCpu::method1<false, false>);\n \n-int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,\n+int SoftwareIspPipelineCpu::setDebayerFunctions(PixelFormat inputFormat,\n \t\t\t\t PixelFormat outputFormat,\n \t\t\t\t bool ccmEnabled)\n {\n@@ -639,9 +639,9 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,\n \treturn invalidFmt();\n }\n \n-int DebayerCpu::configure(const StreamConfiguration &inputCfg,\n-\t\t\t const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,\n-\t\t\t bool ccmEnabled)\n+int SoftwareIspPipelineCpu::configure(const StreamConfiguration &inputCfg,\n+\t\t\t\t const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,\n+\t\t\t\t bool ccmEnabled)\n {\n \tif (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)\n \t\treturn -EINVAL;\n@@ -733,14 +733,14 @@ int DebayerCpu::configure(const StreamConfiguration &inputCfg,\n */\n void DebayerCpuThread::configure(unsigned int yStart, unsigned int yEnd)\n {\n-\tDebayer::DebayerInputConfig &inputConfig = debayer_->inputConfig_;\n+\tSoftwareIspPipelineCpu::DebayerInputConfig &inputConfig = pipeline_->inputConfig_;\n \n \tyStart_ = yStart;\n \tyEnd_ = yEnd;\n \n \t/* pad with patternSize.Width on both left and right side */\n \tlineBufferPadding_ = inputConfig.patternSize.width * inputConfig.bpp / 8;\n-\tlineBufferLength_ = debayer_->window_.width * inputConfig.bpp / 8 +\n+\tlineBufferLength_ = pipeline_->window_.width * inputConfig.bpp / 8 +\n \t\t\t 2 * lineBufferPadding_;\n \n \tif (enableInputMemcpy_) {\n@@ -753,9 +753,9 @@ void DebayerCpuThread::configure(unsigned int yStart, unsigned int yEnd)\n * Get width and height at which the bayer-pattern repeats.\n * Return pattern-size or an empty Size for an unsupported inputFormat.\n */\n-Size DebayerCpu::patternSize(PixelFormat inputFormat)\n+Size SoftwareIspPipelineCpu::patternSize(PixelFormat inputFormat)\n {\n-\tDebayerCpu::DebayerInputConfig config;\n+\tSoftwareIspPipelineCpu::DebayerInputConfig config;\n \n \tif (getInputConfig(inputFormat, config) != 0)\n \t\treturn {};\n@@ -763,9 +763,9 @@ Size DebayerCpu::patternSize(PixelFormat inputFormat)\n \treturn config.patternSize;\n }\n \n-std::vector<PixelFormat> DebayerCpu::formats(PixelFormat inputFormat)\n+std::vector<PixelFormat> SoftwareIspPipelineCpu::formats(PixelFormat inputFormat)\n {\n-\tDebayerCpu::DebayerInputConfig config;\n+\tSoftwareIspPipelineCpu::DebayerInputConfig config;\n \n \tif (getInputConfig(inputFormat, config) != 0)\n \t\treturn std::vector<PixelFormat>();\n@@ -774,9 +774,9 @@ std::vector<PixelFormat> DebayerCpu::formats(PixelFormat inputFormat)\n }\n \n std::tuple<unsigned int, unsigned int>\n-DebayerCpu::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)\n+SoftwareIspPipelineCpu::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)\n {\n-\tDebayerCpu::DebayerOutputConfig config;\n+\tSoftwareIspPipelineCpu::DebayerOutputConfig config;\n \n \tif (getOutputConfig(outputFormat, config) != 0)\n \t\treturn std::make_tuple(0, 0);\n@@ -789,7 +789,7 @@ DebayerCpu::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size\n \n void DebayerCpuThread::setupInputMemcpy(const uint8_t *linePointers[])\n {\n-\tconst unsigned int patternHeight = debayer_->inputConfig_.patternSize.height;\n+\tconst unsigned int patternHeight = pipeline_->inputConfig_.patternSize.height;\n \n \tif (!enableInputMemcpy_)\n \t\treturn;\n@@ -807,18 +807,18 @@ void DebayerCpuThread::setupInputMemcpy(const uint8_t *linePointers[])\n \n void DebayerCpuThread::shiftLinePointers(const uint8_t *linePointers[], const uint8_t *src)\n {\n-\tconst unsigned int patternHeight = debayer_->inputConfig_.patternSize.height;\n+\tconst unsigned int patternHeight = pipeline_->inputConfig_.patternSize.height;\n \n \tfor (unsigned int i = 0; i < patternHeight; i++)\n \t\tlinePointers[i] = linePointers[i + 1];\n \n \tlinePointers[patternHeight] =\n-\t\tsrc + (patternHeight / 2) * (int)debayer_->inputConfig_.stride;\n+\t\tsrc + (patternHeight / 2) * (int)pipeline_->inputConfig_.stride;\n }\n \n void DebayerCpuThread::memcpyNextLine(const uint8_t *linePointers[])\n {\n-\tconst unsigned int patternHeight = debayer_->inputConfig_.patternSize.height;\n+\tconst unsigned int patternHeight = pipeline_->inputConfig_.patternSize.height;\n \n \tif (!enableInputMemcpy_)\n \t\treturn;\n@@ -839,30 +839,30 @@ void DebayerCpuThread::memcpyNextLine(const uint8_t *linePointers[])\n */\n void DebayerCpuThread::process(uint32_t frame, const uint8_t *src, uint8_t *dst)\n {\n-\tRectangle &window = debayer_->window_;\n+\tRectangle &window = pipeline_->window_;\n \n \t/* Adjust src to top left corner of the window */\n-\tsrc += (window.y + yStart_) * debayer_->inputConfig_.stride +\n-\t window.x * debayer_->inputConfig_.bpp / 8;\n+\tsrc += (window.y + yStart_) * pipeline_->inputConfig_.stride +\n+\t window.x * pipeline_->inputConfig_.bpp / 8;\n \t/* Adjust dst for yStart_ */\n-\tdst += yStart_ * debayer_->outputConfig_.stride;\n+\tdst += yStart_ * pipeline_->outputConfig_.stride;\n \n-\tif (debayer_->inputConfig_.patternSize.height == 2)\n+\tif (pipeline_->inputConfig_.patternSize.height == 2)\n \t\tprocess2(frame, src, dst);\n \telse\n \t\tprocess4(frame, src, dst);\n \n-\tdebayer_->workPendingMutex_.lock();\n-\tdebayer_->workPending_ &= ~(1 << threadIndex_);\n-\tdebayer_->workPendingMutex_.unlock();\n-\tdebayer_->workPendingCv_.notify_one();\n+\tpipeline_->workPendingMutex_.lock();\n+\tpipeline_->workPending_ &= ~(1 << threadIndex_);\n+\tpipeline_->workPendingMutex_.unlock();\n+\tpipeline_->workPendingCv_.notify_one();\n }\n \n void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst)\n {\n-\tunsigned int outputStride = debayer_->outputConfig_.stride;\n-\tunsigned int inputStride = debayer_->inputConfig_.stride;\n-\tRectangle &window = debayer_->window_;\n+\tunsigned int outputStride = pipeline_->outputConfig_.stride;\n+\tunsigned int inputStride = pipeline_->inputConfig_.stride;\n+\tRectangle &window = pipeline_->window_;\n \tunsigned int yEnd = yEnd_;\n \t/* Holds [0] previous- [1] current- [2] next-line */\n \tconst uint8_t *linePointers[3];\n@@ -895,14 +895,14 @@ void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst\n \tfor (unsigned int y = yStart_; y < yEnd; y += 2) {\n \t\tshiftLinePointers(linePointers, src);\n \t\tmemcpyNextLine(linePointers);\n-\t\tdebayer_->stats_->processLine0(frame, y, linePointers, threadIndex_);\n-\t\tdebayer_->debayer0(dst, linePointers);\n+\t\tpipeline_->stats_->processLine0(frame, y, linePointers, threadIndex_);\n+\t\tpipeline_->debayer0(dst, linePointers);\n \t\tsrc += inputStride;\n \t\tdst += outputStride;\n \n \t\tshiftLinePointers(linePointers, src);\n \t\tmemcpyNextLine(linePointers);\n-\t\tdebayer_->debayer1(dst, linePointers);\n+\t\tpipeline_->debayer1(dst, linePointers);\n \t\tsrc += inputStride;\n \t\tdst += outputStride;\n \t}\n@@ -910,15 +910,15 @@ void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst\n \tif (window.y == 0 && yEnd_ == window.height) {\n \t\tshiftLinePointers(linePointers, src);\n \t\tmemcpyNextLine(linePointers);\n-\t\tdebayer_->stats_->processLine0(frame, yEnd, linePointers, threadIndex_);\n-\t\tdebayer_->debayer0(dst, linePointers);\n+\t\tpipeline_->stats_->processLine0(frame, yEnd, linePointers, threadIndex_);\n+\t\tpipeline_->debayer0(dst, linePointers);\n \t\tsrc += inputStride;\n \t\tdst += outputStride;\n \n \t\tshiftLinePointers(linePointers, src);\n \t\t/* next line may point outside of src, use prev. */\n \t\tlinePointers[2] = linePointers[0];\n-\t\tdebayer_->debayer1(dst, linePointers);\n+\t\tpipeline_->debayer1(dst, linePointers);\n \t\tsrc += inputStride;\n \t\tdst += outputStride;\n \t}\n@@ -926,8 +926,8 @@ void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst\n \n void DebayerCpuThread::process4(uint32_t frame, const uint8_t *src, uint8_t *dst)\n {\n-\tunsigned int outputStride = debayer_->outputConfig_.stride;\n-\tunsigned int inputStride = debayer_->inputConfig_.stride;\n+\tunsigned int outputStride = pipeline_->outputConfig_.stride;\n+\tunsigned int inputStride = pipeline_->inputConfig_.stride;\n \n \t/*\n \t * This holds pointers to [0] 2-lines-up [1] 1-line-up [2] current-line\n@@ -951,33 +951,33 @@ void DebayerCpuThread::process4(uint32_t frame, const uint8_t *src, uint8_t *dst\n \tfor (unsigned int y = yStart_; y < yEnd_; y += 4) {\n \t\tshiftLinePointers(linePointers, src);\n \t\tmemcpyNextLine(linePointers);\n-\t\tdebayer_->stats_->processLine0(frame, y, linePointers, threadIndex_);\n-\t\tdebayer_->debayer0(dst, linePointers);\n+\t\tpipeline_->stats_->processLine0(frame, y, linePointers, threadIndex_);\n+\t\tpipeline_->debayer0(dst, linePointers);\n \t\tsrc += inputStride;\n \t\tdst += outputStride;\n \n \t\tshiftLinePointers(linePointers, src);\n \t\tmemcpyNextLine(linePointers);\n-\t\tdebayer_->debayer1(dst, linePointers);\n+\t\tpipeline_->debayer1(dst, linePointers);\n \t\tsrc += inputStride;\n \t\tdst += outputStride;\n \n \t\tshiftLinePointers(linePointers, src);\n \t\tmemcpyNextLine(linePointers);\n-\t\tdebayer_->stats_->processLine2(frame, y, linePointers, threadIndex_);\n-\t\tdebayer_->debayer2(dst, linePointers);\n+\t\tpipeline_->stats_->processLine2(frame, y, linePointers, threadIndex_);\n+\t\tpipeline_->debayer2(dst, linePointers);\n \t\tsrc += inputStride;\n \t\tdst += outputStride;\n \n \t\tshiftLinePointers(linePointers, src);\n \t\tmemcpyNextLine(linePointers);\n-\t\tdebayer_->debayer3(dst, linePointers);\n+\t\tpipeline_->debayer3(dst, linePointers);\n \t\tsrc += inputStride;\n \t\tdst += outputStride;\n \t}\n }\n \n-void DebayerCpu::updateGammaTable(const DebayerParams ¶ms)\n+void SoftwareIspPipelineCpu::updateGammaTable(const DebayerParams ¶ms)\n {\n \tconst RGB<float> blackLevel = params.blackLevel;\n \t/* Take let's say the green channel black level */\n@@ -1007,7 +1007,7 @@ void DebayerCpu::updateGammaTable(const DebayerParams ¶ms)\n \t\t gammaTable_[blackIndex]);\n }\n \n-void DebayerCpu::updateLookupTables(const DebayerParams ¶ms)\n+void SoftwareIspPipelineCpu::updateLookupTables(const DebayerParams ¶ms)\n {\n \tconst bool gammaUpdateNeeded =\n \t\tparams.gamma != params_.gamma ||\n@@ -1069,7 +1069,7 @@ void DebayerCpu::updateLookupTables(const DebayerParams ¶ms)\n \tparams_ = params;\n }\n \n-void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams ¶ms)\n+void SoftwareIspPipelineCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams ¶ms)\n {\n \tbench_.startFrame();\n \n@@ -1128,7 +1128,7 @@ void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output\n \tinputBufferReady.emit(input);\n }\n \n-int DebayerCpu::start()\n+int SoftwareIspPipelineCpu::start()\n {\n \tfor (auto &thread : threads_)\n \t\tthread->start();\n@@ -1136,7 +1136,7 @@ int DebayerCpu::start()\n \treturn 0;\n }\n \n-void DebayerCpu::stop()\n+void SoftwareIspPipelineCpu::stop()\n {\n \tfor (auto &thread : threads_)\n \t\tthread->exit();\n@@ -1145,7 +1145,7 @@ void DebayerCpu::stop()\n \t\tthread->wait();\n }\n \n-SizeRange DebayerCpu::sizes(PixelFormat inputFormat, const Size &inputSize)\n+SizeRange SoftwareIspPipelineCpu::sizes(PixelFormat inputFormat, const Size &inputSize)\n {\n \tSize patternSize = this->patternSize(inputFormat);\n \tunsigned int borderHeight = patternSize.height;\ndiff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/software_isp_pipeline_cpu.h\nsimilarity index 95%\nrename from src/libcamera/software_isp/debayer_cpu.h\nrename to src/libcamera/software_isp/software_isp_pipeline_cpu.h\nindex 5281c65cb..fee1c979f 100644\n--- a/src/libcamera/software_isp/debayer_cpu.h\n+++ b/src/libcamera/software_isp/software_isp_pipeline_cpu.h\n@@ -24,16 +24,16 @@\n #include \"libcamera/internal/software_isp/debayer_params.h\"\n #include \"libcamera/internal/software_isp/swstats_cpu.h\"\n \n-#include \"debayer.h\"\n+#include \"software_isp_pipeline.h\"\n \n namespace libcamera {\n \n class DebayerCpuThread;\n-class DebayerCpu : public Debayer\n+class SoftwareIspPipelineCpu : public SoftwareIspPipeline\n {\n public:\n-\tDebayerCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);\n-\t~DebayerCpu();\n+\tSoftwareIspPipelineCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);\n+\t~SoftwareIspPipelineCpu();\n \n \tint configure(const StreamConfiguration &inputCfg,\n \t\t const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,\n@@ -79,7 +79,7 @@ private:\n \t * pointers are passed holding: src[0] = 2-lines-up, src[1] = 1-line-up\n \t * src[2] = current-line, src[3] = 1-line-down, src[4] = 2-lines-down.\n \t */\n-\tusing debayerFn = void (DebayerCpu::*)(uint8_t *dst, const uint8_t *src[]);\n+\tusing debayerFn = void (SoftwareIspPipelineCpu::*)(uint8_t *dst, const uint8_t *src[]);\n \n \tvoid debayer0(uint8_t *dst, const uint8_t *src[]) { (this->*debayer0_)(dst, src); }\n \tvoid debayer1(uint8_t *dst, const uint8_t *src[]) { (this->*debayer1_)(dst, src); }\ndiff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp\nsimilarity index 90%\nrename from src/libcamera/software_isp/debayer_egl.cpp\nrename to src/libcamera/software_isp/software_isp_pipeline_gpu.cpp\nindex 8e52b45ae..53bb5e61f 100644\n--- a/src/libcamera/software_isp/debayer_egl.cpp\n+++ b/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp\n@@ -7,7 +7,7 @@\n *\n */\n \n-#include \"debayer_egl.h\"\n+#include \"software_isp_pipeline_gpu.h\"\n \n #include <algorithm>\n #include <assert.h>\n@@ -28,27 +28,28 @@\n namespace libcamera {\n \n /**\n- * \\class DebayerEGL\n+ * \\class SoftwareIspPipelineGpu\n * \\brief Class for debayering using an EGL Shader\n *\n * Implements an EGL shader based debayering solution.\n */\n \n /**\n- * \\brief Construct a DebayerEGL object\n+ * \\fn SoftwareIspPipelineGpu::SoftwareIspPipelineGpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)\n+ * \\brief Construct a SoftwareIspPipelineGpu object\n * \\param[in] stats Statistics processing object\n * \\param[in] cm The camera manager\n */\n-DebayerEGL::DebayerEGL(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)\n-\t: Debayer(cm), stats_(std::move(stats))\n+SoftwareIspPipelineGpu::SoftwareIspPipelineGpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)\n+\t: SoftwareIspPipeline(cm), stats_(std::move(stats))\n {\n }\n \n-DebayerEGL::~DebayerEGL()\n+SoftwareIspPipelineGpu::~SoftwareIspPipelineGpu()\n {\n }\n \n-int DebayerEGL::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config)\n+int SoftwareIspPipelineGpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config)\n {\n \tBayerFormat bayerFormat =\n \t\tBayerFormat::fromPixelFormat(inputFormat);\n@@ -94,7 +95,7 @@ int DebayerEGL::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &conf\n \treturn -EINVAL;\n }\n \n-int DebayerEGL::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config)\n+int SoftwareIspPipelineGpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config)\n {\n \tif (outputFormat == formats::XRGB8888 || outputFormat == formats::ARGB8888 ||\n \t outputFormat == formats::XBGR8888 || outputFormat == formats::ABGR8888) {\n@@ -108,7 +109,7 @@ int DebayerEGL::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &c\n \treturn -EINVAL;\n }\n \n-int DebayerEGL::getShaderVariableLocations(void)\n+int SoftwareIspPipelineGpu::getShaderVariableLocations(void)\n {\n \tattributeVertex_ = glGetAttribLocation(programId_, \"vertexIn\");\n \tattributeTexture_ = glGetAttribLocation(programId_, \"textureIn\");\n@@ -139,7 +140,7 @@ int DebayerEGL::getShaderVariableLocations(void)\n \treturn 0;\n }\n \n-int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputFormat)\n+int SoftwareIspPipelineGpu::initBayerShaders(PixelFormat inputFormat, PixelFormat outputFormat)\n {\n \tstd::vector<std::string> shaderEnv;\n \tunsigned int fragmentShaderDataLen = 0;\n@@ -290,9 +291,9 @@ int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputForm\n \treturn getShaderVariableLocations();\n }\n \n-int DebayerEGL::configure(const StreamConfiguration &inputCfg,\n-\t\t\t const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,\n-\t\t\t [[maybe_unused]] bool ccmEnabled)\n+int SoftwareIspPipelineGpu::configure(const StreamConfiguration &inputCfg,\n+\t\t\t\t const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,\n+\t\t\t\t [[maybe_unused]] bool ccmEnabled)\n {\n \tif (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)\n \t\treturn -EINVAL;\n@@ -353,9 +354,9 @@ int DebayerEGL::configure(const StreamConfiguration &inputCfg,\n \treturn 0;\n }\n \n-Size DebayerEGL::patternSize(PixelFormat inputFormat)\n+Size SoftwareIspPipelineGpu::patternSize(PixelFormat inputFormat)\n {\n-\tDebayerEGL::DebayerInputConfig config;\n+\tSoftwareIspPipelineGpu::DebayerInputConfig config;\n \n \tif (getInputConfig(inputFormat, config) != 0)\n \t\treturn {};\n@@ -363,9 +364,9 @@ Size DebayerEGL::patternSize(PixelFormat inputFormat)\n \treturn config.patternSize;\n }\n \n-std::vector<PixelFormat> DebayerEGL::formats(PixelFormat inputFormat)\n+std::vector<PixelFormat> SoftwareIspPipelineGpu::formats(PixelFormat inputFormat)\n {\n-\tDebayerEGL::DebayerInputConfig config;\n+\tSoftwareIspPipelineGpu::DebayerInputConfig config;\n \n \tif (getInputConfig(inputFormat, config) != 0)\n \t\treturn std::vector<PixelFormat>();\n@@ -374,9 +375,9 @@ std::vector<PixelFormat> DebayerEGL::formats(PixelFormat inputFormat)\n }\n \n std::tuple<unsigned int, unsigned int>\n-DebayerEGL::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)\n+SoftwareIspPipelineGpu::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)\n {\n-\tDebayerEGL::DebayerOutputConfig config;\n+\tSoftwareIspPipelineGpu::DebayerOutputConfig config;\n \n \tif (getOutputConfig(outputFormat, config) != 0)\n \t\treturn std::make_tuple(0, 0);\n@@ -387,7 +388,7 @@ DebayerEGL::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size\n \treturn std::make_tuple(stride, stride * size.height);\n }\n \n-void DebayerEGL::setShaderVariableValues(const DebayerParams ¶ms)\n+void SoftwareIspPipelineGpu::setShaderVariableValues(const DebayerParams ¶ms)\n {\n \t/*\n \t * Raw Bayer 8-bit, and packed raw Bayer 10-bit/12-bit formats\n@@ -510,7 +511,7 @@ void DebayerEGL::setShaderVariableValues(const DebayerParams ¶ms)\n \treturn;\n }\n \n-int DebayerEGL::debayerGPU(FrameBuffer *input, FrameBuffer *output, const DebayerParams ¶ms, std::optional<MappedFrameBuffer> *inMapped, std::optional<DmaSyncer> *inDmaSyncer)\n+int SoftwareIspPipelineGpu::debayerGPU(FrameBuffer *input, FrameBuffer *output, const DebayerParams ¶ms, std::optional<MappedFrameBuffer> *inMapped, std::optional<DmaSyncer> *inDmaSyncer)\n {\n \tbool dmabuf_import_succeeded = false;\n \n@@ -555,7 +556,7 @@ int DebayerEGL::debayerGPU(FrameBuffer *input, FrameBuffer *output, const Debaye\n \treturn 0;\n }\n \n-void DebayerEGL::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams ¶ms)\n+void SoftwareIspPipelineGpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams ¶ms)\n {\n \tbench_.startFrame();\n \n@@ -607,7 +608,7 @@ error:\n \treturn;\n }\n \n-int DebayerEGL::start()\n+int SoftwareIspPipelineGpu::start()\n {\n \tGLint maxTextureImageUnits;\n \n@@ -630,7 +631,7 @@ int DebayerEGL::start()\n \treturn 0;\n }\n \n-void DebayerEGL::stop()\n+void SoftwareIspPipelineGpu::stop()\n {\n \teglImageBayerOut_.reset();\n \teglImageBayerIn_.reset();\n@@ -639,7 +640,7 @@ void DebayerEGL::stop()\n \t\tglDeleteProgram(programId_);\n }\n \n-SizeRange DebayerEGL::sizes(PixelFormat inputFormat, const Size &inputSize)\n+SizeRange SoftwareIspPipelineGpu::sizes(PixelFormat inputFormat, const Size &inputSize)\n {\n \tSize patternSize = this->patternSize(inputFormat);\n \tunsigned int borderHeight = patternSize.height;\ndiff --git a/src/libcamera/software_isp/debayer_egl.h b/src/libcamera/software_isp/software_isp_pipeline_gpu.h\nsimilarity index 93%\nrename from src/libcamera/software_isp/debayer_egl.h\nrename to src/libcamera/software_isp/software_isp_pipeline_gpu.h\nindex 875e7cfc5..eb365d198 100644\n--- a/src/libcamera/software_isp/debayer_egl.h\n+++ b/src/libcamera/software_isp/software_isp_pipeline_gpu.h\n@@ -27,7 +27,7 @@\n #include <EGL/eglext.h>\n #include <GLES3/gl32.h>\n \n-#include \"debayer.h\"\n+#include \"software_isp_pipeline.h\"\n \n namespace libcamera {\n \n@@ -36,11 +36,11 @@ namespace libcamera {\n \n class CameraManager;\n \n-class DebayerEGL : public Debayer\n+class SoftwareIspPipelineGpu : public SoftwareIspPipeline\n {\n public:\n-\tDebayerEGL(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);\n-\t~DebayerEGL();\n+\tSoftwareIspPipelineGpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);\n+\t~SoftwareIspPipelineGpu();\n \n \tint configure(const StreamConfiguration &inputCfg,\n \t\t const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,\n", "prefixes": [ "01/30" ] }