2. Unfortunately, major uses of librtlsdr process the data in another thread rather than the callback function. This is how gr-osmosdr and soapyrtl function.

3. Additionally, tracking buffer backlog requires returning from the callback rapidly, so that buffers can be counted as they are received. This is how gr-osmosdr behaves, outputting 'O' when processing is too slow: http://git.osmocom.org/gr-osmosdr/tree/lib/rtl/rtl_source_c.cc#n307 This lets the user of a high-level library know when latency is corrupting their stream, and currently requires the use of an extra memcpy() call.

4. These high-level libraries could take advantage of the DMA buffer improvement if there were a way to get buffers to stay alive after return from the callback.