我正在使用 NVidia 的 NvDec CUVID 功能实现视频解码器。根据(严重不足)手册的第 2 章,解码限制由 GPU 架构指定。即,最大 h265 水平分辨率在 GP10x 上为 8192,在 GP100 上为 4096 或更小,并且在低于 GM206 的任何架构上均不受支持。
如何使用 CUDA 检测此类架构?我应该从计算能力中推断出来还是什么?如果我应该推断它,是否有架构与计算能力的表格?
虽然没有返回GPU代号的函数,但NVIDIA提供cuvidGetDecoderCaps()
API让用户查询底层硬件视频解码器的能力。
cuvidGetDecoderCaps()
可以Video_Codec_SDK_x.x.x
从 nvenc官方网站下载的详细示例。一个例子Samples/NvDecodeD3D11/NvDecodeD3D11.cpp
:
CUVIDEOFORMAT videoFormat = g_pVideoSource->format();
CUVIDDECODECAPS videoDecodeCaps = {};
videoDecodeCaps.eCodecType = videoFormat.codec;
videoDecodeCaps.eChromaFormat = videoFormat.chroma_format;
videoDecodeCaps.nBitDepthMinus8 = videoFormat.bit_depth_luma_minus8;
if (cuvidGetDecoderCaps(&videoDecodeCaps) != CUDA_SUCCESS)
{
printf("cuvidGetDecoderCaps failed: %d\n", result);
return;
}
if (!videoDecodeCaps.bIsSupported) {
printf("Error: This video format isn't supported on the selected GPU.");
exit(1);;
}