The cited Microsoft documentation is for Media Foundation, which is orthogonal to Direct3D
That's a good point. I got the impression early that they were analogous as when I was testing a YUV Blt to an RGB surface using ddraw7 (and later d3d9) I was getting results exactly as described in that document (including the HD results). It was only when testing on other machines that that impression began to dissolve.
It seems all Media Foundation components (like decoder MFTs and the VideoProcessorMFT) all produce full-range, but graphics card related functions (like blting YUV to RGB or using the ID3D11VideoProcessor) can produce full-range or studio-range depending on configuration.
I am curious if the application in question displays the same colour range on an NVidia Windows machine in its default configuration. I was going to test this myself, but hadn't had a chance to do so yet
The game itself uses `IGraphBuilder::RenderFile` calling `IVideoWindow::put_Owner` with a window that has ddraw attached using `DDSCL_FULLSCREEN`; and under that circumstance, it gets RGB32 directly from the decoder. And the decoders always seem to produce full range.
It was only in testing I could reproduce this issue on Windows, as when I don't set `DDSCL_FULLSCREEN`, NV12 is fetched from the decoder, and if my card is configured for studio-range, then it uses 16 to represent black.
But that's another solution for this game; to request RGB32 directly from the decoder. But we'll still have an issue with applications that don't go full-screen. We may also run in to an issue if a decoder doesn't directly output RGB32, although I couldn't find an example of one (under quartz anyway, the H.264 decoding MFT doesn't).