diff --git a/include/libcamera/internal/mapped_framebuffer.h b/include/libcamera/internal/mapped_framebuffer.h
index 6aaabf50..cb81243e 100644
--- a/include/libcamera/internal/mapped_framebuffer.h
+++ b/include/libcamera/internal/mapped_framebuffer.h
@@ -31,6 +31,7 @@ public:
 	bool isValid() const { return error_ == 0; }
 	int error() const { return error_; }
 	const std::vector<Plane> &planes() const { return planes_; }
+	const std::vector<int> &fds() const { return fds_; }
 
 protected:
 	MappedBuffer();
@@ -38,6 +39,7 @@ protected:
 	int error_;
 	std::vector<Plane> planes_;
 	std::vector<Plane> maps_;
+	std::vector<int> fds_;
 
 private:
 	LIBCAMERA_DISABLE_COPY(MappedBuffer)
diff --git a/src/libcamera/mapped_framebuffer.cpp b/src/libcamera/mapped_framebuffer.cpp
index f54bbf21..82ab132c 100644
--- a/src/libcamera/mapped_framebuffer.cpp
+++ b/src/libcamera/mapped_framebuffer.cpp
@@ -237,6 +237,7 @@ MappedFrameBuffer::MappedFrameBuffer(const FrameBuffer *buffer, MapFlags flags)
 		}
 
 		planes_.emplace_back(info.address + plane.offset, plane.length);
+		fds_.emplace_back(fd);
 	}
 }
 
