https://bugs.winehq.org/show_bug.cgi?id=48769
--- Comment #4 from qsniyg qsniyg@mail.com --- (In reply to Zebediah Figura from comment #3)
Thank you very much for the detailed reply!
This specific application wants to create the ASF reader manually but autoplug from its pins.
The way this works on Windows is:
- the ASF reader filter, which lives in qasf and is implemented on top of
wmvcore, outputs compressed media samples;
- the CWMVDecMediaObject DMO (wrapped using the DMO wrapper filter), which
lives in wmvdecod.dll or wmvdmod.dll (depending on Windows version), decodes the video.
This is true regardless of architecture, at least since XP and probably earlier wmv9vcm isn't shipped with the OS. I'm not sure that bug 32723 is particularly valid.
How we want this to work in Wine is less clear. We probably want to implement the ASF reader on top of wmvcore. We *may* want it to output compressed media samples, though I'm not sure that any application yet depends on this, and it probably wouldn't be too difficult to correct if we did find one.
If we did output compressed media samples, we'd need a way to uncompress them. Bug 34622 mentions that native .NET XNA creates the WMA decoder DMO manually. (I'm not sure if it also creates the WMV decoder manually). That would probably have to make use of gstreamer (which is directly wrapping libav for WMV/WMA formats; I'm of the opinion that we should use libav directly, but better maintainers than I have disagreed).
I initially tried doing a prototype by rather painfully attempting to integrate ffmpeg's VC1 decoder code directly into wine, for an implementation of wmv9vcm. Though being several thousand lines of code, it might not be as desirable as using gstreamer like you've mentioned (I'm not familiar with it which is why I opted for ffmpeg instead).
The issue I ran into however was communicating the information found in the header to the decompressor. Clearly it's possible as windows found a way to do it, but I haven't yet found a method. I'll look into the DMO method you suggested, thanks again!
Since you're interested in making this work using native components, you probably want `winetricks wmp9`. I think you'll also need native devenum, since ours doesn't enumerate DMOs yet.
Unfortunately it doesn't work, since the game is 64-bit. If it helps, I wrote what I found so far here: https://github.com/ValveSoftware/Proton/issues/2830