gpt4 book ai didi

c++ - 如何在 Windows 桌面应用程序的 MediaFoundation SourceReader 中使用英特尔硬件 MJPEG 解码器 MFT?

转载 作者:搜寻专家 更新时间:2023-10-31 02:12:57 27 4
gpt4 key购买 nike

我正在使用 MediaFoundation SourceReader 技术开发 USB 摄像头流式桌面应用程序。该相机支持 USB3.0,并为 1080p MJPG 视频格式分辨率提供 60fps。

我用Software MJPEG Decoder MFT把MJPG转成YUY2帧,再转成RGB32帧画在窗口上。使用此软件解码器时,我只能在窗口上渲染 30fps,而不是 60fps。我已在此站点上发布了一个问题,并获得了一些使用英特尔硬件 MJPEG 解码器 MFT 解决丢帧问题的建议。

我在调用 IMFTransform::ProcessInput() 方法时遇到错误 0xC00D36B5 - MF_E_NOTACCEPTING。为了解决这个错误,MSDN 建议异步使用 IMFTranform 接口(interface)。因此,我使用 IMFMediaEventGenerator 接口(interface)为每个 In/Out 样本获取 GetEvent。成功后,我只能处理一个输入样本,然后连续 IMFMediaEventGenerator::GetEvent() 方法返回 MF_E_NO_EVENTS_AVAILABLE 错误(GetEvent() 是同步的)。

我已尝试为 SourceReader 和 IMFTransform 配置异步回调,但未调用 MFAsyncCallback::Invoke 方法,因此我计划使用 GetEvent 方法。

我是否遗漏了什么?如果是,有人指导我在我的项目中使用英特尔硬件解码器吗?

最佳答案

英特尔硬件 MJPEG 解码器 MFT 是 asynchronous MFT如果您直接管理它,则您有责任应用异步模型。您似乎正在这样做,但您没有提供可以解决问题的信息。是的,您应该使用上面链接的文章的 ProcessInputProcessOutput 部分中描述的事件模型。当您获得第一帧时,您应该进一步调试以使其能够顺利连续处理。

当您使用像我们的源阅读器媒体 session 这样的 API 时,媒体基金会本身会处理 MFT。它能够在适当的时候进行同步和异步消费。但是,在这种情况下,您不会执行 IMFTransform 调用,甚至从您模糊的描述来看,您的做法是错误的。

关于c++ - 如何在 Windows 桌面应用程序的 MediaFoundation SourceReader 中使用英特尔硬件 MJPEG 解码器 MFT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42028159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com