H264 Encode YUV4:4:4 issue

Hello,

I am using Nvidia Video Codec to encode YUV4:4:4 to H.264 .

  1. Operation system : Ubuntu 16.04
  2. Driver : NVIDIA-Linux-x86_64-384.98
  3. SDK: Video_Codec_SDK_8.0.14
  4. My Card: P400

I compiled Samples/NvEncoder and it generate an executable file “NvEncoder”
Then I use following command:
./NvEncoder -i …/test.yuv -o test.264 -inputFormat 1 -size 1280 720
which produce encoded h264 file and “NvEncoder” has following output:

Encoding input : “…/test.yuv”
output : “test.264”
codec : “H264”
size : 1280x720
bitrate : 5000000 bits/sec
vbvMaxBitrate : 0 bits/sec
vbvSize : 0 bits
fps : 30 frames/sec
rcMode : CONSTQP
goplength : INFINITE GOP
B frames : 0
QP : 28
Input Format : YUV 444
preset : DEFAULT
Picture Structure : Frame Mode
devicetype : CUDA

Issue is the “test.264” file has unknown profile_idc in its sps.
It gives " 00 00 00 01 67 F4 00 1F"
F4 is the profile_idc = 244
There is no definition of 244 in H264 Recommendation

66:Baseline
77:Main profile
88:Extended profile
144: High 4:4:4 profile
122: High 4:2:2 profile
110: High 10 profile
100: High profile

I’m actually not sure what happened with my encoder.

244 is a legal value. The definition of SPS data in the spec has:

if( profile_idc = = 100 | | profile_idc = = 110 | |
profile_idc = = 122 | | profile_idc = = 244 | | profile_idc = = 44 | |
profile_idc = = 83 | | profile_idc = = 86 | | profile_idc = = 118 | |
profile_idc = = 128 )

And later, for example:

Conformance of a bitstream to the High 4:4:4 Intra profile is indicated by constraint_set3_flag being equal to 1 with
profile_idc equal to 244. Decoders conforming to the High 4:4:4 Intra profile at a specific level shall be capable of
decoding all bitstreams in which all of the following conditions are true:
– profile_idc is equal to 44, 100, 110, 122, or 244,
– constraint_set3_flag is equal to 1,
– level_idc represents a level less than or equal to the specified level.

There are other cases with 244. Search for “244” in the spec.