DeviceReadBuffer: Deal with device drivers which segment their internal buffers.

Some device drivers segment their buffers into pieces, and will return at
most one "piece" at a time.  For efficent processing, we may need to process
more than one "piece" during each loop.
(cherry picked from commit bbfdaceeefdbfe37de3fcac49f37ccfda7d2aa6c)
ASIStreamHandler: Detect how many driver buffers are available, and attempt
to read 1/4 of them during each pass in DeviceReadBuffer.
(cherry picked from commit ee5ac3d3adb36f4ac7223cd98ae1ed66048f7388)