首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >媒体基础: Direct3D 11的自定义拓扑

媒体基础: Direct3D 11的自定义拓扑
EN

Stack Overflow用户
提问于 2020-12-30 11:44:49
回答 1查看 134关注 0票数 1

我必须手动构建视频拓扑,其中包括使用加载和配置mpeg2videoextension (解码器)。否则默认的topoloader无法自动解析视频流。我使用默认的拓扑加载器来解析拓扑的其余部分。

由于我是手动加载解码器,文档上说我负责获取解码器和硬件加速管理器。(这个解码器是D3D11感知的)。如果我创建一个DXGI设备,然后在代码中创建管理器,我可以将管理器传递给解码器,它似乎可以工作。

然而,文档还说,“在媒体会话场景中,视频渲染器创建Direct3D 11设备。”

如果是这种情况,我如何获得该设备的句柄?我假设我应该在设备管理器中使用该设备来传递到解码器。

我在绕圈子。所有示例代码都使用IDirect3DDeviceManager9。我无法让这些样本正常工作。所以我决定使用11,但是我找不到任何使用11的示例代码。

谁能给我指个方向?

EN

回答 1

Stack Overflow用户

发布于 2020-12-30 16:07:55

微软没有为这一挑战提供一个很好的解决方案。事实上,媒体基金会的标准视频渲染器是EVR,它只“知道”Direct3D 9。所以你不能用普通的DXGI设备管理器把它和解码器结合起来。较新的微软应用程序使用不同的API 11感知渲染器,该渲染器不作为Direct3D发布:您可以利用这些渲染服务作为包装API的一部分,例如播放视频的UWP或HTML5媒体元素。MPEG-2解码器扩展主要针对这些扫描器,如果您将其插入到较旧的Media Foundation拓扑中,则会给您留下一个问题。

我可以想出一些解决这个问题的方法,但没有一个听起来是完全完美的:

  1. 停止使用EVR,转而使用DX11VideoRenderer:微软在此示例中提供了一个起点,您可以自己建立所需的布线来共享DXGI设备管理器。

  1. 使用多个Direct3D设备并在两个设备之间传输视频帧;应该有图形API互操作来帮助以高效的方式传输视频帧,但总的来说,这在2020年看起来是一项愚蠢的工作,尽管是可行的。如果您可以接受通过系统内存传输带来的性能影响,这条路径看起来或多或少是可以接受的,这使得实现起来更容易。

  1. 停止使用MPEG-2解码器扩展,并在低级GPU之上实现您自己的解码器,并实现硬件辅助解码器,而无需退回到软件,在这种情况下,您可以更多地控制使用DXVA2服务和安装到渲染器的设备。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65501767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档