diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 8b3f0ce7e2112564..3685dbf9d19c3d7d 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -96,12 +96,21 @@ std::map<Stream *, BufferPool *>
 PipelineHandlerUVC::allocateBuffers(Camera *camera,
 				    std::map<Stream *, StreamConfiguration> &config)
 {
-	return std::map<Stream *, BufferPool *> {};
+	StreamConfiguration *cfg = &config[&stream_];
+
+	LOG(UVC, Debug) << "Requesting " << cfg->bufferCount << " buffers";
+
+	BufferPool *pool = video_->requestBuffers(cfg->bufferCount);
+
+	if (!pool)
+		LOG(UVC, Error) << "Failed to acquire a buffer pool";
+
+	return std::map<Stream *, BufferPool *> { {&stream_, pool} };
 }
 
 int PipelineHandlerUVC::freeBuffers(Camera *camera)
 {
-	return 0;
+	return video_->releaseBuffers();
 }
 
 int PipelineHandlerUVC::start(const Camera *camera)
