[EXT] Re: [PATCH] libcamera: device_enumerator: exclude uvcvideo device when enumerate
Jacopo Mondi
jacopo.mondi at ideasonboard.com
Tue Mar 26 11:50:51 CET 2024
No worries, happy you got it solved!
Cheers
j
On Tue, Mar 26, 2024 at 10:44:34AM +0000, Anle Pan wrote:
> Hi Jacopo,
>
> It is the code added by our own project for debug that causes the crash. Not related to libcamera, please omit the patch. Thanks.
>
> Best Regards
> Anle Pan
>
> -----Original Message-----
> From: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
> Sent: 2024年3月26日 17:03
> To: Anle Pan <anle.pan at nxp.com>
> Cc: libcamera-devel at lists.libcamera.org; Hui Fang <hui.fang at nxp.com>
> Subject: [EXT] Re: [PATCH] libcamera: device_enumerator: exclude uvcvideo device when enumerate
>
> Caution: This is an external email. Please take care when clicking links or opening attachments. When in doubt, report the message using the 'Report this email' button
>
>
> Hi Anle
>
> On Tue, Mar 26, 2024 at 05:38:04PM +0900, Anle Pan wrote:
> > Camera service startup crash when camera and usb camera are connected
> > at the same time, service will always reboot due to the null pointer
> > in populateEntities.
>
> This is weird, libcamera has been used with uvcvideo devices since the very beginning. As far as I understand, this is not related to Android or its CameraService, right ? Just loading the library fails ?
>
> >
> > In this case, a UVC device was used to populate the related entities,
> > pads and links, which was not reasonable.
>
> Not a UVC expert, but why this is not reasonable ? uvc devices have a media graph with entities, links and pads like every other device, don't they ?
>
> >
> > To fix the issue, ensure the media node is not a "uvcvideo" device
> > when enumerate before createDevice.
>
> So this is disabling uvc support in libcamera completely, preventing uvcvideo devices from being enumerated ?
>
> What about uvcvideo users ? :)
>
> >
> > Change-Id: I656a542e83449df287d34a4e358ae2e26e784f17
> > Signed-off-by: Anle Pan <anle.pan at nxp.com>
> > ---
> > src/libcamera/device_enumerator_sysfs.cpp | 21 +++++++++++++++++++++
> > 1 file changed, 21 insertions(+)
> >
> > diff --git a/src/libcamera/device_enumerator_sysfs.cpp
> > b/src/libcamera/device_enumerator_sysfs.cpp
> > index 9979d68a..224ec8c8 100644
> > --- a/src/libcamera/device_enumerator_sysfs.cpp
> > +++ b/src/libcamera/device_enumerator_sysfs.cpp
> > @@ -73,6 +73,27 @@ int DeviceEnumeratorSysfs::enumerate()
> > continue;
> > }
> >
> > + /* Check that the device node not a uvcvideo. */
> > + struct media_device_info devinfo;
> > + int fd = open(devnode.c_str(), O_RDWR | O_CLOEXEC);
> > + if (fd < 0) {
> > + LOG(DeviceEnumerator, Warning)
> > + << "Failed to open media device:" + devnode
> > + << " (" << strerror(errno) << "), skipping";
> > + continue;
> > + }
> > + int retval = ioctl(fd, MEDIA_IOC_DEVICE_INFO, &devinfo);
> > + close(fd);
> > + if (retval != 0) {
> > + LOG(DeviceEnumerator, Warning)
> > + << "Failed to get info from device:" + devnode
> > + << " (" << strerror(errno) << "), skipping";
> > + continue;
> > + }
> > + if (strstr("uvcvideo", devinfo.driver)) {
> > + continue;
> > + }
> > +
> > std::unique_ptr<MediaDevice> media = createDevice(devnode);
> > if (!media)
> > continue;
> > --
> > 2.34.1
> >
More information about the libcamera-devel
mailing list