[libcamera-devel] [PATCH] cam: Allow selecting cameras by index
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Jun 18 22:49:38 CEST 2019
Hi Kieran,
On Tue, Jun 18, 2019 at 09:42:05PM +0100, Kieran Bingham wrote:
> On 17/06/2019 11:09, Laurent Pinchart wrote:
> > 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.
>
>
> I'm very pleased to see this patch.
>
> I asked about allowing an index to identify the camera, rather than the
> extended strings sometime ago, especially as I have to deal with:
>
> - HP Wide Vision FHD Camera: HP W
> - HP Wide Vision FHD Camera: HP I
>
> But I recall I was told that we were not going to guarantee ordering of
> the cameras, thus an ID was not appropriate.
>
> But as all remaining members of the team seem happy with this now, I
> finally get to use an index!
I don't think libcamera should expose an index-based API as the primary
mean to get hold of a camera, as that's all but stable. In the cam
application, and for the time being, I think it's fine. We may
reconsider that later when we'll have a good naming scheme.
> So
>
> Highly-desired-by and:
> Acked-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > src/cam/main.cpp | 17 ++++++++++++++---
> > 1 file changed, 14 insertions(+), 3 deletions(-)
> >
> > diff --git a/src/cam/main.cpp b/src/cam/main.cpp
> > index f03a9faf87fa..0e7610b1befd 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])
> > @@ -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)) {
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list