[alsa-devel] Breakage in pcm_lib.c
Jaroslav Kysela
perex at perex.cz
Sun Apr 26 18:31:22 CEST 2009
On Sun, 26 Apr 2009, Jon Smirl wrote:
> On Sun, Apr 26, 2009 at 4:12 AM, Jaroslav Kysela <perex at perex.cz> wrote:
>> On Sat, 25 Apr 2009, Jon Smirl wrote:
>>
>>> This appears to be a bug in this code...
>>>
>>> if (delta < 0) {
>>> delta += runtime->period_size * runtime->periods;
>>>
>>> it was adding, buffer_size. But buffer_size is not correct when the
>>> periods don't evenly fit into the buffer
>>
>> Could you show real values what you're getting here with your driver?
>
> psc_dma_pcm_pointer pos 0
> hw_ptr_interrupt 22052 new_hw_ptr 0
pos should be >2 here for buffer_size = 22050 and period_size = 5513..
Your driver code is broken - the routine must be called when period_size
is processed - not before and .pointer callback must return correct value
at this point..
So pos at interrupt time should be equal or slightly greater than:
5513, 11026, 16540, 22054 % 22050 = 4, 5517 etc..
pos is position from range 0 .. (buffer_size - 1) not from range 0 ..
(periods * period_size).
Jaroslav
-----
Jaroslav Kysela <perex at perex.cz>
Linux Kernel Sound Maintainer
ALSA Project, Red Hat, Inc.
More information about the Alsa-devel
mailing list