On the very conceptual level, `decodebin` is a black box meant to create a decoding pipeline. Trying to make it not decode should be a sign that it's not fit. I'm not going to detail the problems once again, you summarized some of them, and I have explained things in length in all the previous discussions.
Replacing wg_parser makes things easier, because wg_parser is designed around decodebin, and we need a different model. It also allows me to change only one frontend at a time, while keeping it working, as like said, it's going to be a lot of work to make the rest of the playback code work well with encoded buffers, as that use case was never considered before.
As a last comment, in general I think we should stop relying on the higher level GStreamer elements. To the contrary to Wine, we don't own its code, and anything complex is likely going to be bogus. Fixing bug in this case is more difficult as it would need to be upstreamed first and then we'd have to wait for it to trickle down. For instance we've discovered lately that `videoflip` is bogus and that it does an extra frame copy by default even though it should be pass-through. This has a huge cost when frames are large and it has a performance impact. There's only really one thing that we want from GStreamer: decoder/encoder/demuxer/muxer components, and the unified API to work with them is a nice thing to have. Everything else should be avoided.