Use XLockDisplay/XUnlockDisplay in gstreamer thread, move XInitThreads out to happen before other X calls.
Add audio resampler to gstreamer audio pipeline.
Add videoscale element to gstreamer video pipeline, will be useful when using ximagesink fallback(future commit).
Add support for WMA1 and M4S2 codecs, try to use correct fluendo codecs when possible, provide more detailed caps where possible.
Flush is for stream, not entire presentation - handle appropriately.
Detect when to restart tsmf thread for when playback is stopped and restarted.
Detect whether xvimagesink or ximagesink should be used.
Try to handle application exit gracefully when tsmf channel is in use.

Also, create unique tid file for the application based on application pid. Otherwise,
another application instance could draw MMR window on top of other wrong instance.
Determine if desired decoder is available early enough to determine not to use MMR if needed.
Try to handle eos conditions better, so playback is not ended prematurely near end of stream.

Detect some cases when timestamps should not be used.
Move logic from end time checks to start time checks.
Ack quickly when local buffer level is low in order to help keep them at a decent level.
Provide mechanism to disable codecs from the command line, so that problematic videos can be played back outside of MMR if needed.

Not a total solution in itself, as we should try to detect when a given codec is not available vs. the current approach of assuming that all known codecs are available if a decoder is found.
Provide debug flags that would allow the ability to compile the application such that video/audio is streams are saved off vs. played back to user.

The saved stream can then be played back outside of xfreerdp for further troubleshooting. I have personally used this mechanism for getting vendor codec issue support.