diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h
index 983b9d900aea..5a536393a5b5 100644
--- a/src/libcamera/include/v4l2_device.h
+++ b/src/libcamera/include/v4l2_device.h
@@ -99,7 +99,7 @@ public:
 	int getFormat(V4L2DeviceFormat *format);
 	int setFormat(V4L2DeviceFormat *format);
 
-	int exportBuffers(unsigned int count, BufferPool *pool);
+	int exportBuffers(BufferPool *pool);
 	int releaseBuffers();
 
 	int queueBuffer(Buffer *buffer);
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 34b03995ae31..677e127dd738 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -191,8 +191,7 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera, Stream *stream)
 	if (!cfg.bufferCount)
 		return -EINVAL;
 
-	int ret = data->cio2_->exportBuffers(cfg.bufferCount,
-					     &stream->bufferPool());
+	int ret = data->cio2_->exportBuffers(&stream->bufferPool());
 	if (ret) {
 		LOG(IPU3, Error) << "Failed to request memory";
 		return ret;
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index fc31c52c0ecd..b6a98657b609 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -102,7 +102,7 @@ int PipelineHandlerUVC::allocateBuffers(Camera *camera, Stream *stream)
 
 	LOG(UVC, Debug) << "Requesting " << cfg.bufferCount << " buffers";
 
-	return video_->exportBuffers(cfg.bufferCount, &stream->bufferPool());
+	return video_->exportBuffers(&stream->bufferPool());
 }
 
 int PipelineHandlerUVC::freeBuffers(Camera *camera, Stream *stream)
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index 46840a4f4104..543ff212d010 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -101,7 +101,7 @@ int PipelineHandlerVimc::allocateBuffers(Camera *camera, Stream *stream)
 
 	LOG(VIMC, Debug) << "Requesting " << cfg.bufferCount << " buffers";
 
-	return video_->exportBuffers(cfg.bufferCount, &stream->bufferPool());
+	return video_->exportBuffers(&stream->bufferPool());
 }
 
 int PipelineHandlerVimc::freeBuffers(Camera *camera, Stream *stream)
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index d690be9823f5..152bd9930a70 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -538,13 +538,12 @@ int V4L2Device::requestBuffers(unsigned int count)
 }
 
 /**
- * \brief Request \a count buffers to be allocated from the device and stored in
- * the buffer pool provided.
- * \param[in] count Number of buffers to allocate
+ * \brief Request buffers to be allocated from the device and stored in the
+ *  buffer pool provided.
  * \param[out] pool BufferPool to populate with buffers
  * \return 0 on success or a negative error code otherwise
  */
-int V4L2Device::exportBuffers(unsigned int count, BufferPool *pool)
+int V4L2Device::exportBuffers(BufferPool *pool)
 {
 	unsigned int allocatedBuffers;
 	unsigned int i;
@@ -552,21 +551,19 @@ int V4L2Device::exportBuffers(unsigned int count, BufferPool *pool)
 
 	memoryType_ = V4L2_MEMORY_MMAP;
 
-	ret = requestBuffers(count);
+	ret = requestBuffers(pool->count());
 	if (ret < 0)
 		return ret;
 
 	allocatedBuffers = ret;
-	if (allocatedBuffers < count) {
+	if (allocatedBuffers < pool->count()) {
 		LOG(V4L2, Error) << "Not enough buffers provided by V4L2Device";
 		requestBuffers(0);
 		return -ENOMEM;
 	}
 
-	count = ret;
-
 	/* Map the buffers. */
-	for (i = 0; i < count; ++i) {
+	for (i = 0; i < pool->count(); ++i) {
 		struct v4l2_plane planes[VIDEO_MAX_PLANES] = {};
 		struct v4l2_buffer buf = {};
 		struct Buffer &buffer = pool->buffers()[i];
diff --git a/test/v4l2_device/capture_async.cpp b/test/v4l2_device/capture_async.cpp
index ba37c9731831..511368d6b53d 100644
--- a/test/v4l2_device/capture_async.cpp
+++ b/test/v4l2_device/capture_async.cpp
@@ -38,9 +38,9 @@ protected:
 		Timer timeout;
 		int ret;
 
-		createBuffers(bufferCount);
+		pool_.createBuffers(bufferCount);
 
-		ret = dev_->exportBuffers(bufferCount, &pool_);
+		ret = dev_->exportBuffers(&pool_);
 		if (ret)
 			return TestFail;
 
diff --git a/test/v4l2_device/request_buffers.cpp b/test/v4l2_device/request_buffers.cpp
index bc6ff2c18a57..26d7d9528982 100644
--- a/test/v4l2_device/request_buffers.cpp
+++ b/test/v4l2_device/request_buffers.cpp
@@ -19,9 +19,9 @@ protected:
 		 */
 		const unsigned int bufferCount = 8;
 
-		createBuffers(bufferCount);
+		pool_.createBuffers(bufferCount);
 
-		int ret = dev_->exportBuffers(bufferCount, &pool_);
+		int ret = dev_->exportBuffers(&pool_);
 		if (ret)
 			return TestFail;
 
diff --git a/test/v4l2_device/stream_on_off.cpp b/test/v4l2_device/stream_on_off.cpp
index b564d2a2ab67..861d8d695813 100644
--- a/test/v4l2_device/stream_on_off.cpp
+++ b/test/v4l2_device/stream_on_off.cpp
@@ -14,9 +14,9 @@ protected:
 	{
 		const unsigned int bufferCount = 8;
 
-		createBuffers(bufferCount);
+		pool_.createBuffers(bufferCount);
 
-		int ret = dev_->exportBuffers(bufferCount, &pool_);
+		int ret = dev_->exportBuffers(&pool_);
 		if (ret)
 			return TestFail;
 
diff --git a/test/v4l2_device/v4l2_device_test.h b/test/v4l2_device/v4l2_device_test.h
index f22f0bb555d8..43539655f85b 100644
--- a/test/v4l2_device/v4l2_device_test.h
+++ b/test/v4l2_device/v4l2_device_test.h
@@ -24,8 +24,6 @@ class V4L2DeviceTest : public Test
 public:
 	V4L2DeviceTest() : dev_(nullptr){};
 
-	void createBuffers(unsigned int qty) { pool_.createBuffers(qty); }
-
 protected:
 	int init();
 	void cleanup();
