[PATCH] gst: provider: Do not hide v4l2deviceprovider

Nicolas Dufresne nicolas at ndufresne.ca
Mon May 6 21:51:13 CEST 2024


Le lundi 06 mai 2024 à 21:38 +0300, Laurent Pinchart a écrit :
> On Mon, May 06, 2024 at 08:03:53PM +0530, Umang Jain wrote:
> > Hi Hou Qi
> > 
> > On 06/05/24 7:55 am, Hou Qi wrote:
> > > Currently libcameraprovider hides "v4l2deviceprovider" to avoid devices
> > > being duplicated. When running "gst-gst-device-monitor-1.0 Video",
> > > device monitor probes device providers one by one and sends bus message
> > > to gst-device-monitor to print device information.
> > > 
> > > There is one case that libcameraprovider and v4l2deviceprovider both
> > > exit, libcameraprovider fails to probe device while v4l2deviceprovider
> > > probes successfully. "gst-device-monitor Video" will show nothing as
> > > v4l2deviceprovider is hidden and the bus message it uses to convey
> > > device information is dropped.
> > > 
> > > To fix this issue, not to hide v4l2deviceprovider when do
> > > gst_libcamera_provider_init().
> > 
> > I think this just circumvents the issue rather than fixing it. I would 
> > be more interested in knowing /why/ libcameraprovider can't probe it.
> 
> Possibly because not all V4L2 devices are in scope for libcamera ?
> 
> Hiding the provider isn't a very nice solution, but duplicating devices
> isn't good either. The approach taken by pipewire is to query libcamera
> for the list of devices it supports, and ignoring them in the V4L2
> source element. I wonder if something similar could be done for
> GStreamer.

Do you have links to that ? I was not ware that you could mix v4l2 and libcamera
in pipewire today.

In GStreamer, its a bit less evident, there is no framework for libcamera
provider to cherry-pick some devices and hide them for other providers. Its a
Linux only problem, so it might not be super evident to get code there for a
mess we are the author of.

Nicolas

> 
> > Can you explain on the use case / your case in this regards please? OR
> > 
> > Can you enable the debug and see if holds any clue on the problem ?
> > 
> > For e.g.
> > 
> > ($) LIBCAMERA_LOG_LEVELS=0 GST_DEBUG=2 gst-device-monitor-1.0 Source/Video
> > 
> > Also, gst-device-monitor provides option to include hidden providers:
> > 
> >    -i, --include-hidden              Include devices from hidden device 
> > providers.
> > 
> > > Signed-off-by: Hou Qi <qi.hou at nxp.com>
> > > ---
> > >   src/gstreamer/gstlibcameraprovider.cpp | 4 ----
> > >   1 file changed, 4 deletions(-)
> > > 
> > > diff --git a/src/gstreamer/gstlibcameraprovider.cpp b/src/gstreamer/gstlibcameraprovider.cpp
> > > index ce3e0a08..454e7aaa 100644
> > > --- a/src/gstreamer/gstlibcameraprovider.cpp
> > > +++ b/src/gstreamer/gstlibcameraprovider.cpp
> > > @@ -227,10 +227,6 @@ gst_libcamera_provider_probe(GstDeviceProvider *provider)
> > >   static void
> > >   gst_libcamera_provider_init(GstLibcameraProvider *self)
> > >   {
> > > -	GstDeviceProvider *provider = GST_DEVICE_PROVIDER(self);
> > > -
> > > -	/* Avoid devices being duplicated. */
> > > -	gst_device_provider_hide_provider(provider, "v4l2deviceprovider");
> > >   }
> > >   
> > >   static void
> 



More information about the libcamera-devel mailing list