diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index 8e17085bfb50..875e1e46c89c 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -488,8 +488,13 @@ int Camera::freeBuffers()
 		if (!stream->bufferPool().count())
 			continue;
 
-		pipe_->freeBuffers(this, stream);
+		/*
+		 * Destroy Buffers will empty the pool, and unmap any existing
+		 * memory mapping. This needs to be done before releasing
+		 * buffers back to the V4L2Device through freeBuffers().
+		 */
 		stream->bufferPool().destroyBuffers();
+		pipe_->freeBuffers(this, stream);
 	}
 
 	state_ = CameraConfigured;
