[alsa-devel] Constant delay between starting a playback and a capture stream

Max Schmidt schmidti444 at web.de
Tue Jul 1 01:32:34 CEST 2014


   Hi Clemens,

   thanks for your helpfull answer!

   Regards,
   Max

   Gesendet: Sonntag, 29. Juni 2014 um 20:21 Uhr
   Von: "Clemens Ladisch" <clemens at ladisch.de>
   An: "Max Schmidt" <schmidti444 at web.de>, alsa-devel at alsa-project.org
   Betreff: Re: [alsa-devel] Constant delay between starting a playback
   and a capture stream
   Max Schmidt wrote:
   > I've got a BeagleBone Black (ARM Cortex A 8 µP) with an Audio-Cape
   > (using McAsp and ALSA-Davinci-Drivers) and wrote an mmap based
   > playback-capture application (both devices "hw:0,0"). The important
   > thing is that the application needs a constant delay (not necessarily
   > small) between the start of the playback and the capture stream.
   > To realize that I use the ALSA API function "snd_pcm_link(c_handle,
   > p_handle)".
   >
   > 1) Looking at a plot of multiple measurements of looped back and
   > captured square waves (or sines) there still is a jitter of about two
   > to four samples (at 48 kHz; which is about 40 to 80 ms), no matter if
   I
   > run it as RT-app (energy save modes etc. disabled, just important
   > Processes have a higher Priority e.g. EDMA) or normal app.
   > Please correct me if I'm wrong, but as far as I understand when the
   > streams are linked, at start the processor is going through a linked
   > list triggering all linked streams. And the trigger start is an
   atomic
   > process so shouldn't get interrupted.
   Yes.
   > Shouldn't it always take the same time between starting the playback
   > and capture stream then? And if yes, where could the variable start
   > delay come from?
   Hardware accesses can be quite nondeterministic. And if the driver is
   not written properly, the start trigger will do all the DMA stream
   initialization that should have been done when preparing the device.
   (mcasp_start_tx() has a busy loop waiting for the device.)
   There is hardware that actually supports starting two streams at
   exactly
   the same time (by setting two bits in the same register). Obviously,
   this hardware or its driver doesn't support this.
   Regards,
   Clemens
   _______________________________________________
   Alsa-devel mailing list
   Alsa-devel at alsa-project.org
   [1]http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

References

   1. http://mailman.alsa-project.org/mailman/listinfo/alsa-devel


More information about the Alsa-devel mailing list