首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UWP硬件视频解码- DirectX12 vs媒体基础

UWP硬件视频解码- DirectX12 vs媒体基础
EN

Stack Overflow用户
提问于 2020-11-11 01:14:44
回答 2查看 804关注 0票数 3

我想使用DirectX 12将H264文件的每一帧加载到纹理中并渲染它。然而,关于这样做的信息很少,而且Microsoft网站只有有限的表面文档。

Media Foundation提供了大量的示例,并提供了硬件支持的解码。媒体基金会是对DirectX的包装,还是在做别的事情?

如果不是,与DX 12方法相比,Media Foundation等效项的优化程度会有多低?

从本质上讲,媒体基础和DirectX12视频解码的最大区别是什么?

我已经在我的引擎中使用了DirectX 12,所以这是专门针对DX12的。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-11 17:40:10

硬件视频解码来自DXVA (DXVA2)接口。它的DirectX 11演进是D3D11视频设备的D3D11应用编程接口的一部分。微软以媒体基础API原语的格式在硬件加速解码器上提供了包装器。此解码器提供硬件解码功能的使用,以及回退到软件解码方案。

请注意,即使Media Foundation可用于UWP开发,您的选择也是有限的,并且不能直接为您提供像前面提到的transform这样的原语。但是,如果您使用更高级别的API(特别是Media Foundation ),则可以在Source Reader API应用程序中利用硬件加速的视频解码。

Media Foundation实现提供与Direct3D 11的互操作性,特别是在视频编码/解码部分,但不能与Direct3D 12互操作。您将无法开箱即用Media Foundation和DirectX 12。您必须实现GPU11/12互操作来在API之间传输数据(或者,在适用的情况下,使用对相同Direct3D数据的共享访问)。

或者,你将不得不转向底层ID3D12VideoDevice::CreateVideoDecoder,这是前面提到的DXVA2和Direct3D 11视频解码API的进一步发展,具有类似的用法。

不幸的是,如果媒体基金会以糟糕的文档和难以启动的开发而臭名昭著,那么Direct3D 12视频解码没有任何信息,您将不得不享受先驱的感觉。

无论哪种方式,所有提到的都是硬件辅助视频解码实现的相对较薄的包装器,具有相同的出色性能。我建议采用媒体基础路径,并在必要时实现11/12互操作。

票数 3
EN

Stack Overflow用户

发布于 2020-12-08 22:24:11

如果你将一个D3D12设备传递给IMFDXGIDeviceManager::ResetDevice,你会得到很多由媒体基础引起的D3D12错误。

如果你慢慢地调用IMFSourceReader::ReadSample,这些错误是可以避免的。使用此方法时,采用同步模式还是异步模式都无关紧要。而且,它应该有多慢取决于运行程序的机器。我在ReadSample调用之间使用::Sleep(1)用于同步模式播放来自网络的流,而::Sleep(3)用于同步模式播放我机器上的本地mp4文件。

别问我是谁。我的名字是“先驱者”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64773552

复制
相关文章

相似问题

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