I'm tasked with revising an application which uses DirectShow for video rendering. The old application works fine, but it's starting to show age.
As I have a gaming background, I figured I should just approach this as such. After having made a bunch of prototypes using different techniques, I was pretty sure I could pull of video-to-texture rendering and use DirectX to fulfill all the clients his requests.
However, I'm now at the point I have to pick a technique to go with and I couldn't be more lost...
- DirectShow
- Media Foundation
- Media Session (< Windows 8)
- Media Engine (> Windows 8)
- DXVA1
- DXVA2
- DXVA-HD
DirectShow is obviously the oldest, but still works pretty well, also mostly because of the HUGE amount of codecs available.
Media Foundation has been introduced with Windows Vista, and had something called "Media Session" up til Windows 8, after which they introduced the "Media Engine". If I'm correct codecs are called MFTs? Are there actually sites that have these available much like free-codecs.com?
On top of these 2 techniques, there is DXVA, which allows you to offload video decoding to the GPU. Currently, I ran into 3 different types. DXVA1 being an implementation that has been around since XP, DXVA2 being the newer API. But what is DXVA-HD? Is it newer than DXVA2 or is it an equivalent name?
I really want to move towards Media Foundation, the out-of-the-box codecs work really well with the formats the client wants to use. All I'm concerned is how easy it is to get codecs for it... Does Windows 8+ default media player still have both DirectShow and MF render paths and swaps them on the fly or is Microsoft completely phasing out DirectShow?
I also can't quite grasp how DXVA is supposed to work. Given I want to basically render videos inside a game, it would only make sense to make all rendering actually happen on the GPU and keep application logic on the CPU, but I can't really find any good examples on how to utilize it using Media Foundation. This is mostly caused by the fact I don't know the difference between DXVA2 and DXVA-HD. Windows 7 SDK came with samples for all 3 implementations...
If someone could answer my questions in bold, correct my misinformation and point me in the direction of a proper example(s) (DirectX + Media Foundation + DXVA-whatever), I would be really grateful! It could be as simple as "combine these 3 examples of the Windows 7 SDK to get what you want).
The target of the whole assignment is to get the application in top-notch form again and I want to absolutely sure I pick the techniques that will last for the next decade like DirectShow already has :P