c3e498d25f
The temporary unoptimized code we were using before just completely allocated a new copy of each frame every single time a new async frame was output by the source plugin. This just creates a cache of frames as needed for the current format/width/height to minimize the allocation and deallocation. If new frames come in that are of a different format/width/height, it'll just clear the cache. This is a fairly important optimization.