I gave up on a pure C# EVR presenter. But I now have a working EVR custom presenter, in all C++. I still have some more work to do on it, but it's the first step in having MediaFoundation support for WPF. I am committed to supporting Any CPU builds, so I'm building in the code to automatically use the correct native library based on the the bitage of the process. Further more, you shall not have to register any COM.
One bug that I'll leave for later is the custom EVR presenter can really only do 1 queued sample at a time for performance reasons. To give some background, the EVR will queue up some decompressed video samples for 'smoother' playback. If the presenter had three or six queued samples, the WPF D3DImage class must be updated with the current D3D surface. D3DImage seems to take a performance hit every time you set the surface backbuffer. One thing I wanted to try is to internally create a D3DImage for each sample and just show the D3DImage which is currently needs to be rendered. This may be more performant, or it may be just as bad or worse. Anyone want to benchmark this for me?
I hope to have a beta out to you guys before Mix09!