在使用 IMFSourceReader 时转换流媒体类型

Posted

技术标签:

【中文标题】在使用 IMFSourceReader 时转换流媒体类型【英文标题】:converting a stream media type while using IMFSourceReader 【发布时间】:2013-05-14 08:12:15 【问题描述】:

我正在编写一个摄像头驱动程序之上的应用程序,我正在以同步方式使用 IMFSourceReader 从驱动程序中提取 IMFSamples。我能够配置每个流的 SourceReader 媒体类型,并以我的相机驱动程序支持的 2 种视频格式(NV12 和 YUY2)生成样本。我想要的是一种可以像 RGB 一样轻松显示的视频格式,所以我一直在寻找可以转换这些媒体类型的 MFT,但我不确定我是否可以将它连接到 SourceReader,正如我从媒体基金会文档中了解到的那样看到 IMFSourceReader 可以加载解码器,但解码器不是转换器……

我想知道在仍然使用 IMFSourceReader 的同时,将视频源输出媒体类型转换为其他媒体类型(如 RGB)的最佳方法是什么(除了自己进行转换)?

【问题讨论】:

【参考方案1】:

在 Windows 8 上,您可以设置 MF_SOURCE_READER_ENABLE_ADVANCED_VIDEO_PROCESSING 属性来获得 GPU 加速的 YUV 到 RGB 的转换。

在早期版本的 Windows 上,您可以将 DXVA2 与 D3D9 一起使用,只需使用 IDirect3DDevice9::StretchRect() 在 YUV 表面和 RGB 表面之间进行复制。如果图形驱动程序支持,这将在复制期间进行转换。您应该调用 ID3D9::CheckDeviceFormatConversion() 来检查驱动程序是否支持您正在执行的颜色转换,然后再依赖它。

【讨论】:

以上是关于在使用 IMFSourceReader 时转换流媒体类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 IMFSourceReader 打开视频文件

如何通过 IMFSourceReader 使用自定义堆

IMFSourceReader.ReadSample 在读取流 1 后从不触发回调。对流 0 的调用工作正常

使用 IMFSourceReader 进行音频流式传输(Microsoft Media Foundation)

如何使用 Media Foundation 从 IMFSourceReader 播放音频缓冲区

处理来自 IMFSourceReader 和 IMFSample 的图像数据