Opengl video data ecoder H264 H265 using cuda or Gstreamer

Hi All,

We are trying to stream our video after our OpenGL application, since TX1’s Gstreamer V4l2 interface have limited performance on receiving 4K video, and also there are no Gstreamer’s plugins available can do and handle 4K video blending( alpha blending but not overlay ), so we skipped Gstreamer.

We are using OpenGL to handle all the video processing ( V4l2 data to OpenGL and Alpha Blending with other video layer ) and rendering, and it works fine( 4K@30 now, 4k@60 should be also handled ).

Our next plan is to encode this video data and stream out( H264 or H265 ), right now we can generate I420 raw video data on GPU side, since reading data back from GPU to CPU host is very slow, this is not a promising method. so my question are,

  1. Are there have encoders other than Gstreamer’s OMX to encode video?

  2. How about CUDA encoder on TX1, is that support H264@4k or H265 HEVC?

  3. If Gstreamer is the only choice, are there any ways passing I420 data residing in GPU to Gstreamer somehow?

Thanks.
Kevin

Hi Kevin

  1. Current tegra HW encoder only support Gstreamer via OMX stack on linux base OS.
  2. There is a nvcuvid for the cuda encoder, but current not support on Tegra devices.
  3. You can allocate a share memory that can be accessed by GPU and CPU. Below link are the possible API.

http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__MEMORY.html#group__CUDART__MEMORY_1g0673f737518f60b82389a0ea1aaddcfa