Nvv4l2decoder blocks indefinitely

Please provide complete information as applicable to your setup.

• Hardware Platform (Jetson / GPU) GPU T4, Titan V
• DeepStream Version 6.2, 6.1.1
• JetPack Version (valid for Jetson only)
• TensorRT Version 8.5.2
• NVIDIA GPU Driver Version (valid for GPU only)
• Issue Type( questions, new requirements, bugs)

Some possibly defective video files (observed for h264, vp9) cause nvv4l2decoder to block indefinitely.

Reproduce like this:

gst-launch-1.0 uridecodebin uri=https://github.com/webmproject/libwebm/blob/libwebm- ! fakesink

This blocks indefinitely, and when pressing Ctrl+C, one sees that setting the pipeline to NULL also blocks. This is a huge problem in our application, as it can effectively block the application.

One can reduce the problem to

gst-launch-1.0 filesrc location=testdata/accurate_cluster_duration_last_frame.webm ! typefind ! matroskademux ! multiqueue ! nvv4l2decoder ! fakesink

Replacing nvv4l2decoder by vp9dec gives an error, but at least does not block.

Attaching gdb to the blocked process shows the following:

(gdb) thread apply all bt

Thread 8 (Thread 0x7f1cb37fe700 (LWP 5248)):
#0  futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x7f1c90004810) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x7f1c900047c0, cond=0x7f1c900047e8) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x7f1c900047e8, mutex=0x7f1c900047c0) at pthread_cond_wait.c:647
#3  0x00007f1cc632e093 in NvOsSemaphoreWait(NvOsSemaphoreRec*) () at ///opt/nvidia/deepstream/deepstream-6.2/lib/libcuvidv4l2.so
#4  0x00007f1cc633d057 in cuvidv4l2_dec_thread_func(void*) () at ///opt/nvidia/deepstream/deepstream-6.2/lib/libcuvidv4l2.so
#5  0x00007f1cc632deb0 in  () at ///opt/nvidia/deepstream/deepstream-6.2/lib/libcuvidv4l2.so
#6  0x00007f1cc80fc609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#7  0x00007f1cc8021133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

It appears nvv4l2decoder is deadlocked.

The libwebm repository contains more files which cause this behavior (GitHub - webmproject/libwebm: Mirror only. Please do not send pull requests., testing/testdata)

We’ll check it. But there may be something special about these videos. It cannot be played by other player too(VLC, FFMPEG, Google Chrome). But we can play the bbb_480p_vp9_opus_1second.webm video. So you can also ask the author of the libwebm repository how to decode these videos correctly.

Thanks. The problem is not so much that the videos cannot be decoded. But the nvv4l2decoder cannot switch to state NULL and blocks. This should never happen even on invalid data.

I can repro the problems with the video you attached. We’ll check and fix it in the future version.