【问题标题】:How to use hardware H.264 encoder in Windows Media Foundation如何在 Windows Media Foundation 中使用硬件 H.264 编码器
【发布时间】:2021-06-14 15:28:26
【问题描述】:

我正在编写一个使用 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,我可以使用相同的代码逻辑进行编码吗?

非常感谢

【问题讨论】:

    标签: ms-media-foundation


    【解决方案1】:

    你检查过这个标志吗:MFT_ENUM_FLAG_HARDWARE

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

    您需要使用:MFTEnumEx

    因为硬件编码器应该是异步处理的,所以你需要改变 MSDN 例子中的逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 2014-09-08
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 2016-08-21
      相关资源
      最近更新 更多