From c6090542cd4623d39ec9affb7d127ea188933890 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 17 Jun 2019 13:07:31 +0300 Subject: cam: Allow selecting cameras by index MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As camera names can be cumbersome to type, selection of cameras by index from a list can be useful. Print the list of detected cameras with an index for each item, and interpret the camera name as an index if it is a numerical value in the range from 1 to the number of cameras. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Reviewed-by: Niklas Söderlund --- src/cam/main.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/cam/main.cpp') diff --git a/src/cam/main.cpp b/src/cam/main.cpp index f03a9faf..cd0afcb9 100644 --- a/src/cam/main.cpp +++ b/src/cam/main.cpp @@ -73,7 +73,14 @@ int CamApp::init(int argc, char **argv) } if (options_.isSet(OptCamera)) { - camera_ = cm_->get(options_[OptCamera]); + const std::string &cameraName = options_[OptCamera]; + char *endptr; + unsigned long index = strtoul(cameraName.c_str(), &endptr, 10); + if (*endptr == '\0' && index > 0 && index <= cm_->cameras().size()) + camera_ = cm_->cameras()[index - 1]; + else + camera_ = cm_->get(cameraName); + if (!camera_) { std::cout << "Camera " << std::string(options_[OptCamera]) @@ -141,7 +148,7 @@ int CamApp::parseOptions(int argc, char *argv[]) OptionsParser parser; parser.addOption(OptCamera, OptionString, - "Specify which camera to operate on", "camera", + "Specify which camera to operate on, by name or by index", "camera", ArgumentRequired, "camera"); parser.addOption(OptCapture, OptionNone, "Capture until interrupted by user", "capture"); @@ -172,8 +179,12 @@ int CamApp::run() { if (options_.isSet(OptList)) { std::cout << "Available cameras:" << std::endl; - for (const std::shared_ptr &cam : cm_->cameras()) - std::cout << "- " << cam->name() << std::endl; + + unsigned int index = 1; + for (const std::shared_ptr &cam : cm_->cameras()) { + std::cout << index << ": " << cam->name() << std::endl; + index++; + } } if (options_.isSet(OptCapture)) { -- cgit v1.2.1