[libcamera-devel] [PATCH 1/2] v4l2: Use SystemDevices properties to identify cameras

Barnabás Pőcze pobrn at protonmail.com
Sun Jun 18 00:22:45 CEST 2023


Hi


2023. június 18., vasárnap 0:10 keltezéssel, Kieran Bingham <kieran.bingham at ideasonboard.com> írta:

> Quoting Barnabás Pőcze (2023-06-16 15:27:27)
> > Hi
> >
> >
> > 2023. június 16., péntek 0:51 keltezéssel, Kieran Bingham via libcamera-devel <libcamera-devel at lists.libcamera.org> írta:
> >
> > > The CameraManager->get(dev_t) helper was implemented only to support the
> > > V4L2 Adaptation layer, and has been deprecated now that a new camera
> > > property - SystemDevices has been introduced.
> > >
> > > Rework the implementation of getCameraIndex() to use the SystemDevices
> > > property and remove reliance on the now deprecated call.
> > >
> > > Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> > > ---
> > >  src/v4l2/v4l2_compat_manager.cpp | 28 +++++++++++++++++++++++-----
> > >  1 file changed, 23 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/src/v4l2/v4l2_compat_manager.cpp b/src/v4l2/v4l2_compat_manager.cpp
> > > index 0f7575c54b22..c49124290b42 100644
> > > --- a/src/v4l2/v4l2_compat_manager.cpp
> > > +++ b/src/v4l2/v4l2_compat_manager.cpp
> > > @@ -24,6 +24,7 @@
> > >
> > >  #include <libcamera/camera.h>
> > >  #include <libcamera/camera_manager.h>
> > > +#include <libcamera/property_ids.h>
> > >
> > >  #include "v4l2_camera_file.h"
> > >
> > > @@ -113,14 +114,31 @@ int V4L2CompatManager::getCameraIndex(int fd)
> > >       if (ret < 0)
> > >               return -1;
> > >
> > > -     std::shared_ptr<Camera> target = cm_->get(statbuf.st_rdev);
> > > -     if (!target)
> > > -             return -1;
> > > +     const dev_t devnum = statbuf.st_rdev;
> > >
> > > +     /*
> > > +      * Iterate each known camera and identify if it reports this nodes
> > > +      * device number in its list of SystemDevices.
> > > +      */
> > >       auto cameras = cm_->cameras();
> > >       for (auto [index, camera] : utils::enumerate(cameras)) {
> > > -             if (camera == target)
> > > -                     return index;
> > > +             const auto devices = camera->properties()
> > > +                                          .get(properties::SystemDevices)
> > > +                                          .value_or(std::vector<int64_t>{});
> >
> > Why a vector? Why not `Span<int64_t>{}`?
> 
> I think I just used vector because that's the control type. But I think
> you're right, a Span could potentially work here.
> 
> I'll try it and if it works I'll use that.
> [...]

As far as I can see, array-like controls have type `Control<Span<T>>`, so `.get(...)`
returns a span. That's the reason I asked, it seemed a bit odd that you used a vector there.


Regards,
Barnabás Pőcze


More information about the libcamera-devel mailing list