diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h
index f809e6be8..65348e213 100644
--- a/include/libcamera/internal/software_isp/software_isp.h
+++ b/include/libcamera/internal/software_isp/software_isp.h
@@ -49,7 +49,8 @@ class SoftwareIsp : public Object
 {
 public:
 	SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
-		    ControlInfoMap *ipaControls);
+		    ControlInfoMap *ipaControls,
+		    const unsigned int bufferCount);
 	~SoftwareIsp();
 
 	int loadConfiguration([[maybe_unused]] const std::string &filename) { return 0; }
@@ -97,11 +98,10 @@ private:
 	void outputReady(FrameBuffer *output);
 	std::unique_ptr<Debayer> debayer_;
 	Thread ispWorkerThread_;
-	static constexpr unsigned int kParamStatBufferCount = 1;
 	std::map<uint32_t, SharedMemObject<DebayerParams>> sharedParams_;
 	DebayerParams debayerParams_;
 	std::queue<uint32_t> availableParams_;
-	bool allocateParamsBuffers();
+	bool allocateParamsBuffers(const unsigned int bufferCount);
 	DmaBufAllocator dmaHeap_;
 	bool ccmEnabled_;
 
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 4a0b9f58d..dc9176c29 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -427,13 +427,13 @@ public:
 	V4L2Subdevice *subdev(const MediaEntity *entity);
 	std::shared_ptr<MediaDevice> converter() { return converter_; }
 	bool swIspEnabled() const { return swIspEnabled_; }
+	static constexpr unsigned int kNumInternalBuffers = 4;
 
 protected:
 	int queueRequestDevice(Camera *camera, Request *request) override;
 
 private:
 	static constexpr unsigned int kMaxQueuedRequestsDevice = 4;
-	static constexpr unsigned int kNumInternalBuffers = 4;
 
 	struct EntityData {
 		std::unique_ptr<V4L2VideoDevice> video;
@@ -615,7 +615,8 @@ int SimpleCameraData::init()
 	 * Instantiate Soft ISP if this is enabled for the given driver and no converter is used.
 	 */
 	if (!converter_ && pipe->swIspEnabled()) {
-		swIsp_ = std::make_unique<SoftwareIsp>(pipe, sensor_.get(), &controlInfo_);
+		swIsp_ = std::make_unique<SoftwareIsp>(pipe, sensor_.get(), &controlInfo_,
+						       pipe->kNumInternalBuffers);
 		if (!swIsp_->isValid()) {
 			LOG(SimplePipeline, Warning)
 				<< "Failed to create software ISP, disabling software debayering";
diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
index 79d5dfe0e..02d1c4c12 100644
--- a/src/libcamera/software_isp/software_isp.cpp
+++ b/src/libcamera/software_isp/software_isp.cpp
@@ -70,20 +70,16 @@ LOG_DEFINE_CATEGORY(SoftwareIsp)
  * ready
  */
 
-/**
- * \var SoftwareIsp::kParamStatBufferCount
- * \brief The number of stats and params buffers (each of them)
- */
-
 /**
  * \brief Constructs SoftwareIsp object
  * \param[in] pipe The pipeline handler in use
  * \param[in] sensor Pointer to the CameraSensor instance owned by the pipeline
  * \param[out] ipaControls The IPA controls to update
+ * \param[in] bufferCount Number of parameters buffers and stats buffers to allocate
  * handler
  */
 SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
-			 ControlInfoMap *ipaControls)
+			 ControlInfoMap *ipaControls, const unsigned bufferCount)
 	: ispWorkerThread_("SWIspWorker"),
 	  dmaHeap_(DmaBufAllocator::DmaBufAllocatorFlag::CmaHeap |
 		   DmaBufAllocator::DmaBufAllocatorFlag::SystemHeap |
@@ -93,7 +89,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,
 		LOG(SoftwareIsp, Error) << "Failed to create DmaBufAllocator object";
 		return;
 	}
-	if (!allocateParamsBuffers())
+	if (!allocateParamsBuffers(bufferCount))
 		return;
 
 	const GlobalConfiguration &configuration = pipe->cameraManager()->_d()->configuration();
@@ -177,9 +173,9 @@ SoftwareIsp::~SoftwareIsp()
 	debayer_.reset();
 }
 
-bool SoftwareIsp::allocateParamsBuffers()
+bool SoftwareIsp::allocateParamsBuffers(const unsigned int bufferCount)
 {
-	for (unsigned int i = 0; i < kParamStatBufferCount; i++) {
+	for (unsigned int i = 0; i < bufferCount; i++) {
 		auto params = SharedMemObject<DebayerParams>("softIsp_params");
 		if (!params) {
 			LOG(SoftwareIsp, Error) << "Failed to create shared memory for parameters";
