Re: Stale data interleaved in capture driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks Clemens. Remind me to buy you a beer next time I'm in Germany, or
you're on the West Coast of the US :)

I think it was because of the IRQ counting I implemented the handler. I
noticed in hardware that during a buffer_bytes loop-around, the IRQ handle
time would go up drastically, and I would miss other IRQs from the DMA,
breaking the offset that ALSA thought it was at, and where the DMA was
actually at. I am running more tests tonight.

I've rewritten the DMA to fire an  IRQ only at the write-completion of
(buffer_bytes/2) and (buffer_bytes) (which will always be a multiple of my
frame length). The pointer callback now reads a hardware frame-position
too. I think this will emulate an actual sound card much more closely. The
IRQ handler simply calls snd_pcm_period_elapsed, and the pointer callback
simply returns the hardware frame count I am currently at in the buffer.


64K buffer / 64Byte frames = 1024 frames/buffer.
2 periods in the buffer = 512 Frames/IRQ

buffer_bytes_max = 65535
period_bytes_min = 32768
period_bytes_max = 32768
periods_min = 2
periods_max = 2

Hopefully my testing tonight goes well.

Thanks,
Rob





On Thu, Aug 4, 2016 at 1:53 AM, Clemens Ladisch <clemens@xxxxxxxxxx> wrote:

> Rob Nertney wrote:
> > I've made changes to remove the high-frequency. I originally tried
> > that method because my DMA IRQ fires whenever it writes 1/2 frame (it
> > doesn't have coalescing support yet).
>
> The snd_pcm_hardware is supposed to describe the hardware.
>
> > I have a DMA which is looping across 64Kbytes.
>
> This is buffer_bytes.
>
> > The DMA is configured to interrupt at 32Bytes
>
> This is period_bytes.
>
> > From what I can tell (please correct me if I'm wrong), the periods_min
> > and periods_max are up to me to define
>
> They describe how often the *hardware* can interrupt.
>
> > since i don't interrupt on a period boundary.
>
> Periods are *defined* as the data between two interrupts.
>
> Mapping ALSA periods to something else makes sense only if the hardware
> cannot interrupt after a fixed number of bytes.
>
>
> Regards,
> Clemens
>
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux