public virtual VideoRenderer.I420Frame takeFrame(VideoRenderer.I420Frame source)
{
long desc = summarizeFrameDimensions(source);
VideoRenderer.I420Frame dst = null;
lock (availableFrames)
{
LinkedList<VideoRenderer.I420Frame> frames;
availableFrames.TryGetValue(desc, out frames);
if (frames == null)
{
frames = new LinkedList<VideoRenderer.I420Frame>();
availableFrames[desc] = frames;
}
if (frames.Count > 0)
{
dst = frames.First.Value;
frames.RemoveFirst();
}
else
{
dst = new VideoRenderer.I420Frame(source.Width, source.Height, source.YuvStrides.ToArray(), null);
}
}
return dst;
}