[alsa-devel] arecord: does hardware or software throw away unused

Rob Nertney rob at rob-otics.com
Thu Sep 15 21:57:14 CEST 2016


So right now my buffer is 32768, and I am filling the dma_area, firing an
IRQ every 2048 Bytes, which aligns to 32 frames of 32b, 16ch data @ 16khz.
When I don't specify a lower number of channels, it works as expected (at
least the capture sounds correct). Less than 16, the capture goes too fast.
If I define my hw_params like this, is it correct for multiple channels?

channels_min = 1
channels_max = 16
buffer_bytes_max = 32768
period_bytes_min = 32768/16
period_bytes_max = 32768/16
periods_min = 16
periods_max = 16

Everything is really associated around a 2048 Byte IRQ. The IRQ handler is
simply snd_pcm_period_elapsed (again, called every BUF/16, or 2048 bytes);
the pointer callback is the number of frames (as you mentioned, based upon
max_channels) currently copied into dma_area. I can't identify where the
speedup would come from when i specify lesser channels

Thanks,
Rob


On Wed, Sep 14, 2016 at 3:29 AM, Clemens Ladisch <clemens at ladisch.de> wrote:

> Rob Nertney wrote:
> > "Returned in frames". Does this mean returned in MAX_CHANNELS frames?
>
> One frames contains all channels.  The number of channels was set with
> the hw_params callback, and will never be outside the constraints that
> your driver has provided.
>
>
> Regards,
> Clemens
>


More information about the Alsa-devel mailing list