[libcamera-devel] [PATCH v3 3/6] libcamera: pipeline_handler: uvcvideo: register all Cameras along with a devnum
Paul Elder
paul.elder at ideasonboard.com
Mon Dec 30 19:13:10 CET 2019
Hi Laurent,
Thank you for the review.
On Fri, Dec 27, 2019 at 04:48:51PM +0200, Laurent Pinchart wrote:
> Hi Paul,
>
> Thank you for the patch.
>
> On Mon, Dec 23, 2019 at 01:26:17AM -0600, Paul Elder wrote:
> > Register all UVC Cameras along with its device number, to eventually
>
> s/its device number/their device numbers/
ack
> > allow the V4L2 compatibility layer to match against it.
> >
> > Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> >
> > ---
> > New in v3
> > ---
> > src/libcamera/pipeline/uvcvideo.cpp | 7 +++++--
> > 1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
> > index 3043366b..096c1c09 100644
> > --- a/src/libcamera/pipeline/uvcvideo.cpp
> > +++ b/src/libcamera/pipeline/uvcvideo.cpp
> > @@ -7,6 +7,7 @@
> >
> > #include <algorithm>
> > #include <iomanip>
> > +#include <sys/sysmacros.h>
> > #include <tuple>
> >
> > #include <libcamera/camera.h>
> > @@ -294,17 +295,19 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
> > return false;
> >
> > std::unique_ptr<UVCCameraData> data = utils::make_unique<UVCCameraData>(this);
> > + dev_t devnum = 0;
> >
> > /* Locate and initialise the camera data with the default video node. */
> > for (MediaEntity *entity : media->entities()) {
> > if (entity->flags() & MEDIA_ENT_FL_DEFAULT) {
> > if (data->init(entity))
> > return false;
> > + devnum = makedev(entity->deviceMajor(), entity->deviceMinor());
>
> You can move this line after the loop, and merge it with the devnum
> variable declaration. I would actually move it after the "Could not find
> a default video device" check and make it a separate check with a
> dedicated error message. Or even drop the check completely as it really
> shouldn't happen (in which case you can move the devnum calculation to
> the registration below).
I don't think I can, because entity is only available inside the loop. I
would have to save it, in which case I might as well just extract the
devnum here.
> With this fixed,
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
> > break;
> > }
> > }
> >
> > - if (!data) {
> > + if (!data || !devnum) {
> > LOG(UVC, Error) << "Could not find a default video device";
> > return false;
> > }
> > @@ -312,7 +315,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
> > /* Create and register the camera. */
> > std::set<Stream *> streams{ &data->stream_ };
> > std::shared_ptr<Camera> camera = Camera::create(this, media->model(), streams);
> > - registerCamera(std::move(camera), std::move(data));
> > + registerCamera(std::move(camera), std::move(data), devnum);
> >
> > /* Enable hot-unplug notifications. */
> > hotplugMediaDevice(media);
Thanks,
Paul
More information about the libcamera-devel
mailing list