done from the avail_update call invoked from an application.
ok, so I re-implemented all the points found in the reviews except for this thread. There's already some code to see if we go beyond the buffer boundaries, so I am not sure what the 'linear position' means.
Linear means that new hw_ptr must be always behind the previous hw_ptr.
I got that. But there are already some checks in pcm_lib.c,
/* new_hw_ptr might be lower than old_hw_ptr in case when */ /* pointer crosses the end of the ring buffer */ if (new_hw_ptr < old_hw_ptr) { hw_base += runtime->buffer_size; if (hw_base >= runtime->boundary) hw_base = 0; new_hw_ptr = hw_base + pos; }
So do I need to add any additional checks? Or did I miss something in your discussion with Takashi? -Pierre