我需要在正确的GPU(实现编码器的GPU)上创建D3D设备和上下文。
MFT_ENUM_ADAPTER_LUID的文档说它需要Windows 10,实际上NVENC MFT甚至在Win10上也没有公开该属性。
MFT_ENUM_HARDWARE_URL_Attribute的文档说,该值是设备驱动程序的符号链接(symbolic link),实际上NVENC MFT不返回任何GUID链接,该值与MFT_FRIENDLY_NAME_Attribute中的相同,特别是L"NVIDIA H.264 Encoder MFT"MFT_ENUM_HARDWARE_VENDOR_ID_Attribute似乎可以正常工作,返回L"VEN_10DE",因此我可以将其解析为一个数字,并与VendorId结构的DXGI_ADAPTER_DESC字段进行匹配。但是,该属性的文档说该支持是可选的。

我不喜欢可选,我想要可靠。如何将硬件编码器MFT与GPU匹配?即将有AMD拥有两个GPU的PC,例如华硕FX505DY,在这种系统上,厂商ID技巧将无法使用。

最佳答案

MFT实例[至少在实例化阶段]不是特定于设备的。如果您的系统中有两个启用NVENC的视频适配器,则编码器MFT相同,具有相同的CLSID。

您可以通过 MFT_MESSAGE_SET_D3D_MANAGER 消息来指定要使用的GPU,该参数将封装D3D设备并且特定于GPU。在此处为编码器选择GPU。

此外,FYI NVIDIA H.264编码器MFT特别无法与主视频适配器(包括但不限于this)一起使用,即使不是在所有地方,至少在许多系统中也无法正常工作。据我了解,这是Nvidia的错误,他们将在MFT实现中对其进行修复。

09-25 20:37