summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-10-12 04:24:47 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-10-15 05:05:31 +0300
commit7e2948f5e106e7d3623134fb9f6c59347640c696 (patch)
treedadcbd08b4f90052c2ccec6fbfe2feba30aaaa24
parent45662c4dd757cff33ebbf296c8f656c17c9022b5 (diff)
cam: Pass stream names to FileSink
The FileSink class constructs stream names internally the same way that the CameraSession does, except that it fails to add the camera name. This results in files being written without the camera name. This could be fixed in FileSink, but we would still duplicate code to construct stream names. Pass the stream names map from CameraSession to FileSink instead, and store it internally. Fixes: 02001fecb0f5 ("cam: Turn BufferWriter into a FrameSink") Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--src/cam/camera_session.cpp5
-rw-r--r--src/cam/file_sink.cpp11
-rw-r--r--src/cam/file_sink.h3
3 files changed, 8 insertions, 11 deletions
diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp
index 5a25baab..60501827 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 3c2e565b..45213d4a 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 335be93b..8de93a01 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;