All of lore.kernel.org
 help / color / mirror / Atom feed
* Question about snd_dma_buffer  bytes field
@ 2009-05-25  2:26 Troy Kisky
  2009-05-25  5:45 ` Takashi Iwai
  0 siblings, 1 reply; 3+ messages in thread
From: Troy Kisky @ 2009-05-25  2:26 UTC (permalink / raw)
  To: alsa-devel@alsa-project.org

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.


Thanks
Troy

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Question about snd_dma_buffer  bytes field
  2009-05-25  2:26 Question about snd_dma_buffer bytes field Troy Kisky
@ 2009-05-25  5:45 ` Takashi Iwai
  2009-05-25 21:15   ` Troy Kisky
  0 siblings, 1 reply; 3+ messages in thread
From: Takashi Iwai @ 2009-05-25  5:45 UTC (permalink / raw)
  To: Troy Kisky; +Cc: alsa-devel@alsa-project.org

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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Question about snd_dma_buffer  bytes field
  2009-05-25  5:45 ` Takashi Iwai
@ 2009-05-25 21:15   ` Troy Kisky
  0 siblings, 0 replies; 3+ messages in thread
From: Troy Kisky @ 2009-05-25 21:15 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel@alsa-project.org

Takashi Iwai wrote:
> 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
> 
Yes, that fixed my problem.


Thanks you
Troy

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-05-25 21:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-25  2:26 Question about snd_dma_buffer bytes field Troy Kisky
2009-05-25  5:45 ` Takashi Iwai
2009-05-25 21:15   ` Troy Kisky

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.