我想对Desktop Duplication API框架进行编码,以便在使用Media Foundation对其进行编码后通过网络发送。当我调用IMFTransform :: ProcessInput时,我陷入了E_NOTIMPL错误,这让我有些茫然。
这些是我到目前为止所完成的步骤,我将详细介绍它们,因为花了我几天的时间来收集网络上稀疏分散的信息中的所有内容,因此,如果解决了该问题,有望对其他人有所帮助。下面的所有内容均会显示一个S_OK:
所有这些之后,我使用上面创建的IMFSample调用MFTransform :: ProcessInput,并获得“未实现的E_NOTIMPL”作为HRESULT。我已经读过我应该在上面的IMFTransform编码器中设置一个IMFDXGIDeviceManager,所以我使用了以下方法:
在最后一步,我的HRESULT上出现另一个“未实现E_NOTIMPL”,在那儿我不知道自己在做什么错了或需要做什么。
答案 0 :(得分:0)
要做的第一件事是检查您的编码器是否为MF_SA_D3D11_AWARE
我认为不是,请阅读:MFT_MESSAGE_SET_D3D_MANAGER
如果MFT不支持此消息,则应返回E_NOTIMPL
但是有一件事很奇怪:DirectX Surface Buffer
调用IMFMediaBuffer :: Lock。通常不建议这样做,因为它会迫使对象从Direct3D表面复制内存,然后再次返回。
ProcessInput应该起作用了。