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@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