Instead we should wrap lower level unix components, and combine optional WMV / WMA decoders (which I believe should now be more or less working) on the PE side like native does.
Possibly.
By "like native does" do you mean that native exposes its internal decoders somehow? I wasn't able to find any API to get at them, but I may have missed one.
That proposal would indeed solve a bunch of todos, but it may also have a performance impact; I don't know how much we copy things around when crossing the PE/Unix boundary.
There would unfortunately be some blitting involved. It'd be of uncompressed data, so it wouldn't be awful, but it does still add some latency.
There's also the latency of marshalling things across threads, and the extra Unix syscalls, and the fact that one GStreamer pipeline is easier to debug than two.
That said, it may still be the right thing to do. But I'm not sure that the solution in this patch series is particularly wrong either, or at least, it's not particularly ugly. (Of course, it hasn't quite reached its final form yet either.)