I'm writing CPP code which uses the Microsoft WMF decoder to decode a variety of codecs. It works fine for many of them: H264, H265, MPEG1, MPEG2, VP8 and AV1, all work perfectly. VP9 looks like it should also be supported, there is a GUID listed in the docs:
const GUID MFVideoFormat_VP90 = { FCC('VP90'), 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } };
There is a similar one for VP8: const GUID MFVideoFormat_VP80 = { FCC('VP80'), 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } };
When I enumerate the decoder using either of these GUID I find a single decoder
Friendly Name: VP9VideoExtensionDecoder
But when I test the available inputs for this decoder the only one available is VP80
I tried with that with a VP9 encoded video, just in case, and it won't decode the video. I tested with a VP8 video and it works fine with that. So, I'm wondering if there is something additional which needs to be done when setting up for VP9? I'm following the Microsoft code example which they give for H264 and MPEG1 and as far as I can see I'm doing everything exactly as they do.
I got the codec from the microsoft store and when I load VP9 encoded videos into Microsoft Media Player they play fine so I assume the coded is working properly. It shows up correctly in DXDiag
Has anyone got this working or could suggest what might be wrong? Even point me in the direction of documentation or source code? Microsoft's documentation on this seems very sparse
In summary:
I Created a VP9 decoder using WMF following Microsoft's example code, using the UID and FCC they provide. The decoder is created without issue, but only offers VP8 as an input which will not work for VP9 encoded videos. The same process works perfectly for VP8