2017-04-14 53 views
0

检索ID2D1DeviceContext我使用的源读取器来读取视频文件视频样本,并使用解码器,然后我用渲染的DirectX9这些样品解码。从的IDirect3DDevice9

我使用IDirect3DDevice9渲染视频帧,并将其按预期方式工作。

https://msdn.microsoft.com/en-us/library/windows/desktop/dn890715(v=vs.85).aspx

那么,如何得到IDirect3DDevice9ID2D1DeviceContext然后添加Chorma键效果,然后渲染:

现在我想在色度键效果添加,一个在下面像描述视频帧?

+0

Chromay键可以直接在使用的IDirect3DDevice9着色器来完成。如果你有兴趣,我已经做了很好的结果。 – mofo77

回答

3

ID2D1DeviceContext需要的DirectX11设备并且不能与过时的IDirect3DDevice9使用。通常,按以下顺序创建对象:DXGI工厂,D2D1工厂,D3D11设备,DXGI设备,D2D1设备,然后最终创建D2D1设备上下文。你可能想检查D2D getting starting guide and samples

有在处理的DirectX9没有真正的点了,除非你是被迫提供对Windows XP的向后兼容性。色度键样本您发布需要Windows 10

+0

所以你的意思是我需要使用DirectX11而不是DirectX9。目前我已经创建了使用DirectX9 API渲染视频帧的示例代码。所以我需要用DirectX11 API替换这个代码。是否有任何示例代码可以从视频文件中读取样本,然后使用DirectX11 API显示它们?基本上我想使用提供的示例将色度键效果应用于视频流。 – User7723337

+0

是的,您需要使用DirectX11(或DirectX10)api。将代码转换为ID3D11Texture2D中的存储帧,然后从中提取IDXGISurface,然后从DXGI表面提取ID2D1Bitmap1,然后使用此D2D位图作为D2D图形/滤镜的渲染目标。一些示例代码可以在我之前发布的页面上找到。 – VTT

0

所以,我怎么得到IDirect3DDevice9ID2D1DeviceContext ...

你不能从另一个。这些接口属于不同的API,如果您使用Media Foundation与Direct3D 9进行解码,则Direct2D(其中ID2D1DeviceContext所属)仅在那里无法使用。

最接近您的请求是使用API​​之间的互操作性。有关介绍,请参阅Direct2D and Direct3D Interoperability Overview,并注意其中提到的Direct3D版本。

参见:Surface Sharing Between Windows Graphics APIs。下图显示了较新的API通过DXGI进行互操作,但不像Direct3D 9那么古老。另请参阅下面的评论以获取更新的MSDN链接。

+0

我需要在使用源读取器读取的视频帧上添加色度键效果。我发现MS为Chroma-Key提供的这些API,所以我试图获得'ID2D1DeviceContext'。所以如果我需要使用MS为Chroma-Key证明的API,我需要遵循哪些方法。 – User7723337

+0

@Roman R.请注意,您发布的图片已经过时。 D2D可以和DX11一起使用(但是DX12还没有)。 DXGI发展到版本1.5等... – VTT

+0

此外[MS媒体基础可以使用DirectX11就好了](https://msdn.microsoft.com/en-us/library/windows/desktop/hh162912(v = vs.85)的.aspx)。 – VTT

相关问题