如何在Windows Media Foundation中使用硬件H.264编码器

时间:2015-07-06 01:23:00

标签: ms-media-foundation mft

我正在编写一个使用H.264编码器MFT进行视频编码的程序。

我用来选择/创建编码器的方式如下:

MFT_REGISTER_TYPE_INFO encoderInfo;
encoderInfo.guidMajorType = MFMediaType_Video;
encoderInfo.guidSubtype = MFVideoFormat_H264;
// H.264 Encoder class id is not exposed, so we have to enumerate
HRESULT hr = MFTEnum(MFT_CATEGORY_VIDEO_ENCODER, 0, NULL, &encoderInfo, NULL, &pCLSIDs, &nCount);
if (nCount == 0) {
   break;
}
//Create H.264 Encoder MFT instance
ciEncoder.CreateObject(pCLSIDs[0], IID_IMFTransform);

现在,在我的机器上,调用MFTEnum后,nCount将设置为1。我只想知道,如果我的机器上有可用的认证硬件编码器,nCount会设置为2吗?然后我就能选择我想要的那个?

另一个问题是,我正在使用同步处理模式对帧进行编码,如

中所述

https://msdn.microsoft.com/en-us/library/windows/desktop/aa965264(v=vs.85).aspx#create_mft

如果我可以枚举并选择硬件编码器MFT,我可以使用相同的代码逻辑进行编码吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

你检查了这个标志:MFT_ENUM_FLAG_HARDWARE

  

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

您需要使用:MFTEnumEx

因为硬件编码器应该异步处理,所以需要从MSDN示例中更改逻辑。