[PATCH] gst: provider: Do not hide v4l2deviceprovider

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon May 6 20:38:03 CEST 2024


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.

> 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

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list