判断一个MFT是GPU还是CPU?

Determine whether a MFT is GPU or CPU?

我可以使用 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。

how can I check whether the encoder is CPU or GPU based

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

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

MFT_ENUM_FLAG_HARDWARE

The MFT performs hardware-based data processing, using either the AVStream driver or a GPU-based proxy MFT. MFTs in this category always process data asynchronously.

此标志表示此编码器背后没有 CPU 实现,它是一些处理编码的硬件。具体是什么硬件?一般是GPU。

没有 AMD、Intel 或 NVIDIA Media Foundation 编码器 MFT_ENUM_FLAG_HARDWARE 同时“基于 CPU”(如果 H.264/AVC 或 H.265/HEVC 在问题,上述供应商根本没有 CPU/software Media Foundation 形式的编码器)。