Hi,
i was able to stably reproduce deadlock in decoder. I use 00_video_decode without patches, original code without add usleep for simulation live stream. And start two 00_video_decode process
- first process:
while true; do ./video_decode H264 --disable-rendering --input-nalu ../../../video_samples/bunny.h264 ; done
- secondary process:
while true; do ./video_decode H264 --disable-rendering --input-nalu ../../../video_samples/transcoded_bunny_first_gop.h264 ; done
After a while, one of the processes freezes
Looks like, dec_capture_loop_fcn
func deadlock in capture_plane dqBuffer
(gdb) bt
#0 0x0000007fb7f332a4 in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55b308d3a8) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1 0x0000007fb7f332a4 in __pthread_cond_wait_common (abstime=0x0, mutex=0x55b308d350, cond=0x55b308d380) at pthread_cond_wait.c:502
#2 0x0000007fb7f332a4 in __pthread_cond_wait (cond=0x55b308d380, mutex=0x55b308d350) at pthread_cond_wait.c:655
#3 0x0000007fb7570fdc in () at /usr/lib/aarch64-linux-gnu/tegra/libnvos.so
#4 0x0000007fb39eabf0 in TegraV4L2_Poll_CPlane () at /usr/lib/aarch64-linux-gnu/tegra/libtegrav4l2.so
#5 0x0000007fb73e52e4 in plugin_ioctl () at /usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvvideocodec.so
#6 0x0000007fb7e14d68 in v4l2_ioctl (fd=14, request=3227014673) at libv4l2.c:1152
#7 0x000000557328fcc0 in NvV4l2ElementPlane::dqBuffer(v4l2_buffer&, NvBuffer**, NvBuffer**, unsigned int) (this=0x55b2fc8468, v4l2_buf=..., buffer=0x7fa710d5b8, shared_buffer=0x0, num_retries=0)
at NvV4l2ElementPlane.cpp:126
#8 0x0000005573258720 in dec_capture_loop_fcn(void*) (arg=0x7fd9a886e8) at video_decode_main.cpp:1055
#9 0x0000007fb7f2d088 in start_thread (arg=0x7fd9a884cf) at pthread_create.c:463
#10 0x0000007fb79a0ffc in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
(gdb) frame 8
#8 0x0000005573258720 in dec_capture_loop_fcn (arg=0x7fd9a886e8) at video_decode_main.cpp:1055
1055 if (dec->capture_plane.dqBuffer(v4l2_buf, &dec_buffer, NULL, 0))
(gdb) list
1050 memset(&v4l2_buf, 0, sizeof(v4l2_buf));
1051 memset(planes, 0, sizeof(planes));
1052 v4l2_buf.m.planes = planes;
1053
1054 /* Dequeue a filled buffer. */
1055 if (dec->capture_plane.dqBuffer(v4l2_buf, &dec_buffer, NULL, 0))
1056 {
1057 if (errno == EAGAIN)
1058 {
1059 usleep(1000);
(gdb) p ctx.got_eos
$2 = true
I feel it doesn’t matter what type of video, interlace or progressive.
bunny.h264 and transcoded_bunny_first_gop.h264 is progressive h264 from l4t2-demo/video_samples at main · maxlapshin/l4t2-demo · GitHub
jetson xavier nx, l4t nvidia sdk 32.6.1
# dpkg -l | grep l4t
ii cuda-repo-l4t-10-2-local-10.2.89 1.0-1 arm64 cuda repository configuration files
ii nvidia-l4t-3d-core 32.6.1-20210916210945 arm64 NVIDIA GL EGL Package
ii nvidia-l4t-apt-source 32.6.1-20210726122859 arm64 NVIDIA L4T apt source list debian package
ii nvidia-l4t-bootloader 32.6.1-20210726122859 arm64 NVIDIA Bootloader Package
ii nvidia-l4t-camera 32.6.1-20210916210945 arm64 NVIDIA Camera Package
ii nvidia-l4t-configs 32.6.1-20210726122859 arm64 NVIDIA configs debian package
ii nvidia-l4t-core 32.6.1-20210726122859 arm64 NVIDIA Core Package
ii nvidia-l4t-cuda 32.6.1-20210916210945 arm64 NVIDIA CUDA Package
ii nvidia-l4t-firmware 32.6.1-20210916210945 arm64 NVIDIA Firmware Package
ii nvidia-l4t-graphics-demos 32.6.1-20210916210945 arm64 NVIDIA graphics demo applications
ii nvidia-l4t-gstreamer 32.6.1-20210916210945 arm64 NVIDIA GST Application files
ii nvidia-l4t-init 32.6.1-20210916210945 arm64 NVIDIA Init debian package
ii nvidia-l4t-initrd 32.6.1-20210726122859 arm64 NVIDIA initrd debian package
ii nvidia-l4t-jetson-io 32.6.1-20210726122859 arm64 NVIDIA Jetson.IO debian package
ii nvidia-l4t-jetson-multimedia-api 32.6.1-20210916210945 arm64 NVIDIA Jetson Multimedia API is a collection of lower-level APIs that support flexible application development.
ii nvidia-l4t-kernel 4.9.253-tegra-32.6.1-20210726122859 arm64 NVIDIA Kernel Package
ii nvidia-l4t-kernel-dtbs 4.9.253-tegra-32.6.1-20210726122859 arm64 NVIDIA Kernel DTB Package
ii nvidia-l4t-kernel-headers 4.9.253-tegra-32.6.1-20210726122859 arm64 NVIDIA Linux Tegra Kernel Headers Package
ii nvidia-l4t-libvulkan 32.6.1-20210916210945 arm64 NVIDIA Vulkan Loader Package
ii nvidia-l4t-multimedia 32.6.1-20210916210945 arm64 NVIDIA Multimedia Package
ii nvidia-l4t-multimedia-utils 32.6.1-20210916210945 arm64 NVIDIA Multimedia Package
ii nvidia-l4t-oem-config 32.6.1-20210726122859 arm64 NVIDIA OEM-Config Package
ii nvidia-l4t-tools 32.6.1-20210726122859 arm64 NVIDIA Public Test Tools Package
ii nvidia-l4t-wayland 32.6.1-20210916210945 arm64 NVIDIA Wayland Package
ii nvidia-l4t-weston 32.6.1-20210916210945 arm64 NVIDIA Weston Package
ii nvidia-l4t-x11 32.6.1-20210916210945 arm64 NVIDIA X11 Package
ii nvidia-l4t-xusb-firmware 32.6.1-20210726122859 arm64 NVIDIA USB Firmware Package