Error concealment on Nvidia decoding platforms

Currently i am encoding the live camera content using nvv4l2h265enc and then transmitting using udp.
At receiver side observed frequent frame drops (i.e., one in every 30-40 frames), due to this lot of corruption observed.
Stored the same content and decoded using HM, it is inserting most recent frames in place of dropped frames, due to this playback is smooth.
HM software: Decoder Version [16.24] (including RExt)[Linux][GCC 9.3.0][64 bit]
POC 0 TId: 0 ( I-SLICE, QP 25 ) [DT 0.011] [L0 ] [L1 ] [:,(unk)]
POC 1 TId: 0 ( P-SLICE, QP 27 ) [DT 0.004] [L0 0 ] [L1 ] [:,(unk)]
POC 2 TId: 0 ( P-SLICE, QP 27 ) [DT 0.003] [L0 1 ] [L1 ] [:,(unk)]
POC 3 TId: 0 ( P-SLICE, QP 26 ) [DT 0.003] [L0 2 ] [L1 ] [:,(unk)]
POC 4 TId: 0 ( P-SLICE, QP 25 ) [DT 0.004] [L0 3 ] [L1 ] [:,(unk)]
POC 5 TId: 0 ( P-SLICE, QP 25 ) [DT 0.004] [L0 4 ] [L1 ] [:,(unk)]

Short-term reference picture with POC = 6 is lost or not correctly decoded!
inserting lost poc : 6
copying picture 5 to 6 (7)
POC 7 TId: 0 ( P-SLICE, QP 23 ) [DT 0.007] [L0 6 ] [L1 ] [:,(unk)]

How Nvidia decoders are handling this situation?
How avdec_h265 handles this?
is there any options for inserting the most recent frames just like HM decoder.

We would need to check if hardware decoder can have identical behavior as software decoder. Please check if yo observe the issue by comparing decoded data between ffmpeg and nvv4l2decoder. Please decode the steeam by running:

$ ffmpeg -i stream.265 -f rawvideo ffmpeg.yuv
$ gst-launch-1.0 filesrc location= stream.265 ! h265parse ! nvv4l2decoder ! nvvidconv ! video/x-raw,format=I420 ! filesink location=decoded.yuv

And run the command to play the frames:

$ export DISPLAY=:0
$ gst-launch-1.0 filesrc location= decoded.yuv ! videoparse format=i420 width=1920 height=1080 ! xvimagesink

If the steps are able to show the issue, please share us the stream so that we can give it a try.

Thanks. Verified with nvv4l2decoder, HM, avdec_h265 and ffmpeg.
HM is inserting the missed frames and reconstructing, nvv4l2decoder is not inserting the missed frames but it is reconstructing, using most recent frame. Output looks same as HM.
No error handling observed in ffmpeg and avdec_h265.

Since output of nvv4l2decoder looks same as HM, it should work ok in handling the condition. Please realize hardware decoder is not flexible as software decoders, which can change behavior by modifying and recompiling the code.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.