D3D9SurfaceImage stores its contents in RGB32. This is because I implemented it, and I don't know how to paint the NV12 GPU surfaces we get out of DXVA decoders using a shader or whatever. Someone who has a clue about graphics would know however. If we stored D3D9SurfaceImage in YUV and only converted to RGB on paint, we'd half the memory cost of storing video frames when using DXVA.
Is this an option? I was sort of under the impression that only supported conversion method was using StretchRect.
I looked into this a while back, I believe you're right. Attempting to create a new NV12 texture with DXGI sharing enabled fails, so we can't get the data to the compositor in NV12 format. It does work if we use the D3D11 DXVA API though, so that's an option for the future.