diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
index eb59d49..7262453 100644
--- a/src/v4l2/v4l2_camera_proxy.cpp
+++ b/src/v4l2/v4l2_camera_proxy.cpp
@@ -361,6 +361,15 @@ int V4L2CameraProxy::vidioc_reqbufs(V4L2CameraFile *file, struct v4l2_requestbuf
 		return freeBuffers();
 	}
 
+	if (bufferCount_ > 0) {
+		int ret = freeBuffers();
+		if (ret < 0) {
+			LOG(V4L2Compat, Error)
+				<< "Failed to free libcamera buffers for re-reqbufs";
+			return ret;
+		}
+	}
+
 	Size size(curV4L2Format_.fmt.pix.width, curV4L2Format_.fmt.pix.height);
 	ret = vcam_->configure(&streamConfig_, size,
 			       v4l2ToDrm(curV4L2Format_.fmt.pix.pixelformat),
