AnsweredAssumed Answered

[imx6slevk] Trouble creating a fake video source using v4l2loopback, gstreamer, and mfw_v4lsink

Question asked by Lars Karlström on Oct 1, 2014
Latest reply on Oct 31, 2014 by Leonardo Sandoval Gonzalez
Branched to a new discussion

Greetings!

I've been running circles around this one for far too long, and I feel like I must be missing something totally obvious. Please do enlighten me as to what I'm doing wrong.

 

I'm working with the i.MX6 Solo Lite EVK, and my current goal is to set up a fake video device, e.g. /dev/video1, to use as a video source for a SIP call. In the future, I'll be acquiring the real video from a remote source, but naturally I'd like all of that to remain transparent to my SIP application. After reading up a bit on the topic, GStreamer seems like the way to go here. Using Yocto, I've set up an image that includes the fsl-gstreamer-full packagegroup, as well as v4l-utils, gst-ffmpeg, and libav. Furthermore, I've compiled the v4l2loopback kernel module and set up a dummy device:

 

$ vtl2-ctl --list-devices
Dummy video device (0x0000) (v4l2loopback:0):
    /dev/video1

 

After (far too long), I also found out that the correct sink to use isn't v4l2sink, but rather mfw_v4lsink [source]. When I attempt to run gst-launch, however, I get an error:

 

$ gst-launch -v videotestsrc ! mfw_v4lsink device=/dev/video1
MFW_GST_V4LSINK_PLUGIN 3.0.11 build on Sep 15 2014 16:50:01.
Setting pipeline to PAUSED ...
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2
Pipeline is PREROLLING ...
VIDIOC_S_FMT output overlay: Invalid argument
>>V4L_SINK: Actually buffer status:
        hardware buffer : 12
        software buffer : 0
ERROR: from element /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal data flow error.
Additional debug info: (*path omitted*)
streaming task paused, reason error (-5)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Total rendered:0
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = NULL
Freeing pipeline ...
[--->FINALIZE v4l_sink

 

Interestingly, it doesn't complain when executing the command for /dev/video0 -- the physical camera port on the board -- but when attempting to use this source in my SIP client I get the error that the device is busy. Perhaps of further interest is that the exact same error occurs if I specify a device that doesn't even exist. Attempting to use the autovideosink yields no error, but when I attempt to use the device I get an error stating "v4l2: /dev/video1 is no video capture device."

 

Would really appreciate some insights on this, as my project pretty much hinges on getting this up and running at the moment.

Thank you very much in advance!

 

Message was edited by: Lars Karlström Added reference regarding mfw_v4lsink and fixed some formatting.

Outcomes