uvcsink using arbitrary sources

Michael Tretter m.tretter at pengutronix.de
Mon Sep 4 12:37:34 UTC 2023


On Fri, 01 Sep 2023 16:25:28 +0200, Markus Fritsche wrote:
> On 31.08.2023 15:53, Michael Tretter via gstreamer-devel wrote:
> > On Fri, 18 Aug 2023 14:18:04 +0200, Markus Fritsche via gstreamer-devel
> > wrote:
> > > What additional info should I provide?
> 
> > Can you test if the patches in
> > https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5170
> > help?
> 
> I went ahead and merged the PR as well as the one referenced. I created a
> new device using the uvc-gadget.sh skript from the freedesktop uvc-gadget
> repo:
> 
>         create_frame $FUNCTION 1280 720 mjpeg mjpeg
> 
>         mkdir functions/$FUNCTION/streaming/header/h
>         cd functions/$FUNCTION/streaming/header/h
> #       ln -s ../../uncompressed/yuyv
>         ln -s ../../mjpeg/mjpeg
> 
> (changed 'm' to 'mjpeg' and no yuyv formats).
> 
> > Please also provide the log of the pipeline with GST_DEBUG=uvcsink:5.
> > The
> > uvcsink should log its internal state changes and there should be
> > something
> > right before the pipeline stops.
> 
> With that, I started the Windows Camera App;
> 
[...]
> 0:00:25.997892959   710  0x1c69ec0 DEBUG                uvcsink
> gstuvcsink.c:348:gst_uvc_sink_to_v4l2sink:<uvcsink0> switching to v4l2sink

Here the uvcsink switches to the internal v4l2sink. That means the UVC device
should start streaming,

> 0:00:26.531331084   710  0x1c69e88 WARN                GST_CAPS
> gstpad.c:5788:pre_eventfunc_check:<v4l2sink:sink> caps image/jpeg,
> sof-marker=(int)0, width=(int)1280, height=(int)720,
> pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1,
> interlace-mode=(string)progressive, colorimetry=(string)2:4:7:1,
> multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono
> not accepted

but the internal v4l2sink does not accept the negotiated caps.

Try to add a capsfilter with exactly the caps in this warning to your pipeline
right before the uvcsink. The v4l2sink is a bit picky regarding the caps, as
the V4L2 output device of the UVC gadget is not entirely compliant to the V4L2
API [0].

You may also increase the loglevel of GST_CAPS, check the log for caps that
would be accepted by the v4l2sink, and only add the missing fields to the
capsfilter.

Michael

[0] https://lore.kernel.org/linux-media/20230323-uvc-gadget-cleanup-v1-0-e41f0c5d9d8e@pengutronix.de


More information about the gstreamer-devel mailing list