diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 0e7555c716b36749..f4759715c6ae7572 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -729,14 +729,16 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)
 	IPU3CameraData *data = cameraData(camera);
 	CIO2Device *cio2 = &data->cio2_;
 	ImgUDevice *imgu = data->imgu_;
-	unsigned int bufferCount;
+	unsigned int bufferCount = 0;
 	int ret;
 
 	ret = cio2->allocateBuffers();
 	if (ret < 0)
 		return ret;
 
-	bufferCount = ret;
+	bufferCount = std::max<unsigned int>(data->outStream_.configuration().bufferCount, bufferCount);
+	bufferCount = std::max<unsigned int>(data->vfStream_.configuration().bufferCount, bufferCount);
+	bufferCount = std::max<unsigned int>(data->rawStream_.configuration().bufferCount, bufferCount);
 
 	ret = imgu->allocateBuffers(data, bufferCount);
 	if (ret < 0) {
