summaryrefslogtreecommitdiff
path: root/src/cam
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-06-17 13:07:31 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-06-18 23:34:03 +0300
commitc6090542cd4623d39ec9affb7d127ea188933890 (patch)
tree50d041a2539b1258921c9d9e45f13604698094c9 /src/cam
parentb2b3599b5b0673901bbce958bd9802b9d6313fcf (diff)
cam: Allow selecting cameras by index
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 <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src/cam')
-rw-r--r--src/cam/main.cpp19
1 files changed, 15 insertions, 4 deletions
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<Camera> &cam : cm_->cameras())
- std::cout << "- " << cam->name() << std::endl;
+
+ unsigned int index = 1;
+ for (const std::shared_ptr<Camera> &cam : cm_->cameras()) {
+ std::cout << index << ": " << cam->name() << std::endl;
+ index++;
+ }
}
if (options_.isSet(OptCapture)) {