我正在开发使用MediaFoundation SourceReader技术的USB摄像头流式桌面应用程序。该相机具有USB3.0支持,并可提供60fps的1080p MJPG视频格式分辨率。如何在MediaFoundation SourceReader for Window Desktop应用程序中使用Intel硬件MJPEG解码器MFT?
我使用的软件解码器MJPEG MFT到MJPG转换为YUY2帧,然后转换成RGB32帧来绘制窗口上。在使用这个软件解码器时,我能够在窗口上只渲染30fps,而不是60fps。我在这个网站上发布了一个问题,并得到了一些建议,使用英特尔硬件MJPEG解码器MFT来解决帧丢失问题。
我所面临的误差0xC00D36B5 - 调用IMFTransform :: ProcessInput()方法时MF_E_NOTACCEPTING。为了解决这个错误,MSDN建议异步使用IMFTranform接口。所以,我用IMFMediaEventGenerator接口GetEvent为每个输入/输出示例。成功,我只能处理一个输入样本,然后连续IMFMediaEventGenerator :: GetEvent()方法返回MF_E_NO_EVENTS_AVAILABLE误差(GetEvent()是同步的)。
我试着为SourceReader配置异步回调以及IMFTransform,但是MFAsyncCallback :: Invoke方法没有调用,因此我计划使用GetEvent方法。
我缺少什么吗?如果是,有人引导我使用英特尔硬件解码器到我的项目?
你试过先组装在topoedit拓扑? – Mgetz
感谢您的回复,Mgetz。相机支持YUY2和MJPG视频格式。最初,相机播放YUY2视频格式并需要更改MJPG格式。我知道如何在DirectShow中构建图形。我不知道如何从YUY2切换到MJPEG视频格式。请问如何为MJPG格式组装拓扑?而且,我在MediaSession拓扑中添加了这个解码器,一切都成功了,并且在事件中收到了0XC00D5212(MF_E_TOPO_CODEC_NOT_FOUND)。 – Abi
因此,建议尝试使用SDK附带的topoedit实用程序来组装拓扑并测试它的工作原理。如果你不能在拓扑中构造一个拓扑......这可能是不可能的。 – Mgetz