Ticket #79 (new enhancement)
Opened 6 months ago
Buffer Processor doesn't support minimal-copying for blocking i/o
| Reported by: | rossb | Owned by: | rossb |
|---|---|---|---|
| Priority: | minor | Milestone: | V20 |
| Component: | common | Version: | 2.0 |
| Keywords: | optimization blocking i/o | Cc: |
Description
Some PA blocking i/o immplementations (at least CoreAudio? and ASIO, possibly others) are implemented by writing an internal portaudio callback which copies data beetween the buffers passed to the callback and FIFO ring buffers. This is sub-optimal in that there is an implied double-copying of the data: Rather than the Buffer Processor converting the data directly from host buffer into the FIFO it converts it in-place, or into its temporary buffer then the host API implementations copy the data into the FIFO.
The buffer processor needs to be enhanced to easily support copying data from host buffers directy to/from FIFOs. One possibility is to introduce specific calls into the buffer processor for handling ring buffers -- that would make the implementations consistent -- however it remains to be seen how easy this would be given that there is a need to handle out of band data (underflow/overflow information) and setting synchronisation objects.
