gst-launch-1.0 is failing to read a video on Jetpack 4.3

Hi,

I am trying to read a video using gst-launch-1.0 on Nano board with Jetpack 4.3. I was experiencing the below error.

ram@rams-pc:~$ gst-launch-1.0 filesrc location=test.mp4 ! decodebin ! videoconvert ! xvimagesink

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
nvbuf_utils: Could not get EGL display connection
Opening in BLOCKING MODE 
NvMMLiteOpen : Block : BlockType = 261 
NVMEDIA: Reading vendor.tegra.display-size : status: 6 
NvMMLiteBlockCreate : Block : BlockType = 261 
WARNING: from element /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstCapsFilter:capsfilter0: not negotiated
Additional debug info:
gstbasetransform.c(1415): gst_base_transform_reconfigure (): /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstCapsFilter:capsfilter0:
not negotiated
ERROR: from element /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstQTDemux:qtdemux0: Internal data stream error.
Additional debug info:
qtdemux.c(6073): gst_qtdemux_loop (): /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstQTDemux:qtdemux0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

while the above gst command is working well on Jetpack 4.2.

Could somebody please help me to resolve this issue?

Thanks,
Ramakrishna

Hi,
Please insert nvvidconv and try again:

$ gst-launch-1.0 filesrc location=test.mp4 ! decodebin ! nvvidconv ! videoconvert ! xvimagesink

Thanks for the reply DaneLLL. I am still confused why it is working without nvidconv in previuos releases. An answer could help to avoid future mistakes.

Also, the above pipeline is not able to play .flv files. Without nvvidconv we can play this kind of files.

Thanks,
Ram

Hi,
It looks like different elements are picked by decodebin. You may set

$ export GST_DEBUG=*FACTORY*:4

to see what elements are used in Jetpack4.2 and 4.3.

Since xvimagesink accepts video/x-raw, it is reasonable to have nvvidconv for doing video/x-raw(memory:NVMM) to video/x-raw conversion.

Hi DaneLLL,

With Jetpack 4.3 I found the below information with GST_DEBUG - NOT WORKING

gst-launch-1.0 filesrc location=test.mp4 ! decodebin ! videoconvert ! xvimagesink
0:00:00.050241608 10718   0x5574280900 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "filesrc"
0:00:00.053684131 10718   0x5574280900 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "decodebin"
0:00:00.054038253 10718   0x5574280900 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:359:gst_element_factory_create: creating element "typefind" named "typefind"
0:00:00.054931397 10718   0x5574280900 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "videoconvert"
0:00:00.057473484 10718   0x5574280900 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "xvimagesink"
0:00:00.057941879 10718   0x5574280900 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "pipeline"
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
0:00:00.107027526 10718   0x557428e990 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "qtdemux"
0:00:00.108493339 10718   0x7f8c079b70 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "multiqueue"
0:00:00.111476893 10718   0x7f8c079b70 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "h264parse"
0:00:00.112533635 10718   0x7f8c079b70 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "capsfilter"
nvbuf_utils: Could not get EGL display connection
0:00:00.174326067 10718   0x7f840084f0 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "nvv4l2decoder"
Opening in BLOCKING MODE 
NvMMLiteOpen : Block : BlockType = 261 
NVMEDIA: Reading vendor.tegra.display-size : status: 6 
NvMMLiteBlockCreate : Block : BlockType = 261 
WARNING: from element /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstCapsFilter:capsfilter0: not negotiated
Additional debug info:
gstbasetransform.c(1415): gst_base_transform_reconfigure (): /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstCapsFilter:capsfilter0:
not negotiated
ERROR: from element /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstQTDemux:qtdemux0: Internal data stream error.
Additional debug info:
qtdemux.c(6073): gst_qtdemux_loop (): /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstQTDemux:qtdemux0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

With Jetpack 4.2 I found the below information with GST_DEBUG with the same command - WORKING

0:00:00.040174646  3395   0x556b4faf00 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "filesrc"
0:00:00.043119269  3395   0x556b4faf00 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "decodebin"
0:00:00.043377635  3395   0x556b4faf00 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:359:gst_element_factory_create: creating element "typefind" named "typefind"
0:00:00.044073215  3395   0x556b4faf00 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "videoconvert"
0:00:00.046205427  3395   0x556b4faf00 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "xvimagesink"
0:00:00.046554897  3395   0x556b4faf00 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "pipeline"
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
0:00:00.130345737  3395   0x556b50d990 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "qtdemux"
0:00:00.131848032  3395   0x7f9c079b70 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "multiqueue"
0:00:00.134091123  3395   0x7f9c079b70 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "h264parse"
0:00:00.134970862  3395   0x7f9c079b70 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "capsfilter"
nvbuf_utils: Could not get EGL display connection
0:00:00.186971295  3395   0x7f940084a0 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "omxh264dec"
NvMMLiteOpen : Block : BlockType = 261 
NVMEDIA: Reading sys.display-size : status: 6 
NvMMLiteBlockCreate : Block : BlockType = 261 
Allocating new output: 608x416 (x 12), ThumbnailMode = 0
OPENMAX: HandleNewStreamFormat: 3595: Send OMX_EventPortSettingsChanged: nFrameWidth = 600, nFrameHeight = 404 
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:10.000138608
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

With Jetpack version change one or the other libraries are being changed and old applications (created for old Jetpacks) are not running. Here for every Jetpack we have to modify the applications to run smoothly. This has become a pain point for an active Jetson developer. Perhaps you should preserve compatibility for old applications as well.

Thanks,
Ram

Hi,
On Jetpack4.3, it selects

0:00:00.174326067 10718   0x7f840084f0 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "nvv4l2decoder"

On Jetpack4.2, it selects

0:00:00.186971295  3395   0x7f940084a0 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:361:gst_element_factory_create: creating element "omxh264dec"

omxh264dec has implementation of tranforming video/x-raw(memory:NVMM) to video/x-raw in source pad. It is actually same as what nvvidconv does.
We are deprecating omx plugins, so would like to suggest use nvv4l2decoder and hook nvvidconv in the pipeline. If you would like to keep using omxh264dec, you can get gst-v4l2 source code and lower the rank setting in gstv4l2videodec.c:

gst_element_register (plugin, "nvv4l2decoder", GST_RANK_PRIMARY + 11, subtype);