2011/3/9 Jaroslav Kysela perex@perex.cz
On Wed, 9 Mar 2011, Jean-Yves Avenard wrote:
Hi
On Wednesday, 9 March 2011, Raymond Yau superquad.vortex2@gmail.com wrote:
hda-intel.c only allocate 64Kbytes
/* buffer pre-allocation */ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG, snd_dma_pci_data(chip->pci), 1024 * 64, 32 * 1024 * 1024);
user or distribution need to change "prealloc" from 64 to a higher value for getting 500ms buffer
echo 1024 > /proc/asound/Intel/pcm0p/sub0/prealloc
It seems you misunderstood my first message.
For a start, the default memory allocated to alsa in ubuntu is 4096kB. so the amount of ram isn't the problem.
Setting a buffer of 200ms: ok 300ms: ok 400ms: not ok (invalid argument) 500ms: ok
Why would 400ms gives invalid argument, when 500ms doesn't nor 300. Memory available is obviously not the issue.
If only 64kB is allocated, requesting 200ms gives you 200ms 300ms -> 300ms 400ms -> invalid argument 500ms -> 371ms 600ms -> 371ms
You would assume that requesting 400ms would work or return what can fit in what has been pre-allocated.
What is your dir argument (last one) for the near functions? If it's NULL or value is zero, it means you request the exact value which may not be available. Use -1 to request specified or smaller value or 1 to request specified or bigger value.
Jaroslav
According to your explanation, it should fail at 500ms buffer time when rate is 11025Hz and dir=0 or NULL, since half of 11025 is 5512.5
but
alsa-lib/test/pcm -v -Dhw:CARD=Intel,DEV=0 -r 11025 -c 2 -b 500000
Playback device is hw:CARD=Intel,DEV=0 Stream parameters are 11025Hz, S16_LE, 2 channels Sine wave rate is 440.0000Hz Using transfer method: write Hardware PCM card 1 'HDA Intel' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 11025 exact rate : 11025 (11025/1) msbits : 16 buffer_size : 5504 period_size : 1376 period_time : 124807 tstamp_mode : NONE period_step : 1 avail_min : 1376 period_event : 0 start_threshold : 5504 stop_threshold : 5504 silence_threshold: 0 silence_size : 0 boundary : 1442840576 appl_ptr : 0 hw_ptr : 0