如何将 IMFMediaBuffer 或 IMF2DBuffer 中的像素渲染到 HWND 中?

问题描述 投票:0回答:1

我正在尝试更好地理解Microsoft 媒体基础框架。比如说,如果我的应用程序中有一个 win32 窗口(或其 HWND 句柄),如何将

IMF2DBuffer
(或至少从
IMFMediaBuffer
)中的像素渲染到其中?

PS。我是否需要使用旧的 GDI:设备上下文,

CreateDIBSection
/
GetDIBits
BitBlt
/
StretchBlt

c++ video direct3d ms-media-foundation direct2d
1个回答
0
投票

您也可以使用 GDI,但这已经过时了。

在大多数情况下,当您要创建现代、高性能、节能的应用程序时,您至少会期望一定程度的硬件加速。通常,您的视频来自编码流,而您的

IMFMediaBuffer
来自视频解码器,其视频帧由视频内存中的 DirectX 纹理支持。您希望在不访问其实际位的情况下渲染它。在其他情况下,您使用 Direct3D 来生成内容,或者使用另一个视频 API(例如 Direct2D)与 Direct3D 进行互操作。

这里的共同点是您的内容已经在视频内存中,并且您希望渲染到 Direct3D 交换链中以进行可视化。通常,这涉及简单的 Direct3D 场景,并且您将此视频帧作为资源渲染到其中。

您通常会更喜欢 Direct3D11 而不是 Direct3D9,因为后者也已经过时了,尽管 Media Foundation 也有点生疏(具体来说,公众熟知的 MF 示例使用的是 Direct3D9)。

但是您当然可以走捷径并将图像刷新到旧的 DIB 中并与 GDI 一起呈现。

© www.soinside.com 2019 - 2024. All rights reserved.