[alsa-devel] Accessing pcm samples from snd_pcm_channel_area_t in an io type plugin
Pharaoh .
pharaoh137 at gmail.com
Fri Mar 21 02:46:54 CET 2008
Hi,
I am writing an external io type plugin for an ARM based board. In the
transfer function
of the plugin, I try to grab the audio samples in a temp buffer and send it
to the DSP in
chunks of period sizes. Somehow the the alsa buffer's audio samples are not
copied to the
temp buffer which I want to send further.
What I do to copy the buffers,
static snd_pcm_sframes_t my_transfer(snd_pcm_ioplug_t *io,
const snd_pcm_channel_area_t *areas,
snd_pcm_uframes_t offset,
snd_pcm_uframes_t size)
{
char *temp = NULL;
temp = malloc(io->period_size * frame_size); //For malloc,
//I tried all the three approaches here one by one, including the
malloc/memcpy one
1. memcpy(temp,areas->addr+ offset*io->channels*2, io->period_size *
frame_size);
2. memcpy(temp, (char *)areas->addr + (areas->first + areas->step *
offset) /8, io->period_size * frame_size);
//This should work straight off....
3. temp = (char *)areas->addr + (areas->first + areas->step * offset) /
8;
//write temp to DSP here
.........
}
Somehow the empty buffers are being sent to DSP, when I try to send some
data from a static array then it goes
to DSP and is played well. Any idea what I am missing?
-phraoh.
More information about the Alsa-devel
mailing list