The non-DMA case: +-------------------+-----------------------------------------------------------------------------------+ | : | : rs | | | <--fixed--> : rs | <-- changeable buffer --------------------------------------------------------> | | buffer : | : | | +-------------------+-----------------------------------------------------------------------------------+ ^ ^ ^ | ^ | ^ ^ | Where the | | The delay, i.e. | | somewhere here we | here's where we enforce | audio hw | | where the changable buffer | | have the goal | the maximum buffer size, | read samples | | is handed to the fixed buf | | considerably larger then the goal | | | if the fixed buffer fill level | if the changeable buffer fill level | drops below the delay minus | drops below the goal minus reqsize | reqsize, we move more data from the | we ask the app for more data. | changeable buffer to the fixed | buffer. Data is requested from the application only in blocks >= the reqsize, and also moved only in blocks >= the reqsize from the changeable buffer to the fixed buffer.