Re: Question about snd_dma_buffer bytes field

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux