I have found a potential issue with the GStreamer 1.0 implementation of vpuenc relating to multiple instances of vpuenc. I have created a very simple gst1.0 command line that reproduces the issue:
gst-launch-1.0 videotestsrc num-buffers=100 ! tee name=d \
d. ! queue ! vpuenc ! "image/jpeg" ! filesink location=/tmp/file1.jpg \
d. ! queue ! vpuenc ! "video/x-h264" ! filesink location=/tmp/file1.avi
If I repeatedly run this, 1 in 7 or so runs result in the following:
Setting pipeline to PAUSED ...
[INFO] Product Info: i.MX6Q/D/S
====== VPUENC: 4.0.2 build on Oct 13 2015 14:35:57. ======
wrapper: 1.0.57 (VPUWRAPPER_ARM_LINUX Build on Oct 9 2015 12:52:37)
vpulib: 5.4.27
firmware: 3.1.1.46061
[INFO] Product Info: i.MX6Q/D/S
====== VPUENC: 4.0.2 build on Oct 13 2015 14:35:57. ======
wrapper: 1.0.57 (VPUWRAPPER_ARM_LINUX Build on Oct 9 2015 12:52:37)
vpulib: 5.4.27
firmware: 3.1.1.46061
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstVpuEnc:vpuenc1: GStreamer error: negotiation problem.
Additional debug info:
/gstreamer1.0-plugins-base/1.4.1-r0/gst-plugins-base-1.4.1/gst-libs/gst/video/gstvideoencoder.c(1474): gst_video_encoder_chain (): /GstPipeline:pipeline0/GstVpuEnc:vpuenc1:encoder not initialized
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
Are multiple instances of vpuenc supported? Is there anything I can do to overcome this issue?
Thanks,
Andrew Murray