[alsa-devel] Buffer size for ALSA USB PCM audio

Takashi Iwai tiwai at suse.de
Wed Jul 24 16:54:48 CEST 2013

At Wed, 24 Jul 2013 10:41:43 -0400 (EDT),
Alan Stern wrote:
> I have been studying the data_ep_set_params() function in
> sound/usb/endpoint.c.  This is the routine that calculates the number
> of samples and I/O requests to keep on the USB hardware queue for PCM
> audio, based on the ALSA parameters.
> It uses the PERIOD_BYTES parameter but not BUFFER_BYTES.  In simplified
> terms (ignoring rounding, boundary cases, and other things), the number
> of periods per buffer is fixed at 24 for recording and 1 for playback,
> completely ignoring the user's setting.  If you look at the parameters
> copied in snd_usb_hw_params() in sound/usb/pcm.c, you'll see what I
> mean.
> Is this really the intended behavior?  It doesn't seem right at all.

The buffer size doesn't matter for urb setup because the usb-audio
driver transfers the data by the driver itself at urb completes.
The buffer size is considered in these callbacks,
i.e. prepare_playback_urb() and retire_capture_urb().

OTOH, the period size is evaluated for determining the urb buffer
size, so that the data transfer (thus the wakeup via complete) is
aligned to the period size.


More information about the Alsa-devel mailing list