Re: DMA and delay feedback

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

 



2009/12/14 pl bossart <bossart.nospam@xxxxxxxxx>:
>> For transfer purposes, one only needs to know that DMA transfer is
>> complete on period X so that period X can now be over-written.
>
> That's the 'traditional' view. ALSA is now used in different ways.
> PulseAudio sets a timer and relies on snd_pcm_avail() to query how
> many samples it can write to the ring buffer, the notion of period
> isn't used at all. I think we could use additional information in the
> way the hw_ptr position is reported, namely hints on how precise this
> information is and the granularity of the updates.
> - Pierre
>

There is a problem with getting snd_pcm_avail() accurate from a
hardware perspective.
I was trying to come up with a method for letting the application
(pulseaudio) know how much data it can write in a more accurate
fashion.
An extra bit of information is also useful, and that is some
prediction of when one should next write samples after this write.
One then has a sensible value to use for the timer.
People use snd_pcm_avail for different tasks, and I was trying to
break the use cases out and analyse each one it turn and see if a
better API interface could result.
The use cases are:
1) Deciding when and how many sample to write and when one is likely
to need to write again.
2) Syncing the samples to a video stream or other time source.
There are other requiremets:
1) Having the application buffer size different from the hardware buffer size.
2) Having the application sample rate different from the hardware
sample rate, and thus doing resampling.

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