【问题标题】:How to create IMFSample from D11 texture for Intel MFT encoder如何从 D11 纹理为英特尔 MFT 编码器创建 IMFSample
【发布时间】:2017-09-11 23:03:45
【问题描述】:

我想使用“英特尔® 快速同步视频 H.264 编码器 MFT”对视频进行编码。 如果我从系统缓冲区创建 IMFSample,它运行良好。就像下面这样:

IMFMediaBuffer *pBuffer = NULL;
MFCreateMemoryBuffer(cbSize, &pBuffer);
BYTE *pData = NULL;
pBuffer->Lock(&pData, NULL, NULL);
memcpy(pData, bufferIhaveinYYYYUV format, buffer size);
pBuffer->Unlock();
IMFSample *pSample = NULL;
MFCreateSample(&pSample);
pSample->AddBuffer(pBuffer);

现在我正在研究是否可以将 ID3D11Texture2D 表面作为输入 (DXGI_FORMAT_NV12, 1280x720) 以提高性能。我尝试将使用 MFCreateVideoSampleFromSurface 或 MFCreateDXGISurfaceBuffer 创建的 IMFSample 实例传递给 IMFTransform::ProcessInput 并进行了多次实验(尝试不同的纹理创建标志),但最好的结果是所有输入样本都被接受,但没有产生输出样本。万一这很重要,我实际上从未尝试将数据上传到纹理,假设这不会对填充垃圾像素数据的纹理产生影响。

我做错了吗?

【问题讨论】:

  • 当你遇到像你这样的问题时,你能给我一些帮助吗? here!
  • 陶马克,你找到解决这个问题的方法了吗?我也遇到了同样的问题。出于性能原因,我目前正在尝试以 NV12 格式提供 ID3D11Texture2D 表面。您能指导我访问任何在线资源吗?

标签: c++ video-encoding ms-media-foundation


【解决方案1】:

您基本上是在重复您的earlier question,但仍然没有添加任何不起作用的代码。

您可以提供正常(内存中)样本并让编码器正常工作的事实表明您所做的一切都是正确的。请注意,在 Direct3D 模式下,您不仅要提供 Direct3D 9 表面或 Direct3D 11 纹理,还要遵守 MFT 的相应初始化。具体来说,纹理和 MFT 的内部必须属于同一个 Direct3D 设备,因此在流式传输开始之前需要执行所需的步骤。需要调用的不仅仅是MFCreateDXGISurfaceBuffer

通常,该方法在 MSDN 上的 Supporting Direct3D 11 Video Decoding in Media Foundation 文章中进行了概述。这同样适用于编码场景。您应该使用IMFDXGIDeviceManager 指针并且您应该使用MFT_MESSAGE_SET_D3D_MANAGER 消息。 MFT 按照 MSDN 的建议运行,并切换到 Direct3D 11 模式,接受基于纹理的样本,携带输入帧数据。

【讨论】:

  • 使用 MFT_MESSAGE_SET_D3D_MANAGER 消息后,效果很好。 @Roman,谢谢。
  • 我在做同样的事情,但在解码器中只得到绿屏。 stackoverflow.com/questions/58503662/…
  • @Ram:鲁道夫没有给你指出正确的方向吗?他还链接了我的 MSDN 答案,其中我提到了哪个属性包含 H.264 参数集数据。
  • @RomanR.,鲁道夫的回答似乎令人信服,但我仍然有点迷失在混乱的海洋中。我知道 SPS/PPS 可能存在问题,但在朝那个方向前进之前,我只是想确保我以正确的方式访问 DirectX 表面,因为我怀疑 DirectX 表面提供的输出。由于资源有限,我什至无法验证我是否做对了。如果无法确认代码的正确性,我将不得不继续确定样本是否嵌入了正确的 SPS/PPS。
  • 另外,您可以在最后一个屏幕截图中看到 ffplay 已经在控制台中打印了图片属性。这不意味着图片属性嵌入到视频样本中吗?这增加了我对视频来源的怀疑。
猜你喜欢
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多