Как убедиться, что GStreamer захватил кадры перед декодированием JPEG - PullRequest
0 голосов
/ 17 октября 2018

У меня есть конвейер GStreamer, который захватывает поток веб-камеры mjpeg с 3-х отдельных камер и сохраняет 2 кадра в каждой.Я выполняю эти команды на шине USB 3.0 Odroid XU4 с Ubuntu 18.04. При этом я обнаружил, что иногда получаю искаженное изображение, подобное этому, в коллекции выходных изображений:

garbage image

Это не всегда происходит, но, возможно, 1/5 выполнения, изображение может выглядеть так.

Затем я обнаружил, что если я декодирую jpeg, а затем перекодирую, этого никогда не произойдет.,Смотрите следующий конвейер:

gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=2 ! \
image/jpeg,width=3840,height=2160 ! queue ! jpegdec ! queue ! \
jpegenc ! multifilesink location=/root/cam0_%02d.jpg v4l2src \ 
device=/dev/video1 num-buffers=2 ! image/jpeg,width=3840,height=2160 ! \
queue ! jpegdec ! queue ! jpegenc ! multifilesink  \
location=/root/cam1_%02d.jpg v4l2src device=/dev/video2 num-buffers=2 !  \ 
image/jpeg,width=3840,height=2160 ! queue ! jpegdec ! queue ! jpegenc ! \
multifilesink location=/root/cam2_%02d.jpg

Теперь, когда я запускаю этот конвейер, у меня есть 1/5 шанс получить эту ошибку:

/GstPipeline:pipeline0/GstJpegDec:jpegdec0: No valid frames decoded before end of stream

Есть ли способ заставить gstreamer ждатьдля фреймов вместо просто провала?Я попытался это добавить! Очередь!в вышеупомянутом конвейере, но безуспешно.

...