<p></p>
<p>><br>
>    I found some audio noise problem when I trying to set the sink latency to a lower value.<br>
><br>
>    here is the alsa dump:<br>
><br>
>     D/NMAudio ( 1959): Its setup is:<br>
>     D/NMAudio ( 1959):   stream       : PLAYBACK<br>
>     D/NMAudio ( 1959):   access       : MMAP_INTERLEAVED<br>
>     D/NMAudio ( 1959):   format       : S16_LE<br>
>     D/NMAudio ( 1959):   subformat    : STD<br>
>     D/NMAudio ( 1959):   channels     : 2<br>
>     D/NMAudio ( 1959):   rate         : 22050<br>
>     D/NMAudio ( 1959):   exact rate   : 22050 (22050/1)<br>
>     D/NMAudio ( 1959):   msbits       : 16<br>
>     D/NMAudio ( 1959):   buffer_size  : 8192<br>
>     D/NMAudio ( 1959):   period_size  : 2048<br>
>     D/NMAudio ( 1959):   period_time  : 92879<br>
>     D/NMAudio ( 1959):   tstamp_mode  : ENABLE<br>
>     D/NMAudio ( 1959):   period_step  : 1<br>
>     D/NMAudio ( 1959):   avail_min    : 7751<br>
>     D/NMAudio ( 1959):   period_event : 0<br>
>     D/NMAudio ( 1959):   start_threshold  : -1<br>
>     D/NMAudio ( 1959):   stop_threshold   : 1073741824<br>
>     D/NMAudio ( 1959):   silence_threshold: 0<br>
>     D/NMAudio ( 1959):   s<br>
><br>
>    here is the log when problem happened:</p>
<p><a href="https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/include/linux/dmaengine.h">https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/include/linux/dmaengine.h</a></p>
<p>* @DMA_RESIDUE_GRANULARITY_SEGMENT: Residue is updated after each successfully<br>
 *  completed segment of the transfer (For cyclic transfers this is after each<br>
 *  period). This is typically implemented by having the hardware generate an<br>
 *  interrupt after each transferred segment and then the drivers updates the<br>
 *  outstanding residue by the size of the segment. Another possibility is if<br>
 *  the hardware supports scatter-gather and the segment descriptor has a field<br>
 *  which gets set after the segment has been completed. The driver then counts<br>
 *  the number of segments without the flag set to compute the residue.<br>
 * @DMA_RESIDUE_GRANULARITY_BURST: Residue is updated after each transferred<br>
 *  burst. This is typically only supported if the hardware has a progress<br>
 *  register of some sort (E.g. a register with the current read/write address<br>
 *  or a register with the amount of bursts/beats/bytes that have been<br>
 *  transferred or still need to be transferred).<br>
 */</p>
<p>How accurate can you sound card hw_ptr increase ?  period size or DMA  brust size ?<br></p>
<p><a href="http://mailman.alsa-project.org/pipermail/alsa-devel/2014-September/081501.html">http://mailman.alsa-project.org/pipermail/alsa-devel/2014-September/081501.html</a></p>
<p>you can try Alexander's pcm_avail.c </p>