Nvdec does not support decoding H264 LTR (long term reference)?

Hi expert,

I have a h264 bitstream with long term reference, it can be decoded by ffmpeg h264dec perfectly. But when decoding via nvdec, there are mosaics, seems nvdec does not support LTR feature.
Is it true? LTR is a common feature, nvdec cannot support it?
cannot find document talking about this.

I have GT730 and geforce 1660 device, both of them cannot decode ok.
tree_dragout_420p.h264 (11.9 MB)

the bitstream is uploaded, please help to check.

Luis Zhang

Hi there @273945071 Luis, welcome to the NVIDIA developer forums!

As far as I am aware the latest Video Codec SDK should support LTR as well.

The video you attached, is that a screen recording of the issue or is it the actual bitstream, that is supposed to show issues when decoded with NVDEC?

Second question, how are you using NVDEC to decode the bitstream? Do you have some sample code that you could share?

Thanks!

Hi MarkusHoHo,

Thanks for your reply!

tree_dragout_420p.h264 attached is a actual bitstream generated by x264 with LTR(also used memory_management_control_operation related information), it can be decoded by ffmpeg+h264(CPU decode, implemented by ffmpeg) via command:

ffmpeg -i tree_dragout_420p.h264 -s 1920x1080 -pix_fmt yuv420p rec_OK.yuv ///can decode perfect yuv, no mosaics

I have tried two way to decode via NVDEC, yuv generated both contains lot of abnormal mosaics:
(1) using ffmpeg+nvdec
ffmpeg -c:v h264_cuvid -i tree_dragout_420p.h264 out_420.yuv ///h264_cuvid spcecifies decoding by nvdec

(2) using AppDecLowLatency.exe -i tree_dragout_420p.h264 -o recbySDK.yuv /// AppDecLowLatency.exe is in SDK, my path is \Video_Codec_SDK_11.1.5\Samples_build\build\Debug
AppDecLowLatency is a official sample in SDK, I did not change any code of it, just compiled and built it, then run with parameters above.

If you can decode the bitstream tree_dragout_420p.h264, can you share your tool or parameters , anything helpfull would be appreciated.

Thanks.
!

Hi MarkusHoHo,

Perhaps I have found the cause.

I read all nvidia device can only support up to level5.1 when decoding, here: NVDEC Video Decoder API Programming Guide - NVIDIA Docs
In bitstream my mv range is larger than the limitation of level5.1, so there is problem.

Why nvidia can only support level5.1 ?? level6 is common now, why not support it?

thanks.

Luis Zhang.

Good to hear that you could figure out the issue.

Well, there are a lot of reasons, none of which I am at liberty to share.

Looking at adoption of different codecs right now, you will see that h.264 really is not the predominant anymore, it is much rather HEVC (or H.265). Even there the adoption of Level 6 was well below 10% until recently. So I would not call that common quite yet.

But I am sure as soon as more people are buying 8k@60Hz TVs to their home, NVIDIA will also move to the next level of video codecs. Which by then will likely be AV1.

1 Like

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