diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h
index 86cb8f8de..f29e478a5 100644
--- a/include/libcamera/internal/software_isp/software_isp.h
+++ b/include/libcamera/internal/software_isp/software_isp.h
@@ -36,9 +36,9 @@
 
 namespace libcamera {
 
-class Debayer;
 class FrameBuffer;
 class PixelFormat;
+class SoftwareIspPipeline;
 class Stream;
 struct StreamConfiguration;
 
@@ -93,7 +93,7 @@ private:
 	void statsReady(uint32_t frame, uint32_t bufferId);
 	void inputReady(FrameBuffer *input);
 	void outputReady(FrameBuffer *output);
-	std::unique_ptr<Debayer> debayer_;
+	std::unique_ptr<SoftwareIspPipeline> pipeline_;
 	Thread ispWorkerThread_;
 	SharedMemObject<DebayerParams> sharedParams_;
 	DebayerParams debayerParams_;
diff --git a/src/libcamera/software_isp/meson.build b/src/libcamera/software_isp/meson.build
index 15f9e4032..51cc6ac3e 100644
--- a/src/libcamera/software_isp/meson.build
+++ b/src/libcamera/software_isp/meson.build
@@ -21,8 +21,8 @@ summary({'SoftISP GPU acceleration' : mesa_works},
 
 libcamera_internal_sources += files([
     'benchmark.cpp',
-    'debayer.cpp',
-    'debayer_cpu.cpp',
+    'software_isp_pipeline.cpp',
+    'software_isp_pipeline_cpu.cpp',
     'software_isp.cpp',
     'swstats_cpu.cpp',
 ])
@@ -31,7 +31,7 @@ if mesa_works
     config_h.set('HAVE_DEBAYER_EGL', 1)
     libcamera_internal_sources += files([
         '../egl.cpp',
-        'debayer_egl.cpp',
+        'software_isp_pipeline_gpu.cpp',
     ])
     libcamera_deps += [
         libegl,
diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
index 781cf02f8..c99d8654c 100644
--- a/src/libcamera/software_isp/software_isp.cpp
+++ b/src/libcamera/software_isp/software_isp.cpp
@@ -27,9 +27,9 @@
 #include "libcamera/internal/framebuffer.h"
 #include "libcamera/internal/software_isp/debayer_params.h"
 
-#include "debayer_cpu.h"
+#include "software_isp_pipeline_cpu.h"
 #if HAVE_DEBAYER_EGL
-#include "debayer_egl.h"
+#include "software_isp_pipeline_gpu.h"
 #endif
 
 /**
@@ -120,20 +120,20 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
 	}
 
 	if (!softISPMode || softISPMode == "gpu")
-		debayer_ = std::make_unique<DebayerEGL>(std::move(stats), cm);
+		pipeline_ = std::make_unique<SoftwareIspPipelineGpu>(std::move(stats), cm);
 
 #endif
-	if (!debayer_)
-		debayer_ = std::make_unique<DebayerCpu>(std::move(stats), cm);
+	if (!pipeline_)
+		pipeline_ = std::make_unique<SoftwareIspPipelineCpu>(std::move(stats), cm);
 
-	debayer_->inputBufferReady.connect(this, &SoftwareIsp::inputReady);
-	debayer_->outputBufferReady.connect(this, &SoftwareIsp::outputReady);
+	pipeline_->inputBufferReady.connect(this, &SoftwareIsp::inputReady);
+	pipeline_->outputBufferReady.connect(this, &SoftwareIsp::outputReady);
 
 	ipa_ = pipe->createIPA<ipa::soft::IPAProxySoft>(0, 0);
 	if (!ipa_) {
 		LOG(SoftwareIsp, Error)
 			<< "Creating IPA for software ISP failed";
-		debayer_.reset();
+		pipeline_.reset();
 		return;
 	}
 
@@ -152,7 +152,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
 	}
 
 	ret = ipa_->init(IPASettings{ ipaTuningFile, sensor->model() },
-			 debayer_->getStatsFD(),
+			 pipeline_->getStatsFD(),
 			 sharedParams_.fd(),
 			 sensorInfo,
 			 sensor->controls(),
@@ -160,7 +160,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
 			 &ccmEnabled_);
 	if (ret) {
 		LOG(SoftwareIsp, Error) << "IPA init failed";
-		debayer_.reset();
+		pipeline_.reset();
 		return;
 	}
 
@@ -171,13 +171,13 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
 				    });
 	ipa_->setSensorControls.connect(this, &SoftwareIsp::setSensorCtrls);
 
-	debayer_->moveToThread(&ispWorkerThread_);
+	pipeline_->moveToThread(&ispWorkerThread_);
 }
 
 SoftwareIsp::~SoftwareIsp()
 {
-	/* make sure to destroy the DebayerCpu before the ispWorkerThread_ is gone */
-	debayer_.reset();
+	/* make sure to destroy the SoftwareIspPipeline before the ispWorkerThread_ is gone */
+	pipeline_.reset();
 }
 
 /**
@@ -212,7 +212,7 @@ void SoftwareIsp::processStats(const uint32_t frame, const uint32_t bufferId,
  */
 bool SoftwareIsp::isValid() const
 {
-	return !!debayer_;
+	return !!pipeline_;
 }
 
 /**
@@ -222,9 +222,9 @@ bool SoftwareIsp::isValid() const
   */
 std::vector<PixelFormat> SoftwareIsp::formats(PixelFormat inputFormat)
 {
-	ASSERT(debayer_);
+	ASSERT(pipeline_);
 
-	return debayer_->formats(inputFormat);
+	return pipeline_->formats(inputFormat);
 }
 
 /**
@@ -235,9 +235,9 @@ std::vector<PixelFormat> SoftwareIsp::formats(PixelFormat inputFormat)
  */
 SizeRange SoftwareIsp::sizes(PixelFormat inputFormat, const Size &inputSize)
 {
-	ASSERT(debayer_);
+	ASSERT(pipeline_);
 
-	return debayer_->sizes(inputFormat, inputSize);
+	return pipeline_->sizes(inputFormat, inputSize);
 }
 
 /**
@@ -250,9 +250,9 @@ SizeRange SoftwareIsp::sizes(PixelFormat inputFormat, const Size &inputSize)
 std::tuple<unsigned int, unsigned int>
 SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
 {
-	ASSERT(debayer_);
+	ASSERT(pipeline_);
 
-	return debayer_->strideAndFrameSize(outputFormat, size);
+	return pipeline_->strideAndFrameSize(outputFormat, size);
 }
 
 /**
@@ -267,13 +267,13 @@ int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
 			   const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
 			   const ipa::soft::IPAConfigInfo &configInfo)
 {
-	ASSERT(ipa_ && debayer_);
+	ASSERT(ipa_ && pipeline_);
 
 	int ret = ipa_->configure(configInfo);
 	if (ret < 0)
 		return ret;
 
-	ret = debayer_->configure(inputCfg, outputCfgs, ccmEnabled_);
+	ret = pipeline_->configure(inputCfg, outputCfgs, ccmEnabled_);
 	if (ret < 0)
 		return ret;
 
@@ -296,13 +296,13 @@ int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
 int SoftwareIsp::exportBuffers(const Stream *stream, unsigned int count,
 			       std::vector<std::unique_ptr<FrameBuffer>> *buffers)
 {
-	ASSERT(debayer_ != nullptr);
+	ASSERT(pipeline_ != nullptr);
 
 	/* single output for now */
 	if (stream == nullptr)
 		return -EINVAL;
 
-	return dmaHeap_.exportBuffers(count, { debayer_->frameSize() }, buffers);
+	return dmaHeap_.exportBuffers(count, { pipeline_->frameSize() }, buffers);
 }
 
 /**
@@ -364,8 +364,8 @@ int SoftwareIsp::start()
 
 	ispWorkerThread_.start();
 
-	return debayer_->invokeMethod(&Debayer::start,
-				      ConnectionTypeBlocking);
+	return pipeline_->invokeMethod(&SoftwareIspPipeline::start,
+				       ConnectionTypeBlocking);
 }
 
 /**
@@ -376,8 +376,8 @@ int SoftwareIsp::start()
  */
 void SoftwareIsp::stop()
 {
-	debayer_->invokeMethod(&Debayer::stop,
-			       ConnectionTypeBlocking);
+	pipeline_->invokeMethod(&SoftwareIspPipeline::stop,
+			        ConnectionTypeBlocking);
 
 	ispWorkerThread_.exit();
 	ispWorkerThread_.wait();
@@ -410,8 +410,8 @@ void SoftwareIsp::stop()
 void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output)
 {
 	ipa_->computeParams(frame);
-	debayer_->invokeMethod(&Debayer::process,
-			       ConnectionTypeQueued, frame, input, output, debayerParams_);
+	pipeline_->invokeMethod(&SoftwareIspPipeline::process,
+			        ConnectionTypeQueued, frame, input, output, debayerParams_);
 }
 
 void SoftwareIsp::saveIspParams()
diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/software_isp_pipeline.cpp
similarity index 73%
rename from src/libcamera/software_isp/debayer.cpp
rename to src/libcamera/software_isp/software_isp_pipeline.cpp
index 2d7abfb83..85fd4b120 100644
--- a/src/libcamera/software_isp/debayer.cpp
+++ b/src/libcamera/software_isp/software_isp_pipeline.cpp
@@ -6,10 +6,10 @@
  * Authors:
  * Hans de Goede <hdegoede@redhat.com>
  *
- * debayer base class
+ * SoftwareIspPipeline base class
  */
 
-#include "debayer.h"
+#include "software_isp_pipeline.h"
 
 namespace libcamera {
 
@@ -44,7 +44,7 @@ namespace libcamera {
  */
 
 /**
- * \class Debayer
+ * \class SoftwareIspPipeline
  * \brief Base debayering class
  *
  * Base class that provides functions for setting up the debayering process.
@@ -56,17 +56,16 @@ LOG_DEFINE_CATEGORY(Debayer)
  * \brief Construct a Debayer object
  * \param[in] cm The camera manager
  */
-Debayer::Debayer(const CameraManager &cm)
+SoftwareIspPipeline::SoftwareIspPipeline(const CameraManager &cm)
 	: bench_(cm, "Debayer")
 {
 }
-
-Debayer::~Debayer()
+SoftwareIspPipeline::~SoftwareIspPipeline()
 {
 }
 
 /**
- * \fn int Debayer::configure()
+ * \fn int SoftwareIspPipeline::configure()
  * \brief Configure the debayer object according to the passed in parameters
  * \param[in] inputCfg The input configuration
  * \param[in] outputCfgs The output configurations
@@ -76,7 +75,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn Size Debayer::patternSize(PixelFormat inputFormat)
+ * \fn Size SoftwareIspPipeline::patternSize(PixelFormat inputFormat)
  * \brief Get the width and height at which the bayer pattern repeats
  * \param[in] inputFormat The input format
  *
@@ -86,7 +85,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn std::vector<PixelFormat> Debayer::formats(PixelFormat inputFormat)
+ * \fn std::vector<PixelFormat> SoftwareIspPipeline::formats(PixelFormat inputFormat)
  * \brief Get the supported output formats
  * \param[in] inputFormat The input format
  *
@@ -94,7 +93,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn std::tuple<unsigned int, unsigned int> Debayer::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
+ * \fn std::tuple<unsigned int, unsigned int> SoftwareIspPipeline::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
  * \brief Get the stride and the frame size
  * \param[in] outputFormat The output format
  * \param[in] size The output size
@@ -104,7 +103,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn void Debayer::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)
+ * \fn void SoftwareIspPipeline::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)
  * \brief Process the bayer data into the requested format
  * \param[in] frame The frame number
  * \param[in] input The input buffer
@@ -116,7 +115,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn virtual SizeRange Debayer::sizes(PixelFormat inputFormat, const Size &inputSize)
+ * \fn virtual SizeRange SoftwareIspPipeline::sizes(PixelFormat inputFormat, const Size &inputSize)
  * \brief Get the supported output sizes for the given input format and size
  * \param[in] inputFormat The input format
  * \param[in] inputSize The input size
@@ -125,7 +124,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn const SharedFD &Debayer::getStatsFD()
+ * \fn const SharedFD &SoftwareIspPipeline::getStatsFD()
  * \brief Get the file descriptor for the statistics
  *
  * This file descriptor provides access to the output statistics buffer
@@ -135,7 +134,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn unsigned int Debayer::frameSize()
+ * \fn unsigned int SoftwareIspPipeline::frameSize()
  * \brief Get the output frame size
  *
  * \return The total output frame size in bytes as configured for the
@@ -143,17 +142,17 @@ Debayer::~Debayer()
  */
 
 /**
- * \var Signal<FrameBuffer *> Debayer::inputBufferReady
+ * \var Signal<FrameBuffer *> SoftwareIspPipeline::inputBufferReady
  * \brief Signals when the input buffer is ready
  */
 
 /**
- * \var Signal<FrameBuffer *> Debayer::outputBufferReady
+ * \var Signal<FrameBuffer *> SoftwareIspPipeline::outputBufferReady
  * \brief Signals when the output buffer is ready
  */
 
 /**
- * \struct Debayer::DebayerInputConfig
+ * \struct SoftwareIspPipeline::DebayerInputConfig
  * \brief Structure describing the incoming Bayer parameters
  *
  * The DebayerInputConfig structure defines the characteristics of the raw
@@ -162,40 +161,40 @@ Debayer::~Debayer()
  *  - Memory layout parameters such as stride and bytes per pixel (\ref bpp)
  *  - A list of supported output pixel formats.
  *
- * \var Debayer::DebayerInputConfig::patternSize
+ * \var SoftwareIspPipeline::DebayerInputConfig::patternSize
  * Size of the Bayer pattern in pixels. For standard Bayer formats such as
  * BGGR, GRBG, GBRG, and RGGB, this is typically 2×2 pixels.
  *
- * \var Debayer::DebayerInputConfig::bpp
+ * \var SoftwareIspPipeline::DebayerInputConfig::bpp
  * Number of bytes used per pixel in memory. This reflects storage size,
  * not precision.
  *
- * \var Debayer::DebayerInputConfig::stride
+ * \var SoftwareIspPipeline::DebayerInputConfig::stride
  * Line stride in bytes for the Bayer input frame.
  *
- * \var Debayer::DebayerInputConfig::outputFormats
+ * \var SoftwareIspPipeline::DebayerInputConfig::outputFormats
  * List of pixel formats supported as output for this input configuration.
  */
 
 /**
- * \struct Debayer::DebayerOutputConfig
+ * \struct SoftwareIspPipeline::DebayerOutputConfig
  * \brief Structure describing the output frame configuration
  *
  * Defines how the output of the debayer process is laid out in memory.
  * It includes per-pixel size, stride, and total frame size.
  *
- * \var Debayer::DebayerOutputConfig::bpp
+ * \var SoftwareIspPipeline::DebayerOutputConfig::bpp
  * Bytes used per pixel in the output format.
  *
- * \var Debayer::DebayerOutputConfig::stride
+ * \var SoftwareIspPipeline::DebayerOutputConfig::stride
  * Line stride in bytes for the output frame.
  *
- * \var Debayer::DebayerOutputConfig::frameSize
+ * \var SoftwareIspPipeline::DebayerOutputConfig::frameSize
  * Total frame size in bytes for the output buffer.
  */
 
 /**
- * \var Debayer::inputConfig_
+ * \var SoftwareIspPipeline::inputConfig_
  * \brief Input configuration parameters for the current debayer operation
  *
  * Holds metadata describing the incoming Bayer image layout, including
@@ -204,7 +203,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \var Debayer::outputConfig_
+ * \var SoftwareIspPipeline::outputConfig_
  * \brief Output configuration data for the debayered frame
  *
  * Contains bytes per pixel, stride, and total frame size for the
@@ -212,22 +211,22 @@ Debayer::~Debayer()
  */
 
 /**
- * \var Debayer::inputPixelFormat_
+ * \var SoftwareIspPipeline::inputPixelFormat_
  * \brief The incoming pixel format
  */
 
 /**
- * \var Debayer::outputPixelFormat_
+ * \var SoftwareIspPipeline::outputPixelFormat_
  * \brief The output pixel format
  */
 
 /**
- * \var Debayer::outputSize_
+ * \var SoftwareIspPipeline::outputSize_
  * \brief Output size object
  */
 
 /**
- * \var Debayer::swapRedBlueGains_
+ * \var SoftwareIspPipeline::swapRedBlueGains_
  * \brief Flag indicating whether red and blue channel gains should be swapped
  *
  * Used when the Bayer pattern order indicates that red/blue color channels are
@@ -235,7 +234,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \var Debayer::bench_
+ * \var SoftwareIspPipeline::bench_
  * \brief Benchmarking utility instance for performance measurements
  *
  * Used internally to track timing and performance metrics during
@@ -243,7 +242,7 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn int Debayer::start()
+ * \fn int SoftwareIspPipeline::start()
  * \brief Execute a start signal in the debayer object from workerthread context
  *
  * The start() method is invoked so that a Debayer object can initialise
@@ -255,11 +254,11 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn void Debayer::stop()
+ * \fn void SoftwareIspPipeline::stop()
  * \brief Stop the debayering process and perform cleanup
  *
  * The stop() method is invoked as the logically corollary of start().
- * Debayer::stop() will be called by software_isp::stop() allowing for any
+ * SoftwareIspPipeline::stop() will be called by software_isp::stop() allowing for any
  * cleanup which should happend with stop().
  *
  * The stop method similar to start() is useful for DebayerEGL as it allows
@@ -268,10 +267,10 @@ Debayer::~Debayer()
  */
 
 /**
- * \fn void Debayer::dmaSyncBegin(DebayerParams &params)
+ * \fn void SoftwareIspPipeline::dmaSyncBegin(DebayerParams &params)
  * \brief Common CPU/GPU Dma Sync Buffer begin
  */
-void Debayer::dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *input, FrameBuffer *output)
+void SoftwareIspPipeline::dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *input, FrameBuffer *output)
 {
 	for (const FrameBuffer::Plane &plane : input->planes())
 		dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Read);
@@ -283,10 +282,10 @@ void Debayer::dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *inpu
 }
 
 /**
- * \fn void Debayer::isStandardBayerOrder(BayerFormat::Order order)
+ * \fn void SoftwareIspPipeline::isStandardBayerOrder(BayerFormat::Order order)
  * \brief Common method to validate standard 2x2 Bayer pattern of 2 Green, 1 Blue, 1 Red pixels
  */
-bool Debayer::isStandardBayerOrder(BayerFormat::Order order)
+bool SoftwareIspPipeline::isStandardBayerOrder(BayerFormat::Order order)
 {
 	return order == BayerFormat::BGGR || order == BayerFormat::GBRG ||
 	       order == BayerFormat::GRBG || order == BayerFormat::RGGB;
diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/software_isp_pipeline.h
similarity index 93%
rename from src/libcamera/software_isp/debayer.h
rename to src/libcamera/software_isp/software_isp_pipeline.h
index a2a17ec18..63b7dddd7 100644
--- a/src/libcamera/software_isp/debayer.h
+++ b/src/libcamera/software_isp/software_isp_pipeline.h
@@ -6,7 +6,7 @@
  * Authors:
  * Hans de Goede <hdegoede@redhat.com>
  *
- * debayering base class
+ * SoftwareIspPipeline base class
  */
 
 #pragma once
@@ -32,11 +32,11 @@ class FrameBuffer;
 
 LOG_DECLARE_CATEGORY(Debayer)
 
-class Debayer : public Object
+class SoftwareIspPipeline : public Object
 {
 public:
-	Debayer(const CameraManager &cm);
-	virtual ~Debayer() = 0;
+	SoftwareIspPipeline(const CameraManager &cm);
+	virtual ~SoftwareIspPipeline() = 0;
 
 	virtual int configure(const StreamConfiguration &inputCfg,
 			      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/software_isp_pipeline_cpu.cpp
similarity index 84%
rename from src/libcamera/software_isp/debayer_cpu.cpp
rename to src/libcamera/software_isp/software_isp_pipeline_cpu.cpp
index d2596d32b..affe4f180 100644
--- a/src/libcamera/software_isp/debayer_cpu.cpp
+++ b/src/libcamera/software_isp/software_isp_pipeline_cpu.cpp
@@ -9,7 +9,7 @@
  * CPU based debayering class
  */
 
-#include "debayer_cpu.h"
+#include "software_isp_pipeline_cpu.h"
 
 #include <algorithm>
 #include <stdlib.h>
@@ -38,7 +38,7 @@ namespace libcamera {
 class DebayerCpuThread : public Thread, public Object
 {
 public:
-	DebayerCpuThread(DebayerCpu *debayer, unsigned int threadIndex,
+	DebayerCpuThread(SoftwareIspPipelineCpu *pipeline, unsigned int threadIndex,
 			 bool enableInputMemcpy);
 
 	void configure(unsigned int yStart, unsigned int yEnd);
@@ -54,7 +54,7 @@ private:
 	/* Max. supported Bayer pattern height is 4, debayering this requires 5 lines */
 	static constexpr unsigned int kMaxLineBuffers = 5;
 
-	DebayerCpu *debayer_;
+	SoftwareIspPipelineCpu *pipeline_;
 	unsigned int threadIndex_;
 	unsigned int yStart_;
 	unsigned int yEnd_;
@@ -67,33 +67,33 @@ private:
 
 /**
  * \brief Construct a DebayerCpuThread object
- * \param[in] debayer pointer back to the DebayerCpuObject this thread belongs to
+ * \param[in] debayer pointer back to the SoftwareIspPipelineCpu this thread belongs to
  * \param[in] threadIndex 0 .. n thread-index value for the thread
  * \param[in] enableInputMemcpy when set copy input data to a heap buffer before use
  */
-DebayerCpuThread::DebayerCpuThread(DebayerCpu *debayer, unsigned int threadIndex,
+DebayerCpuThread::DebayerCpuThread(SoftwareIspPipelineCpu *pipeline, unsigned int threadIndex,
 				   bool enableInputMemcpy)
 	: Thread("DebayerCpu:" + std::to_string(threadIndex)),
-	  debayer_(debayer), threadIndex_(threadIndex),
+	  pipeline_(pipeline), threadIndex_(threadIndex),
 	  enableInputMemcpy_(enableInputMemcpy)
 {
 	moveToThread(this);
 }
 
 /**
- * \class DebayerCpu
+ * \class SoftwareIspPipelineCpu
  * \brief Class for debayering on the CPU
  *
  * Implementation for CPU based debayering
  */
 
 /**
- * \brief Constructs a DebayerCpu object
+ * \brief Constructs a SoftwareIspPipelineCpu object
  * \param[in] stats Pointer to the stats object to use
  * \param[in] cm The camera manager
  */
-DebayerCpu::DebayerCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)
-	: Debayer(cm), stats_(std::move(stats))
+SoftwareIspPipelineCpu::SoftwareIspPipelineCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)
+	: SoftwareIspPipeline(cm), stats_(std::move(stats))
 {
 	/*
 	 * Reading from uncached buffers may be very slow.
@@ -121,7 +121,7 @@ DebayerCpu::DebayerCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &c
 	LOG(Debayer, Debug) << "Thread count " << threadCount;
 }
 
-DebayerCpu::~DebayerCpu() = default;
+SoftwareIspPipelineCpu::~SoftwareIspPipelineCpu() = default;
 
 #define DECLARE_SRC_POINTERS(pixel_t)                            \
 	const pixel_t *prev = (const pixel_t *)src[0] + xShift_; \
@@ -193,7 +193,7 @@ DebayerCpu::~DebayerCpu() = default;
 		curr[x] / (div))
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	DECLARE_SRC_POINTERS(uint8_t)
 
@@ -204,7 +204,7 @@ void DebayerCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	DECLARE_SRC_POINTERS(uint8_t)
 
@@ -215,7 +215,7 @@ void DebayerCpu::debayer8_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	DECLARE_SRC_POINTERS(uint16_t)
 
@@ -227,7 +227,7 @@ void DebayerCpu::debayer10_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	DECLARE_SRC_POINTERS(uint16_t)
 
@@ -239,7 +239,7 @@ void DebayerCpu::debayer10_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	DECLARE_SRC_POINTERS(uint16_t)
 
@@ -251,7 +251,7 @@ void DebayerCpu::debayer12_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	DECLARE_SRC_POINTERS(uint16_t)
 
@@ -263,7 +263,7 @@ void DebayerCpu::debayer12_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	const int widthInBytes = window_.width * 5 / 4;
 	const uint8_t *prev = src[0];
@@ -289,7 +289,7 @@ void DebayerCpu::debayer10P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	const int widthInBytes = window_.width * 5 / 4;
 	const uint8_t *prev = src[0];
@@ -310,7 +310,7 @@ void DebayerCpu::debayer10P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	const int widthInBytes = window_.width * 5 / 4;
 	const uint8_t *prev = src[0];
@@ -331,7 +331,7 @@ void DebayerCpu::debayer10P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	const int widthInBytes = window_.width * 5 / 4;
 	const uint8_t *prev = src[0];
@@ -352,7 +352,7 @@ void DebayerCpu::debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer12P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer12P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	const int widthInBytes = window_.width * 3 / 2;
 	const uint8_t *prev = src[0];
@@ -370,7 +370,7 @@ void DebayerCpu::debayer12P_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer12P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer12P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	const int widthInBytes = window_.width * 3 / 2;
 	const uint8_t *prev = src[0];
@@ -388,7 +388,7 @@ void DebayerCpu::debayer12P_GRGR_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer12P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer12P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	const int widthInBytes = window_.width * 3 / 2;
 	const uint8_t *prev = src[0];
@@ -406,7 +406,7 @@ void DebayerCpu::debayer12P_GBGB_BGR888(uint8_t *dst, const uint8_t *src[])
 }
 
 template<bool addAlphaByte, bool ccmEnabled>
-void DebayerCpu::debayer12P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])
+void SoftwareIspPipelineCpu::debayer12P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])
 {
 	const int widthInBytes = window_.width * 3 / 2;
 	const uint8_t *prev = src[0];
@@ -428,7 +428,7 @@ void DebayerCpu::debayer12P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[])
  * Return 0 on success, a negative errno value on failure
  * (unsupported parameters).
  */
-int DebayerCpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config)
+int SoftwareIspPipelineCpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config)
 {
 	BayerFormat bayerFormat =
 		BayerFormat::fromPixelFormat(inputFormat);
@@ -474,7 +474,7 @@ int DebayerCpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &conf
 	return -EINVAL;
 }
 
-int DebayerCpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config)
+int SoftwareIspPipelineCpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config)
 {
 	if (outputFormat == formats::RGB888 || outputFormat == formats::BGR888) {
 		config.bpp = 24;
@@ -496,7 +496,7 @@ int DebayerCpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &c
  * Check for standard Bayer orders and set xShift_ and swap debayer0/1, so that
  * a single pair of BGGR debayer functions can be used for all 4 standard orders.
  */
-int DebayerCpu::setupStandardBayerOrder(BayerFormat::Order order)
+int SoftwareIspPipelineCpu::setupStandardBayerOrder(BayerFormat::Order order)
 {
 	switch (order) {
 	case BayerFormat::BGGR:
@@ -520,13 +520,13 @@ int DebayerCpu::setupStandardBayerOrder(BayerFormat::Order order)
 
 #define SET_DEBAYER_METHODS(method0, method1)                                                                        \
 	debayer0_ = addAlphaByte                                                                                     \
-			    ? (ccmEnabled ? &DebayerCpu::method0<true, true> : &DebayerCpu::method0<true, false>)    \
-			    : (ccmEnabled ? &DebayerCpu::method0<false, true> : &DebayerCpu::method0<false, false>); \
+			    ? (ccmEnabled ? &SoftwareIspPipelineCpu::method0<true, true> : &SoftwareIspPipelineCpu::method0<true, false>)    \
+			    : (ccmEnabled ? &SoftwareIspPipelineCpu::method0<false, true> : &SoftwareIspPipelineCpu::method0<false, false>); \
 	debayer1_ = addAlphaByte                                                                                     \
-			    ? (ccmEnabled ? &DebayerCpu::method1<true, true> : &DebayerCpu::method1<true, false>)    \
-			    : (ccmEnabled ? &DebayerCpu::method1<false, true> : &DebayerCpu::method1<false, false>);
+			    ? (ccmEnabled ? &SoftwareIspPipelineCpu::method1<true, true> : &SoftwareIspPipelineCpu::method1<true, false>)    \
+			    : (ccmEnabled ? &SoftwareIspPipelineCpu::method1<false, true> : &SoftwareIspPipelineCpu::method1<false, false>);
 
-int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,
+int SoftwareIspPipelineCpu::setDebayerFunctions(PixelFormat inputFormat,
 				    PixelFormat outputFormat,
 				    bool ccmEnabled)
 {
@@ -639,9 +639,9 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat,
 	return invalidFmt();
 }
 
-int DebayerCpu::configure(const StreamConfiguration &inputCfg,
-			  const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
-			  bool ccmEnabled)
+int SoftwareIspPipelineCpu::configure(const StreamConfiguration &inputCfg,
+				      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
+				      bool ccmEnabled)
 {
 	if (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)
 		return -EINVAL;
@@ -733,14 +733,14 @@ int DebayerCpu::configure(const StreamConfiguration &inputCfg,
  */
 void DebayerCpuThread::configure(unsigned int yStart, unsigned int yEnd)
 {
-	Debayer::DebayerInputConfig &inputConfig = debayer_->inputConfig_;
+	SoftwareIspPipelineCpu::DebayerInputConfig &inputConfig = pipeline_->inputConfig_;
 
 	yStart_ = yStart;
 	yEnd_ = yEnd;
 
 	/* pad with patternSize.Width on both left and right side */
 	lineBufferPadding_ = inputConfig.patternSize.width * inputConfig.bpp / 8;
-	lineBufferLength_ = debayer_->window_.width * inputConfig.bpp / 8 +
+	lineBufferLength_ = pipeline_->window_.width * inputConfig.bpp / 8 +
 			    2 * lineBufferPadding_;
 
 	if (enableInputMemcpy_) {
@@ -753,9 +753,9 @@ void DebayerCpuThread::configure(unsigned int yStart, unsigned int yEnd)
  * Get width and height at which the bayer-pattern repeats.
  * Return pattern-size or an empty Size for an unsupported inputFormat.
  */
-Size DebayerCpu::patternSize(PixelFormat inputFormat)
+Size SoftwareIspPipelineCpu::patternSize(PixelFormat inputFormat)
 {
-	DebayerCpu::DebayerInputConfig config;
+	SoftwareIspPipelineCpu::DebayerInputConfig config;
 
 	if (getInputConfig(inputFormat, config) != 0)
 		return {};
@@ -763,9 +763,9 @@ Size DebayerCpu::patternSize(PixelFormat inputFormat)
 	return config.patternSize;
 }
 
-std::vector<PixelFormat> DebayerCpu::formats(PixelFormat inputFormat)
+std::vector<PixelFormat> SoftwareIspPipelineCpu::formats(PixelFormat inputFormat)
 {
-	DebayerCpu::DebayerInputConfig config;
+	SoftwareIspPipelineCpu::DebayerInputConfig config;
 
 	if (getInputConfig(inputFormat, config) != 0)
 		return std::vector<PixelFormat>();
@@ -774,9 +774,9 @@ std::vector<PixelFormat> DebayerCpu::formats(PixelFormat inputFormat)
 }
 
 std::tuple<unsigned int, unsigned int>
-DebayerCpu::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
+SoftwareIspPipelineCpu::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
 {
-	DebayerCpu::DebayerOutputConfig config;
+	SoftwareIspPipelineCpu::DebayerOutputConfig config;
 
 	if (getOutputConfig(outputFormat, config) != 0)
 		return std::make_tuple(0, 0);
@@ -789,7 +789,7 @@ DebayerCpu::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size
 
 void DebayerCpuThread::setupInputMemcpy(const uint8_t *linePointers[])
 {
-	const unsigned int patternHeight = debayer_->inputConfig_.patternSize.height;
+	const unsigned int patternHeight = pipeline_->inputConfig_.patternSize.height;
 
 	if (!enableInputMemcpy_)
 		return;
@@ -807,18 +807,18 @@ void DebayerCpuThread::setupInputMemcpy(const uint8_t *linePointers[])
 
 void DebayerCpuThread::shiftLinePointers(const uint8_t *linePointers[], const uint8_t *src)
 {
-	const unsigned int patternHeight = debayer_->inputConfig_.patternSize.height;
+	const unsigned int patternHeight = pipeline_->inputConfig_.patternSize.height;
 
 	for (unsigned int i = 0; i < patternHeight; i++)
 		linePointers[i] = linePointers[i + 1];
 
 	linePointers[patternHeight] =
-		src + (patternHeight / 2) * (int)debayer_->inputConfig_.stride;
+		src + (patternHeight / 2) * (int)pipeline_->inputConfig_.stride;
 }
 
 void DebayerCpuThread::memcpyNextLine(const uint8_t *linePointers[])
 {
-	const unsigned int patternHeight = debayer_->inputConfig_.patternSize.height;
+	const unsigned int patternHeight = pipeline_->inputConfig_.patternSize.height;
 
 	if (!enableInputMemcpy_)
 		return;
@@ -839,30 +839,30 @@ void DebayerCpuThread::memcpyNextLine(const uint8_t *linePointers[])
  */
 void DebayerCpuThread::process(uint32_t frame, const uint8_t *src, uint8_t *dst)
 {
-	Rectangle &window = debayer_->window_;
+	Rectangle &window = pipeline_->window_;
 
 	/* Adjust src to top left corner of the window */
-	src += (window.y + yStart_) * debayer_->inputConfig_.stride +
-	       window.x * debayer_->inputConfig_.bpp / 8;
+	src += (window.y + yStart_) * pipeline_->inputConfig_.stride +
+	       window.x * pipeline_->inputConfig_.bpp / 8;
 	/* Adjust dst for yStart_ */
-	dst += yStart_ * debayer_->outputConfig_.stride;
+	dst += yStart_ * pipeline_->outputConfig_.stride;
 
-	if (debayer_->inputConfig_.patternSize.height == 2)
+	if (pipeline_->inputConfig_.patternSize.height == 2)
 		process2(frame, src, dst);
 	else
 		process4(frame, src, dst);
 
-	debayer_->workPendingMutex_.lock();
-	debayer_->workPending_ &= ~(1 << threadIndex_);
-	debayer_->workPendingMutex_.unlock();
-	debayer_->workPendingCv_.notify_one();
+	pipeline_->workPendingMutex_.lock();
+	pipeline_->workPending_ &= ~(1 << threadIndex_);
+	pipeline_->workPendingMutex_.unlock();
+	pipeline_->workPendingCv_.notify_one();
 }
 
 void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst)
 {
-	unsigned int outputStride = debayer_->outputConfig_.stride;
-	unsigned int inputStride = debayer_->inputConfig_.stride;
-	Rectangle &window = debayer_->window_;
+	unsigned int outputStride = pipeline_->outputConfig_.stride;
+	unsigned int inputStride = pipeline_->inputConfig_.stride;
+	Rectangle &window = pipeline_->window_;
 	unsigned int yEnd = yEnd_;
 	/* Holds [0] previous- [1] current- [2] next-line */
 	const uint8_t *linePointers[3];
@@ -895,14 +895,14 @@ void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst
 	for (unsigned int y = yStart_; y < yEnd; y += 2) {
 		shiftLinePointers(linePointers, src);
 		memcpyNextLine(linePointers);
-		debayer_->stats_->processLine0(frame, y, linePointers, threadIndex_);
-		debayer_->debayer0(dst, linePointers);
+		pipeline_->stats_->processLine0(frame, y, linePointers, threadIndex_);
+		pipeline_->debayer0(dst, linePointers);
 		src += inputStride;
 		dst += outputStride;
 
 		shiftLinePointers(linePointers, src);
 		memcpyNextLine(linePointers);
-		debayer_->debayer1(dst, linePointers);
+		pipeline_->debayer1(dst, linePointers);
 		src += inputStride;
 		dst += outputStride;
 	}
@@ -910,15 +910,15 @@ void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst
 	if (window.y == 0 && yEnd_ == window.height) {
 		shiftLinePointers(linePointers, src);
 		memcpyNextLine(linePointers);
-		debayer_->stats_->processLine0(frame, yEnd, linePointers, threadIndex_);
-		debayer_->debayer0(dst, linePointers);
+		pipeline_->stats_->processLine0(frame, yEnd, linePointers, threadIndex_);
+		pipeline_->debayer0(dst, linePointers);
 		src += inputStride;
 		dst += outputStride;
 
 		shiftLinePointers(linePointers, src);
 		/* next line may point outside of src, use prev. */
 		linePointers[2] = linePointers[0];
-		debayer_->debayer1(dst, linePointers);
+		pipeline_->debayer1(dst, linePointers);
 		src += inputStride;
 		dst += outputStride;
 	}
@@ -926,8 +926,8 @@ void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst
 
 void DebayerCpuThread::process4(uint32_t frame, const uint8_t *src, uint8_t *dst)
 {
-	unsigned int outputStride = debayer_->outputConfig_.stride;
-	unsigned int inputStride = debayer_->inputConfig_.stride;
+	unsigned int outputStride = pipeline_->outputConfig_.stride;
+	unsigned int inputStride = pipeline_->inputConfig_.stride;
 
 	/*
 	 * This holds pointers to [0] 2-lines-up [1] 1-line-up [2] current-line
@@ -951,33 +951,33 @@ void DebayerCpuThread::process4(uint32_t frame, const uint8_t *src, uint8_t *dst
 	for (unsigned int y = yStart_; y < yEnd_; y += 4) {
 		shiftLinePointers(linePointers, src);
 		memcpyNextLine(linePointers);
-		debayer_->stats_->processLine0(frame, y, linePointers, threadIndex_);
-		debayer_->debayer0(dst, linePointers);
+		pipeline_->stats_->processLine0(frame, y, linePointers, threadIndex_);
+		pipeline_->debayer0(dst, linePointers);
 		src += inputStride;
 		dst += outputStride;
 
 		shiftLinePointers(linePointers, src);
 		memcpyNextLine(linePointers);
-		debayer_->debayer1(dst, linePointers);
+		pipeline_->debayer1(dst, linePointers);
 		src += inputStride;
 		dst += outputStride;
 
 		shiftLinePointers(linePointers, src);
 		memcpyNextLine(linePointers);
-		debayer_->stats_->processLine2(frame, y, linePointers, threadIndex_);
-		debayer_->debayer2(dst, linePointers);
+		pipeline_->stats_->processLine2(frame, y, linePointers, threadIndex_);
+		pipeline_->debayer2(dst, linePointers);
 		src += inputStride;
 		dst += outputStride;
 
 		shiftLinePointers(linePointers, src);
 		memcpyNextLine(linePointers);
-		debayer_->debayer3(dst, linePointers);
+		pipeline_->debayer3(dst, linePointers);
 		src += inputStride;
 		dst += outputStride;
 	}
 }
 
-void DebayerCpu::updateGammaTable(const DebayerParams &params)
+void SoftwareIspPipelineCpu::updateGammaTable(const DebayerParams &params)
 {
 	const RGB<float> blackLevel = params.blackLevel;
 	/* Take let's say the green channel black level */
@@ -1007,7 +1007,7 @@ void DebayerCpu::updateGammaTable(const DebayerParams &params)
 		  gammaTable_[blackIndex]);
 }
 
-void DebayerCpu::updateLookupTables(const DebayerParams &params)
+void SoftwareIspPipelineCpu::updateLookupTables(const DebayerParams &params)
 {
 	const bool gammaUpdateNeeded =
 		params.gamma != params_.gamma ||
@@ -1069,7 +1069,7 @@ void DebayerCpu::updateLookupTables(const DebayerParams &params)
 	params_ = params;
 }
 
-void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams &params)
+void SoftwareIspPipelineCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams &params)
 {
 	bench_.startFrame();
 
@@ -1128,7 +1128,7 @@ void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output
 	inputBufferReady.emit(input);
 }
 
-int DebayerCpu::start()
+int SoftwareIspPipelineCpu::start()
 {
 	for (auto &thread : threads_)
 		thread->start();
@@ -1136,7 +1136,7 @@ int DebayerCpu::start()
 	return 0;
 }
 
-void DebayerCpu::stop()
+void SoftwareIspPipelineCpu::stop()
 {
 	for (auto &thread : threads_)
 		thread->exit();
@@ -1145,7 +1145,7 @@ void DebayerCpu::stop()
 		thread->wait();
 }
 
-SizeRange DebayerCpu::sizes(PixelFormat inputFormat, const Size &inputSize)
+SizeRange SoftwareIspPipelineCpu::sizes(PixelFormat inputFormat, const Size &inputSize)
 {
 	Size patternSize = this->patternSize(inputFormat);
 	unsigned int borderHeight = patternSize.height;
diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/software_isp_pipeline_cpu.h
similarity index 95%
rename from src/libcamera/software_isp/debayer_cpu.h
rename to src/libcamera/software_isp/software_isp_pipeline_cpu.h
index 5281c65cb..fee1c979f 100644
--- a/src/libcamera/software_isp/debayer_cpu.h
+++ b/src/libcamera/software_isp/software_isp_pipeline_cpu.h
@@ -24,16 +24,16 @@
 #include "libcamera/internal/software_isp/debayer_params.h"
 #include "libcamera/internal/software_isp/swstats_cpu.h"
 
-#include "debayer.h"
+#include "software_isp_pipeline.h"
 
 namespace libcamera {
 
 class DebayerCpuThread;
-class DebayerCpu : public Debayer
+class SoftwareIspPipelineCpu : public SoftwareIspPipeline
 {
 public:
-	DebayerCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);
-	~DebayerCpu();
+	SoftwareIspPipelineCpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);
+	~SoftwareIspPipelineCpu();
 
 	int configure(const StreamConfiguration &inputCfg,
 		      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
@@ -79,7 +79,7 @@ private:
 	 * pointers are passed holding: src[0] = 2-lines-up, src[1] = 1-line-up
 	 * src[2] = current-line, src[3] = 1-line-down, src[4] = 2-lines-down.
 	 */
-	using debayerFn = void (DebayerCpu::*)(uint8_t *dst, const uint8_t *src[]);
+	using debayerFn = void (SoftwareIspPipelineCpu::*)(uint8_t *dst, const uint8_t *src[]);
 
 	void debayer0(uint8_t *dst, const uint8_t *src[]) { (this->*debayer0_)(dst, src); }
 	void debayer1(uint8_t *dst, const uint8_t *src[]) { (this->*debayer1_)(dst, src); }
diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
similarity index 90%
rename from src/libcamera/software_isp/debayer_egl.cpp
rename to src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
index 8e52b45ae..53bb5e61f 100644
--- a/src/libcamera/software_isp/debayer_egl.cpp
+++ b/src/libcamera/software_isp/software_isp_pipeline_gpu.cpp
@@ -7,7 +7,7 @@
  *
  */
 
-#include "debayer_egl.h"
+#include "software_isp_pipeline_gpu.h"
 
 #include <algorithm>
 #include <assert.h>
@@ -28,27 +28,28 @@
 namespace libcamera {
 
 /**
- * \class DebayerEGL
+ * \class SoftwareIspPipelineGpu
  * \brief Class for debayering using an EGL Shader
  *
  * Implements an EGL shader based debayering solution.
  */
 
 /**
- * \brief Construct a DebayerEGL object
+ * \fn SoftwareIspPipelineGpu::SoftwareIspPipelineGpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)
+ * \brief Construct a SoftwareIspPipelineGpu object
  * \param[in] stats Statistics processing object
  * \param[in] cm The camera manager
  */
-DebayerEGL::DebayerEGL(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)
-	: Debayer(cm), stats_(std::move(stats))
+SoftwareIspPipelineGpu::SoftwareIspPipelineGpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm)
+	: SoftwareIspPipeline(cm), stats_(std::move(stats))
 {
 }
 
-DebayerEGL::~DebayerEGL()
+SoftwareIspPipelineGpu::~SoftwareIspPipelineGpu()
 {
 }
 
-int DebayerEGL::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config)
+int SoftwareIspPipelineGpu::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config)
 {
 	BayerFormat bayerFormat =
 		BayerFormat::fromPixelFormat(inputFormat);
@@ -94,7 +95,7 @@ int DebayerEGL::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &conf
 	return -EINVAL;
 }
 
-int DebayerEGL::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config)
+int SoftwareIspPipelineGpu::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config)
 {
 	if (outputFormat == formats::XRGB8888 || outputFormat == formats::ARGB8888 ||
 	    outputFormat == formats::XBGR8888 || outputFormat == formats::ABGR8888) {
@@ -108,7 +109,7 @@ int DebayerEGL::getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &c
 	return -EINVAL;
 }
 
-int DebayerEGL::getShaderVariableLocations(void)
+int SoftwareIspPipelineGpu::getShaderVariableLocations(void)
 {
 	attributeVertex_ = glGetAttribLocation(programId_, "vertexIn");
 	attributeTexture_ = glGetAttribLocation(programId_, "textureIn");
@@ -139,7 +140,7 @@ int DebayerEGL::getShaderVariableLocations(void)
 	return 0;
 }
 
-int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputFormat)
+int SoftwareIspPipelineGpu::initBayerShaders(PixelFormat inputFormat, PixelFormat outputFormat)
 {
 	std::vector<std::string> shaderEnv;
 	unsigned int fragmentShaderDataLen = 0;
@@ -290,9 +291,9 @@ int DebayerEGL::initBayerShaders(PixelFormat inputFormat, PixelFormat outputForm
 	return getShaderVariableLocations();
 }
 
-int DebayerEGL::configure(const StreamConfiguration &inputCfg,
-			  const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
-			  [[maybe_unused]] bool ccmEnabled)
+int SoftwareIspPipelineGpu::configure(const StreamConfiguration &inputCfg,
+				      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
+				      [[maybe_unused]] bool ccmEnabled)
 {
 	if (getInputConfig(inputCfg.pixelFormat, inputConfig_) != 0)
 		return -EINVAL;
@@ -353,9 +354,9 @@ int DebayerEGL::configure(const StreamConfiguration &inputCfg,
 	return 0;
 }
 
-Size DebayerEGL::patternSize(PixelFormat inputFormat)
+Size SoftwareIspPipelineGpu::patternSize(PixelFormat inputFormat)
 {
-	DebayerEGL::DebayerInputConfig config;
+	SoftwareIspPipelineGpu::DebayerInputConfig config;
 
 	if (getInputConfig(inputFormat, config) != 0)
 		return {};
@@ -363,9 +364,9 @@ Size DebayerEGL::patternSize(PixelFormat inputFormat)
 	return config.patternSize;
 }
 
-std::vector<PixelFormat> DebayerEGL::formats(PixelFormat inputFormat)
+std::vector<PixelFormat> SoftwareIspPipelineGpu::formats(PixelFormat inputFormat)
 {
-	DebayerEGL::DebayerInputConfig config;
+	SoftwareIspPipelineGpu::DebayerInputConfig config;
 
 	if (getInputConfig(inputFormat, config) != 0)
 		return std::vector<PixelFormat>();
@@ -374,9 +375,9 @@ std::vector<PixelFormat> DebayerEGL::formats(PixelFormat inputFormat)
 }
 
 std::tuple<unsigned int, unsigned int>
-DebayerEGL::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
+SoftwareIspPipelineGpu::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
 {
-	DebayerEGL::DebayerOutputConfig config;
+	SoftwareIspPipelineGpu::DebayerOutputConfig config;
 
 	if (getOutputConfig(outputFormat, config) != 0)
 		return std::make_tuple(0, 0);
@@ -387,7 +388,7 @@ DebayerEGL::strideAndFrameSize(const PixelFormat &outputFormat, const Size &size
 	return std::make_tuple(stride, stride * size.height);
 }
 
-void DebayerEGL::setShaderVariableValues(const DebayerParams &params)
+void SoftwareIspPipelineGpu::setShaderVariableValues(const DebayerParams &params)
 {
 	/*
 	 * Raw Bayer 8-bit, and packed raw Bayer 10-bit/12-bit formats
@@ -510,7 +511,7 @@ void DebayerEGL::setShaderVariableValues(const DebayerParams &params)
 	return;
 }
 
-int DebayerEGL::debayerGPU(FrameBuffer *input, FrameBuffer *output, const DebayerParams &params, std::optional<MappedFrameBuffer> *inMapped, std::optional<DmaSyncer> *inDmaSyncer)
+int SoftwareIspPipelineGpu::debayerGPU(FrameBuffer *input, FrameBuffer *output, const DebayerParams &params, std::optional<MappedFrameBuffer> *inMapped, std::optional<DmaSyncer> *inDmaSyncer)
 {
 	bool dmabuf_import_succeeded = false;
 
@@ -555,7 +556,7 @@ int DebayerEGL::debayerGPU(FrameBuffer *input, FrameBuffer *output, const Debaye
 	return 0;
 }
 
-void DebayerEGL::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams &params)
+void SoftwareIspPipelineGpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams &params)
 {
 	bench_.startFrame();
 
@@ -607,7 +608,7 @@ error:
 	return;
 }
 
-int DebayerEGL::start()
+int SoftwareIspPipelineGpu::start()
 {
 	GLint maxTextureImageUnits;
 
@@ -630,7 +631,7 @@ int DebayerEGL::start()
 	return 0;
 }
 
-void DebayerEGL::stop()
+void SoftwareIspPipelineGpu::stop()
 {
 	eglImageBayerOut_.reset();
 	eglImageBayerIn_.reset();
@@ -639,7 +640,7 @@ void DebayerEGL::stop()
 		glDeleteProgram(programId_);
 }
 
-SizeRange DebayerEGL::sizes(PixelFormat inputFormat, const Size &inputSize)
+SizeRange SoftwareIspPipelineGpu::sizes(PixelFormat inputFormat, const Size &inputSize)
 {
 	Size patternSize = this->patternSize(inputFormat);
 	unsigned int borderHeight = patternSize.height;
diff --git a/src/libcamera/software_isp/debayer_egl.h b/src/libcamera/software_isp/software_isp_pipeline_gpu.h
similarity index 93%
rename from src/libcamera/software_isp/debayer_egl.h
rename to src/libcamera/software_isp/software_isp_pipeline_gpu.h
index 875e7cfc5..eb365d198 100644
--- a/src/libcamera/software_isp/debayer_egl.h
+++ b/src/libcamera/software_isp/software_isp_pipeline_gpu.h
@@ -27,7 +27,7 @@
 #include <EGL/eglext.h>
 #include <GLES3/gl32.h>
 
-#include "debayer.h"
+#include "software_isp_pipeline.h"
 
 namespace libcamera {
 
@@ -36,11 +36,11 @@ namespace libcamera {
 
 class CameraManager;
 
-class DebayerEGL : public Debayer
+class SoftwareIspPipelineGpu : public SoftwareIspPipeline
 {
 public:
-	DebayerEGL(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);
-	~DebayerEGL();
+	SoftwareIspPipelineGpu(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);
+	~SoftwareIspPipelineGpu();
 
 	int configure(const StreamConfiguration &inputCfg,
 		      const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
