When using NvEncode to generate H264 files, I am having an issue with the generated Pic_Timing SEI messsages. Specifically the dpb_output_delay field.
The Pic_Timing SEI message for all non-I-Frames and the very first I-Frame has a dpb_output_delay value of 2.
The Pic_Timing SEI message for all I-Frames (besides the very first one) have a dpb_output_delay value of 16.
I believe these values are incorrect and should be 2 instead.
This is causing incorrect timestamps to be generated for these I-Frames when being muxed into a transport stream.
This behavior can be easily reproduced with the Video Codec SDK sample application AppEncD3D11.
I used the following command line options:
Command Line: -i “LocalPathToBRGAFile” -o “LocalPathToOutputH264File” -s 1280x720 -gpu 0 -rc cbr_hq -fps 50 -gop 25 -bf 0 -bitrate 1000000 -maxbitrate 1000000 -vbvbufsize 500000 -vbvinit 450000 -preset default -profile main
I also had to make 2 small code changes in the file AppEncD3D11.cpp.
- I enabled the writing of the picture timing SEI message by setting the NV_ENC_CONFIG_H264.outputPictureTimingSEI parameter to 1.
- I increased the number of frames being encoded so that multiple I-frames would be written. The default behavior is to encode a single frame. I updated the code to loop and encode 100 frames.
I am using Windows 10 Pro with a Quadro K1200.
The NVIDIA driver release is R418 U2 (419.17) WHQL.
The driver version reported by device manager is 220.127.116.117.
And I am using Video SDK 9.0.20.
Is there a way to configure the dpb_output_delay field within the PIC_TIMING SEI message?
Or is this a bug?