Decoding moved off from the rendering thread, the producer now has a 3-frame buffer for the rendered frames (this unfortunately means more latency). All rendering is now done on a separate thread, should that thread hang, or cause an exception, the producer will continue to work, just repeating the last available frame.