Accessing the Direct3D device inside VMR9
I 开发者_C百科have a video decoder filter that lives inside a graph with VMR9 or EVR as the video renderer.
VMR9 and EVR use Direct3D to do the actual rendering. With EVR, I can access the D3D device with relative ease (I just ask for it using IMFGetService::GetService).
However, VMR9 does not expose IMFGetService, and, more generally, IMFGetService seems to be specific to Vista & above, like the entire DXVA2 architecture.
Is there a way to reach the Direct3D device inside VMR9?
you'll have access to the vmr9's d3d surfaces if you provide your own implementation of an allocator/presenter.
Check out the msdn page on vmr renderless mode
http://msdn.microsoft.com/en-us/library/dd390957(VS.85).aspx
The GetSurface call is what you need to get the d3d surface: http://msdn.microsoft.com/en-us/library/dd390502(v=VS.85).aspx
GetSurface is part of the IVMRSurfaceAllocator9 interface.
精彩评论