<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>