如何判断DXVA解码器是否已经回归软件解码

时间:2015-03-19 05:36:10

标签: c# c++ video ms-media-foundation dxva

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

在约束中,您会看到“DXVA加速的最大保证分辨率为1920×1088像素;在更高分辨率下,如果底层硬件支持,则使用DXVA进行解码,否则,使用软件进行解码。“

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

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

我们知道硬件不支持4K解码,理论上它应该回归软件。 但是,我们发现无论它应该做什么,我们都会遇到很多损坏或黑框。

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

谢谢

2 个答案:

答案 0 :(得分:1)

H264 MFT不会暴露它是否使用DXVA进行解码。

它使用IDirectXVideoDecoderService::CreateVideoDecoder创建DXVA解码器,因此您可以手动调用此函数以查看它是否成功。

我在Mozilla bug 1193547

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

答案 1 :(得分:0)

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

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