【问题标题】:Determine whether a MFT is GPU or CPU?确定 MFT 是 GPU 还是 CPU?
【发布时间】:2021-11-20 10:12:57
【问题描述】:

我可以使用MFT_FRIENDLY_NAME_Attribute 获取MFT 的名称,并使用MFT_ENUM_FLAG_HARDWARE 检查它是硬件还是软件,如何检查编码器是基于CPU 还是基于GPU?

即Intel QuickSync 是 CPU,NVIDIA H.264 Encoder MFT 是 GPU,等等

编码器是通过MFTEnumEx(MFT_CATEGORY_VIDEO_ENCODER, ...); 获取的,它提供了一个IMFActivate 数组,我可以从那里获取MFT 标志和编码器的GUID。

【问题讨论】:

标签: winapi video-encoding ms-media-foundation


【解决方案1】:

如何检查编码器是基于 CPU 还是基于 GPU 的

MFT 不指明它们是基于 CPU 还是基于 GPU。他们不必这样做,然后这也没有多大意义。

你已经发现的MFT_ENUM_FLAG_HARDWARE标志已经告诉你你想要的信息。

MFT_ENUM_FLAG_HARDWARE

MFT 使用 AVStream 驱动程序或基于 GPU 的代理 MFT 执行基于硬件的数据处理。此类别中的 MFT 始终异步处理数据。

这个标志表明这个编码器后面没有 CPU 实现,它是一些处理编码的硬件。具体是什么硬件?通常是 GPU。

没有带有MFT_ENUM_FLAG_HARDWARE 并且同时“基于 CPU”的 AMD、Intel 或 NVIDIA Media Foundation 编码器(如果 H.264/AVC 或 H.265/HEVC 存在问题,则没有 CPU/软件来自上述供应商的 Media Foundation 形式的编码器)。

【讨论】:

  • 谢谢,根据标志的评论 - 为什么我有英特尔 CPU 和 NVIDIA GPU 时,我会获得用于硬件的英特尔 QuickSync H264?
  • 大多数英特尔 CPU 都有板载 GPU,上面带有编码器 ASIC,您安装视频驱动程序,并且您有视频编码器 MFT。
  • 当我使用 Intel QuickSync MFT 时,我的 CPU 使用率很高,而且 GPU 没有被触及,所以我确信它使用 CPU 进行编码。另外,我正在尝试制作某种优先级列表,没有硬编码,有没有办法做到这一点?比如更喜欢 NVIDIA 而不是 Intel。
  • 我怀疑您是否正确解释了您所看到的内容。同样在大多数情况下,这不仅仅是告诉您是否想要这个或那个 MFT:性能取决于更多因素,尤其是。编码器输入到底是什么。也许代码和细节如何测量负载会有所帮助。
  • 我相信这是因为英特尔使用了集成 GPU。
猜你喜欢
  • 2011-07-17
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
相关资源
最近更新 更多