[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