如何判断 DXVA 解码器是否已退回到软件解码

How to tell if a DXVA decoder has fallen back to software decoding

来自https://msdn.microsoft.com/en-us/library/windows/desktop/dd797815%28v=vs.85%29.aspx

在约束中,您读到 "The maximum guaranteed resolution for DXVA acceleration is 1920 × 1088 pixels; at higher resolutions, decoding is done with DXVA, if it is supported by the underlying hardware, otherwise, decoding is done with software."

有没有办法检测解码是在软件中完成的?

我们在尝试解码 4K H264 视频时遇到 AMD 图形控制器问题。

我们知道硬件不支持4K解码,理论上应该退回到软件。 然而,我们发现无论它应该做什么,我们都会收到大量损坏或黑帧。

我希望我们能够检测到 DXVA 是否已退回到 SW 解码,在这种情况下,我们根本不会尝试使用 DXVA,而是使用完整的软件路径。

谢谢

您是否尝试过 运行 您的应用程序通过 mftrace(包含在 Windows SDK 中)? mftrace 输出非常详细,通常会让您知道哪个 MFT 用于编码。当硬件编码可用时,您可能能够发现正在使用的不同 MFT。

例如,对于 H264 编码,当系统硬件支持时,将使用 Intel MFT(一种硬件编码器)而不是标准的 Microsoft 编码器。

H264 MFT 不公开是否使用 DXVA 解码。

它使用IDirectXVideoDecoderService::CreateVideoDecoder创建DXVA解码器,所以你可以手动调用这个函数看看它是否成功。

我在 Mozilla bug 1193547

中为此添加了完整的解释(和 apitrace 日志)