On 11/03/2016 05:45 PM, Lars-Peter Clausen wrote: > On 11/03/2016 10:11 AM, Alan Young wrote: >> The code in the kernel, in /pcm_lib.c/ and /pcm_native.c/, uses fields >> buffer_size and boundary in struct snd_pcm_runtime. As far as I can see, >> there are always initialized to the same value. In what circumstance might >> they be different? There is clearly some relationship to hw_ptr_base, as >> illustrated by this repeated snipped from snd_pcm_update_hw_ptr0() >> >> hw_base += runtime->buffer_size; >> if (hw_base >= runtime->boundary) { >> hw_base = 0; >> crossed_boundary++; >> } >> new_hw_ptr = hw_base + pos; > > boundary is actually set to the largest possible power-of-two multiple of > buffer_size. This is done so that the hw_ptr that is reported to userspace > is continuously increasing (up to boundary) and does not wrap around after > just one buffer_size has elapsed. This is done so you can measure the > distance between two hw_ptr that were captured at different points in time, > but are more than half a buffer_size away from each other. And the pointer that is reported to userspace is called appl_ptr, sorry for the confusion. _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel