我正在编写一个使用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,我可以使用相同的代码逻辑进行编码吗?
非常感谢
答案 0 :(得分:1)
你检查了这个标志:MFT_ENUM_FLAG_HARDWARE
MFT使用AVStream驱动程序或基于GPU的代理MFT执行基于硬件的数据处理。此类别中的MFT始终异步处理数据。
您需要使用:MFTEnumEx
因为硬件编码器应该异步处理,所以需要从MSDN示例中更改逻辑。