gst-launch -e flag causes usb camera disconnection

Rafael Sierra tt.babyvitals.01 at gmail.com
Mon Jun 19 03:41:05 UTC 2017


Hi

Just a quick update on this issue.

On 2017年03月10日 15:38, Rafael Sierra wrote:
> Hi
>
> I'm recording MJPEG video from a Logitech C920 USB camera, with this 
> pipeline:
>
> gst-launch-1.0 -e v4l2src device=/dev/video0 \
>    ! image/jpeg,width=1280,height=720,framerate=24/1 \
>    ! jpegparse ! avimux ! filesink location=mjpeg-01.avi
>
> I use the -e flag so, according to the documentation, an EOS signal is 
> sent and the video file is properly created/closed.
> The problem is that after I use the -e flag in a pipeline, almost any 
> subsequent pipeline that access the camera will fail and cause a 
> camera disconnection, where it needs to be replugged to be usable 
> again. If I remove the -e flag, there are no problems, but the video 
> file is saved without an index and is not readily usable.
>
> Questions:
> - Is the pipeline a proper one?
> - Is this normal behavior? Or is it a known bug?
> - What can I do to avoid the issue with the -e flag? Note that I need 
> it  to record usable video files.
> - Would it be worth it to avoid gst-launch and write my pipeline in 
> C/C++, or would I eventually hit the same issue?

It's been I while since I found the issue. In the mean time I have 
tested a few environments with these results:

- The issue only happens with the Logitech C920 (Exact model is Logicool 
C920r)
- The issue happens on different PCs / models: Desktop / notebook / 
Intel NUC
- The issue happens on different OS versions: Ubuntu 16.04 / 16.10 / 17.04
- The issue also happens on latest GStreamer release (1.12) as well as 
1.8.3.

Additionally, take the following pipeline:
$ gst-launch-1.0 -e v4l2src device=/dev/video0 ! autovideosink

It has different behaviors depending on how I stop it:
- If I send SIGINT (Ctrl-C) on the terminal, the issue occurs.
- If I close the window created by autovideosink, the issue _doesn't_ occur.

These different behaviors make me thing this is not a driver issue, but 
something not being handled properly within gst-launch.
I believe this is a bug so I'm preparing a bug report I'll try to post ASAP.

If anybody in the list  can confirm the issue I'd appreciate it.

Thanks,
Rafael

>
> I've tried some debugging and came out with the steps below to 
> reproduce the issue.
> System Configuration: (Ubuntu 16.04.1)
>
> $ uname -a
> Linux NUC02 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 
> 2017 x86_64 x86_64 x86_64 GNU/Linux
>
> $ gst-launch-1.0 --version
> gst-launch-1.0 version 1.8.3
> GStreamer 1.8.3
>
> Camera is /dev/video0. Using the lsusb command between launches 
> ensures the next pipeline launch will fail, it is not necessary, it 
> just makes it fail faster.
> -------------------------------
> # Check camera is present:
> ll /dev/vid*
> crw-rw----+ 1 root video 81, 0  Mar 10 15:20 /dev/video0
>
> # launch simple pipeline; interrupt it after a few seconds:
> $ gst-launch-1.0 -ev v4l2src device=/dev/video0 ! autovideosink
> Setting pipeline to PAUSED ...
> Pipeline is live and does not need PREROLL ...
> Setting pipeline to PLAYING ...
> New clock: GstSystemClock
> /GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = 
> "video/x-raw\,\ format\=\(string\)YUY2\,\ width\=\(int\)2304\,\ 
> height\=\(int\)1536\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ 
> interlace-mode\=\(string\)progressive\,\ 
> colorimetry\=\(string\)2:4:7:1\,\ framerate\=\(fraction\)2/1"
> /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGhostPad:sink.GstProxyPad:proxypad0: 
> caps = "video/x-raw\,\ format\=\(string\)YUY2\,\ width\=\(int\)2304\,\ 
> height\=\(int\)1536\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ 
> interlace-mode\=\(string\)progressive\,\ 
> colorimetry\=\(string\)2:4:7:1\,\ framerate\=\(fraction\)2/1"
> /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvImageSink:autovideosink0-actual-sink-xvimage.GstPad:sink: 
> caps = "video/x-raw\,\ format\=\(string\)YUY2\,\ width\=\(int\)2304\,\ 
> height\=\(int\)1536\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ 
> interlace-mode\=\(string\)progressive\,\ 
> colorimetry\=\(string\)2:4:7:1\,\ framerate\=\(fraction\)2/1"
> /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0.GstGhostPad:sink: 
> caps = "video/x-raw\,\ format\=\(string\)YUY2\,\ width\=\(int\)2304\,\ 
> height\=\(int\)1536\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ 
> interlace-mode\=\(string\)progressive\,\ 
> colorimetry\=\(string\)2:4:7:1\,\ framerate\=\(fraction\)2/1"
> ^Chandling interrupt.
> Interrupt: Stopping pipeline ...
> EOS on shutdown enabled -- Forcing EOS on the pipeline
> Waiting for EOS...
> Got EOS from element "pipeline0".
> EOS received - stopping pipeline...
> Execution ended after 0:00:05.728170506
> Setting pipeline to PAUSED ...
> Setting pipeline to READY ...
> Setting pipeline to NULL ...
> Freeing pipeline ...
>
> # check the device is still there (not mandatory): OK:
> $ lsusb
> Bus 002 Device 003: ID 046d:082d Logitech, Inc. HD Pro Webcam C920
> ...
>
> #launch same pipeline a second time; now it fails after hanging for a 
> while:
> $ gst-launch-1.0 -v v4l2src device=/dev/video0 ! autovideosink
> Setting pipeline to PAUSED ...
> ERROR: Pipeline doesn't want to pause.
> ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could 
> not open device '/dev/video0' for reading and writing.
> Additional debug info:
> v4l2_calls.c(620): gst_v4l2_open (): 
> /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
> system error: Device or resource busy
> Setting pipeline to NULL ...
> Freeing pipeline ...
>
> # ls: the camera is gone; lsusb command will hang. Need to replug
> $ ll /dev/vid*
> ls: cannot access '/dev/vid*': No such file or directory
> -------------------------------------------
> Notes:
> - I use the -e flag because I need to record proper video files. The 
> above test uses a simplified pipeline just to show the issue with the 
> flag
> - I have similar trouble with two other cameras. These don't 
> disconnect but the image gets distorted.
>   1. VF0560 Live! Cam Optia AF (Creative)
>   2. QuickCam Pro for Notebooks (Logitech)
>
>
> Thank you,
> Rafael
>



More information about the gstreamer-devel mailing list