diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp
index 5a25baab03f5..605018278c5a 100644
--- a/src/cam/camera_session.cpp
+++ b/src/cam/camera_session.cpp
@@ -193,9 +193,10 @@ int CameraSession::start()
 
 	if (options_.isSet(OptFile)) {
 		if (!options_[OptFile].toString().empty())
-			sink_ = std::make_unique<FileSink>(options_[OptFile]);
+			sink_ = std::make_unique<FileSink>(streamNames_,
+							   options_[OptFile]);
 		else
-			sink_ = std::make_unique<FileSink>();
+			sink_ = std::make_unique<FileSink>(streamNames_);
 	}
 
 	if (sink_) {
diff --git a/src/cam/file_sink.cpp b/src/cam/file_sink.cpp
index 3c2e565b27a2..45213d4a54fe 100644
--- a/src/cam/file_sink.cpp
+++ b/src/cam/file_sink.cpp
@@ -20,8 +20,9 @@
 
 using namespace libcamera;
 
-FileSink::FileSink(const std::string &pattern)
-	: pattern_(pattern)
+FileSink::FileSink(const std::map<const libcamera::Stream *, std::string> &streamNames,
+		   const std::string &pattern)
+	: streamNames_(streamNames), pattern_(pattern)
 {
 }
 
@@ -35,12 +36,6 @@ int FileSink::configure(const libcamera::CameraConfiguration &config)
 	if (ret < 0)
 		return ret;
 
-	streamNames_.clear();
-	for (unsigned int index = 0; index < config.size(); ++index) {
-		const StreamConfiguration &cfg = config.at(index);
-		streamNames_[cfg.stream()] = "stream" + std::to_string(index);
-	}
-
 	return 0;
 }
 
diff --git a/src/cam/file_sink.h b/src/cam/file_sink.h
index 335be93b8732..8de93a01a1e8 100644
--- a/src/cam/file_sink.h
+++ b/src/cam/file_sink.h
@@ -20,7 +20,8 @@ class Image;
 class FileSink : public FrameSink
 {
 public:
-	FileSink(const std::string &pattern = "");
+	FileSink(const std::map<const libcamera::Stream *, std::string> &streamNames,
+		 const std::string &pattern = "");
 	~FileSink();
 
 	int configure(const libcamera::CameraConfiguration &config) override;
