Takashi... The base_address and the step sounds pretty clear to me.... just the offset I could not understand. What the difference in being .first = 0 or .first = 2??? Could you provide please a more in depth explanation. I tried really hard find this but there is nothing related in the documentation. area[0].addr = base_address; addr[0].first = 0; addr[0].step = 4; addr[1].addr = base_address; addr[1].first = 2; addr[1].step = 4; P.S. being a stereo or a mono pipeline I understand... just the way the offset works that is not so clear to me. Thanks in advanced! Tks! ------------------- Guilherme Longo Dept. Eng. da Computação Unaerp Linux User - #484927 *Before Asking http://www.istf.com.br/?page=perguntas !- I'd rather die on my feet than live on my knees -! Takashi Iwai wrote: > At Tue, 23 Jun 2009 02:40:35 -0300, > Guilherme wrote: > >> Hi all. >> >> I am a bit confused on what I get with this function. >> I finished my first project but I did not understand what exactly the >> >> _snd_pcm_channel_area at >> >> http://www.alsa-project.org/alsa-doc/alsa-lib/struct__snd__pcm__channel__area.html >> >> does. >> >> There are 3 fields in the documentation. >> >> addr, first and step. >> >> It seems that addr is the memory address of the channel samples... so >> far so good. The "step" is the distance between 2 sample (but I am not >> sure) and the least, "first", I could not figure out what does it means. >> > > This information is needed to understand how the multi-channel samples > are assigned in a stream. The first is the offset of the channel > position to the given addr. The step is the bytes to the next sample > of that channel. > > For example, suppose you have a 2-channel stereo interleaved stream > with 16bit samples. Then you'll have an array of snd_pcm_channel_area > with two elements, for left and right channels, containing like > > area[0].addr = base_address; > addr[0].first = 0; > addr[0].step = 4; > addr[1].addr = base_address; > addr[1].first = 2; > addr[1].step = 4; > > Both channels share the same base address but have the different > "first" offset bytes. The step size is 4 = #chanel * sample-size. > > For a non-interleaved stereo stream, it'll look like > > addr[0].addr = base_addr_0; > addr[0].first = 0; > addr[0].step = 2; > addr[1].addr = base_addr_1; > addr[1].first = 0; > addr[1].step = 2; > > Thus it looks like two mono streams with 16bit samples. > > > HTH, > > Takashi > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel