Hardware video converter and encoder support for 10 bit formats on Jetson TX2


We are trying to implement and video encoding pipeline using NVIDIA hardware encoders. The video stream comes from an FPGA camera via PCIe in YUV422 10bit interleaved format. We have a couple of questions regarding the implementation. This is for Nvidia Jetson TX2 platform with latest Jetpack. We want to achieve 4K at 60 FPS. The plan is to use Nvidia multi media APIs and not gstreamer plugins.

  1. We see that the Nvidia hardware encoders do not support interfleaved format. Is it possible to use Nvidia hardware video converter APIs to convert from YUV422 10 bit interleaved to YUV420 10 bit semi planar that can be fed to the hardware encoder?

  2. Does Nvidia hardware encoder APIs support h264 encoding of 10 bit YUV420 stream in baseline, main, high and MVC profiles?


Color conversion is supported for formats defined in nvbuf_utils.h

/** BT.601 colorspace - Y/CbCr 4:2:2 10-bit semi-planar. */
/** BT.601 colorspace - Y/CbCr 4:2:0 10-bit multi-planar. */

However, interleave-to-progressive conversion is not supported. Only progressive-to-progressive is supported.

We support it in h265 encoding. Please check

For more detail, please check the document:


  1. I am using the sample /usr/src/jetson_multimedia_api/samples/07_video_convert for video format conversion using the hardware.

When i tried the sample application with 10bit to 8bit conversion, i get the error “unsupported pixel formats” from NvBuffer::fill_buffer_plane_format() in NvBuffer.cpp.

No 10bit formats were listed in the fill_buffer_plane_format().

Does the converter using Tegra Multimedia API supports 10 bit to 8 bit conversion ( NV12_10LE to NV12 )?

NOTE: I had an experiment with Gstreamer for hardware format conversion using nvvidconv plugin, where it seems to support 10bit to 8bit format conversion.

  1. One more query related to Gstreamer, does the nvoverlaysink support any 10bit formats as input ?

10-bit video decoding is demonstrated in 08_video_dec_drm. You can get 10-bit content from
and give it a try.

10-bit to 8-bit conversion is supported. You can refer to the source code and modify it to call NvBufferTransform().

10-bit rendering is supported in NvDrmRenderer. It is not supported in gstreamer nvoverlaysink.