Introduction - If you have any usage issues, please Google them yourself
The RingBufferConsumer maintains a ring buffer of BufferItem objects, (which are acquired as long as they are part of the ring buffer, and released when they leave the ring buffer).
When new buffers are produced, the oldest non-pinned buffer item is immediately dropped the ring buffer, and overridden with the newest buffer.
Users can only access a buffer item after pinning it (which also guarantees that during its duration it will not be released back into the BufferQueue).