windows - 如何使用硬件视频缩放器?

标签 windows image video directx video-processing

现代显卡具有硬件视频缩放器,例如作为 AMD Avivo、NVIDIA PureVideo 或 Intel ClearVideo 的一部分。比如AMD的Avivo whitepaper说:

"The image output scalers support up to 6 vertical filter taps and up to 10 horizontal filter taps. These scalers are high-precision polyphase scalers that are highly programmable; they are suitable for upscaling by practically any ratio, or for downscaling by up to 4:1."

问题:如何在 Windows 程序中使用视频缩放器硬件?

假设已经存在解码视频帧,例如在 IDirect3DSurface9 中,目标是使用硬件缩放器在屏幕上显示该视频帧。如果可能,我想使用像 Media Foundation 或 DirectShow 这样的 Windows API,而不是特定于供应商的 API。我主要对放大 1.5-3 倍左右的相当大的系数感兴趣。

第二个问题是,如何控制视频缩放器的硬件参数? (比如上面提到的多相滤波器中的滤波器系数)

编辑:赏金开始。请提供在视频卡中使用视频缩放器硬件的任何方式的示例(这可能是供应商特定的,或使用任何版本的 DirectX/DirectShow/Media Foundation API)。

编辑:更新:一些使用视频缩放器硬件的程序示例:WinDVD、PowerDVD、madVR。我想知道如何完成他们所做的事情,即使用 GPU 的内置视频硬件缩放器,不是使用 D3D 着色器和纹理采样器实现的缩放器。

最佳答案

仅访问硬件 - Direct2D(Direct3D 可能是更好的选择)就可以了。但是要访问视频缩放器,您需要使用 DirectShow 或 Windows Media Foundation(我并没有经常使用它)。

AFAIK - “Resizer DMO”过滤器将访问正确的硬件并为您执行视频大小调整。 Here是使用此过滤器的代码示例。

编辑:如果您使用的是 MFT,则 Video Processor Filter也应该同样高效。如文档中所述,“视频处理器支持 GPU 加速视频处理,使用 Microsoft Direct3D 11。有关详细信息,请参阅 MF_SA_D3D11_AWARE。”

另请参阅 this关于硬件 MFT 属性的部分,尤其是 MFT_ENUM_HARDWARE_URL_Attribute 让您检查该 MFT 是否在硬件中实现Note that DXVA 与 Media Foundation 集成并将其功能公开为 MFT。因此,在硬件中实现的 MFT 很可能使用底层硬件,并且是 Windows 本身使用的方法。

希望这对您有所帮助!

关于windows - 如何使用硬件视频缩放器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691857/

相关文章:

c - 如果由服务映射,则网络驱动器不可用

python - 如何从网络位置使用 python 的 win32 扩展

python - 无法从 python os.path.abspath 获取有效路径名

vb.net - Microsoft.DirectX.AudioVideoPlayback,如何设置跟踪语言?

windows - 外壳问题 : alias doesn't expand

Android - 来自 URL 的 ImageView 不会在 ListView 中 fill_parent

python - OpenCV - 将PNG的透明部分变成白色

java - BufferedImage 泄漏 - 有其他选择吗?

SSL 页面嵌入来自 Vimeo 的非 SSL 视频

ios - 如何从YouTube视频中删除视频控件?