Video rendering on TX1 - X11/DRM/OpenGL/OpenMAX


I want to display YUV video content through HDMI on tegra X1. I am trying to decide on the best interface to use other than gstreamer plugins. I need some clarifications on video rendering APIs on Tegra X1

1. I see that X11 windowing system is the default video rendering method on Tegra X1. 
	Can standard X11 API's be used to display video on Tegra X1? 
2. I found drm header files at /usr/include/drm on tegra board, but couldn't find the library  yet. Can DRM/DRI be used directly?
3. Can OpenGL be used as another option for rendering?

4. In gst-omx source code, nvoverlaysink uses OMX API to render video. I know that OMX might not be supported in future releases. But in the current version, does OMX internally use one of the above methods to render video?

What is the basic difference between the above methods?

Which is best method (w.r.t performance,memory usage and processing delay) among the above for rendering 4:2:0 YUV video without any graphics ?

Are there any documentation or reference code available for these?

A small subset of information…if the ABI version of the installed X11 server is kept, then full hardware acceleration and use of anything working with that ABI should be ok. In “/var/log/Xorg.0.log” you will see this as ABI versions:

(II) Module ABI versions:
   X.Org ANSI C Emulation: 0.4
   X.Org Video Driver: 15.0
   X.Org XInput driver : 20.0
   X.Org Server Extension : 8.0

Hardware accelerated OpenGL and OpenGLES are supported by the nVidia video driver if this ABI version is used. Information on OpenGL and OpenGLES is here:

I haven’t seen it used yet, but Vulkan should be an interesting substitute for X11 (this would probably increase performance but is new and not as well supported in the wild).