cam: Add camera index to file name of capture frames
To prepare for multi-camera support, extend the file naming scheme for captured frames to include the camera index in addition to the stream name and frame number. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
7dab1fa58f
commit
721f4b03d8
3 changed files with 11 additions and 6 deletions
|
@ -22,9 +22,11 @@ using namespace libcamera;
|
||||||
|
|
||||||
CameraSession::CameraSession(CameraManager *cm,
|
CameraSession::CameraSession(CameraManager *cm,
|
||||||
const std::string &cameraId,
|
const std::string &cameraId,
|
||||||
|
unsigned int cameraIndex,
|
||||||
const OptionsParser::Options &options)
|
const OptionsParser::Options &options)
|
||||||
: options_(options), last_(0), queueCount_(0), captureCount_(0),
|
: options_(options), cameraIndex_(cameraIndex), last_(0),
|
||||||
captureLimit_(0), printMetadata_(false)
|
queueCount_(0), captureCount_(0), captureLimit_(0),
|
||||||
|
printMetadata_(false)
|
||||||
{
|
{
|
||||||
char *endptr;
|
char *endptr;
|
||||||
unsigned long index = strtoul(cameraId.c_str(), &endptr, 10);
|
unsigned long index = strtoul(cameraId.c_str(), &endptr, 10);
|
||||||
|
@ -152,7 +154,8 @@ int CameraSession::start()
|
||||||
streamName_.clear();
|
streamName_.clear();
|
||||||
for (unsigned int index = 0; index < config_->size(); ++index) {
|
for (unsigned int index = 0; index < config_->size(); ++index) {
|
||||||
StreamConfiguration &cfg = config_->at(index);
|
StreamConfiguration &cfg = config_->at(index);
|
||||||
streamName_[cfg.stream()] = "stream" + std::to_string(index);
|
streamName_[cfg.stream()] = "cam" + std::to_string(cameraIndex_)
|
||||||
|
+ "-stream" + std::to_string(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
camera_->requestCompleted.connect(this, &CameraSession::requestComplete);
|
camera_->requestCompleted.connect(this, &CameraSession::requestComplete);
|
||||||
|
|
|
@ -28,7 +28,7 @@ class CameraSession
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CameraSession(libcamera::CameraManager *cm,
|
CameraSession(libcamera::CameraManager *cm,
|
||||||
const std::string &cameraId,
|
const std::string &cameraId, unsigned int cameraIndex,
|
||||||
const OptionsParser::Options &options);
|
const OptionsParser::Options &options);
|
||||||
~CameraSession();
|
~CameraSession();
|
||||||
|
|
||||||
|
@ -60,6 +60,8 @@ private:
|
||||||
|
|
||||||
std::map<const libcamera::Stream *, std::string> streamName_;
|
std::map<const libcamera::Stream *, std::string> streamName_;
|
||||||
std::unique_ptr<BufferWriter> writer_;
|
std::unique_ptr<BufferWriter> writer_;
|
||||||
|
unsigned int cameraIndex_;
|
||||||
|
|
||||||
uint64_t last_;
|
uint64_t last_;
|
||||||
|
|
||||||
unsigned int queueCount_;
|
unsigned int queueCount_;
|
||||||
|
|
|
@ -136,7 +136,7 @@ int CamApp::parseOptions(int argc, char *argv[])
|
||||||
"If the file name ends with a '/', it sets the directory in which\n"
|
"If the file name ends with a '/', it sets the directory in which\n"
|
||||||
"to write files, using the default file name. Otherwise it sets the\n"
|
"to write files, using the default file name. Otherwise it sets the\n"
|
||||||
"full file path and name. The first '#' character in the file name\n"
|
"full file path and name. The first '#' character in the file name\n"
|
||||||
"is expanded to the stream name and frame sequence number.\n"
|
"is expanded to the camera index, stream name and frame sequence number.\n"
|
||||||
"The default file name is 'frame-#.bin'.",
|
"The default file name is 'frame-#.bin'.",
|
||||||
"file", ArgumentOptional, "filename", false,
|
"file", ArgumentOptional, "filename", false,
|
||||||
OptCamera);
|
OptCamera);
|
||||||
|
@ -201,7 +201,7 @@ int CamApp::run()
|
||||||
if (options_.isSet(OptCamera)) {
|
if (options_.isSet(OptCamera)) {
|
||||||
const OptionValue &camera = options_[OptCamera];
|
const OptionValue &camera = options_[OptCamera];
|
||||||
session = std::make_unique<CameraSession>(cm_.get(),
|
session = std::make_unique<CameraSession>(cm_.get(),
|
||||||
camera.toString(),
|
camera.toString(), 0,
|
||||||
camera.children());
|
camera.children());
|
||||||
if (!session->isValid()) {
|
if (!session->isValid()) {
|
||||||
std::cout << "Failed to create camera session" << std::endl;
|
std::cout << "Failed to create camera session" << std::endl;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue