At Sun, 24 May 2009 19:26:42 -0700, Troy Kisky wrote: > > Does > > (substream->dma_buffer.bytes) need to equal (snd_pcm_lib_period_bytes(substream) * runtime->periods) ? > > When this is not true, it seems like the buffer is not being filled correctly. > > > for testing, this works > .buffer_bytes_max = 16 * 7 * 512, > .period_bytes_min = 32, > .period_bytes_max = 7 * 512, /* This is size of ping + pong buffer*/ > > and this doesn't. > .buffer_bytes_max = 16 * 7 * 512 + 512, > .period_bytes_min = 32, > .period_bytes_max = 7 * 512, /* This is size of ping + pong buffer*/ > > > When playing back a sine wave, I can hear breaks. Well, there are two misunderstandings here: - substream->dma_buffer.bytes doesn't define the actual buffer size. It's substream->runtime->buffer_size (in frames). The former is the allocated buffer size which can be larger. - The buffer size doesn't have to be aligned to period_size as default, i.e. it's not always equal with period_size * periods, and periods isn't always an integer. To align the buffer size to period size, call below in the open callback snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); HTH, Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel