Media Foundation 如何支持多 GPU 系统?

问题描述 投票:0回答:2

我需要在正确的 GPU(即实现编码器的 GPU)上创建 D3D 设备和上下文。

MFT_ENUM_ADAPTER_LUID
的文档说它需要Windows 10,实际上NVENC MFT即使在Win10上也不会公开该属性。

MFT_ENUM_HARDWARE_URL_Attribute
的文档说该值是设备驱动程序的符号链接,实际上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 技巧在此类系统上不起作用。

c++ windows direct3d ms-media-foundation
2个回答
1
投票

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

您可以通过

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

此外,仅供参考,NVIDIA H.264 编码器 MFT 特别无法与除主视频适配器(包括但不限于this)以外的任何设备正常工作,如果不是到处都有,至少有大量的系统。据我了解,这是 Nvidia 的错误,他们要在 MFT 实现中修复。


0
投票

在 Win10 上有一个新的 API 调用:MFTEnum2,它允许执行以下操作:“发现与特定视频适配器对应的硬件 MFT”。

© www.soinside.com 2019 - 2024. All rights reserved.