Does NVIDIA Video Codec SDK support ARM?

I want to know NVIDIA Video Codec SDK supports ARM.

I’m trying to hardware encode by NVENC + Video Codec SDK on ARM machine(AWS EC2 G5g insntance/NVIDIA T4G).
Though system requirements doesn’t say SDK supports ARM, It seems that ffmpeg with NVIDIA GPU haredware acceleration work properly on AWS EC2 G5g insntance/NVIDIA T4G from the following logs.

$ ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i yuv420p.y4m -c:v h264_nvenc output.mp4
ffmpeg version N-107322-g03d81a044a Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
  configuration: --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda-11.7/include --extra-ldflags=-L/usr/local/cuda-11.7/lib64
  libavutil      57. 27.100 / 57. 27.100
  libavcodec     59. 36.100 / 59. 36.100
  libavformat    59. 26.100 / 59. 26.100
  libavdevice    59.  6.100 / 59.  6.100
  libavfilter     8. 41.100 /  8. 41.100
  libswscale      6.  6.100 /  6.  6.100
  libswresample   4.  6.100 /  4.  6.100
Input #0, yuv4mpegpipe, from 'yuv420p.y4m':
  Duration: 00:00:13.51, start: 0.000000, bitrate: 745751 kb/s
  Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p(tv, top first), 1920x1080, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 29.97 tbn
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_nvenc))
Press [q] to stop, [?] for help
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf59.26.100
  Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, top coded first (swapped)), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 2000 kb/s, 29.97 fps, 30k tbn
    Metadata:
      encoder         : Lavc59.36.100 h264_nvenc
    Side data:
      cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 4000000 vbv_delay: N/A
frame=  405 fps=319 q=32.0 Lsize=    3462kB time=00:00:13.38 bitrate=2119.4kbits/s speed=10.5x  
video:3458kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.118147%

ffmpeg has its own include files for nvdec/nvenc so the SDK is not needed:
https://git.videolan.org/?p=ffmpeg/nv-codec-headers.git;a=tree;f=include/ffnvcodec;h=d663d2dcb84e12188c9da778ff181f15a33484aa;hb=HEAD

1 Like

Thank you for response!

I understood that ffmpeg has no relationships with the SDK and I should try to confirm that the SDK sample applications work on ARM machine.

So though NVIDIA documentates the following line in this document, but it is incorrect, right?.

This document explains ways to accelerate video encoding, decoding and end-to-end transcoding on NVIDIA GPUs through FFmpeg which uses APIs exposed in the NVIDIA Video Codec SDK.

That document is really confusing, stumbling across it. I suspect it’s just a mix of current and outdated info.
I don’t know though whether the ffmpeg headers are just a subset of the sdk’s headers.

1 Like

Thank you generix.

As you said, It seems that this document confused me if ffmpeg doesn’t use Video Codec SDK API.

ffmpeg has its own include files for nvdec/nvenc so the SDK is not needed:
https://git.videolan.org/?p=ffmpeg/nv-codec-headers.git;a=tree;f=include/ffnvcodec;h=d663d2dcb84e12188c9da778ff181f15a33484aa;hb=HEAD

I confirmed that ffnvcodec/nv-codec-headers contains nvEncodedAPI.h whose Video Codec SDK version 11.1.
So, I believe ffmpeg uses the Video Codec SDK, unless its header is provided even though it is not needed.