At Fri, 03 Jul 2009 22:31:38 +0200, Kenneth Johansson wrote: > > Has not worked since commit 3d1fa924906996463ac33cba5b5143f762d913cf > > Signed-off-by: Kenneth Johansson <kenneth@xxxxxxxxxxxx> > --- > > Fixes regression for 3 byte format in version 1. > tested on both little and big endian platform Thanks. I applied this one with a minor modification of coding style. Takashi (who still prefers memcpy() ;) > > test/pcm.c | 24 +++++++++++++----------- > 1 files changed, 13 insertions(+), 11 deletions(-) > > diff --git a/test/pcm.c b/test/pcm.c > index ee27422..0476c5f 100644 > --- a/test/pcm.c > +++ b/test/pcm.c > @@ -34,14 +34,10 @@ static void generate_sine(const snd_pcm_channel_area_t *areas, > static double max_phase = 2. * M_PI; > double phase = *_phase; > double step = max_phase*freq/(double)rate; > - double res; > - unsigned char *samples[channels], *tmp; > + unsigned char *samples[channels]; > int steps[channels]; > - unsigned int chn, byte; > - union { > - int i; > - unsigned char c[4]; > - } ires; > + unsigned int chn; > + > unsigned int maxval = (1 << (snd_pcm_format_width(format) - 1)) - 1; > int bps = snd_pcm_format_width(format) / 8; /* bytes per sample */ > > @@ -61,12 +57,18 @@ static void generate_sine(const snd_pcm_channel_area_t *areas, > } > /* fill the channel areas */ > while (count-- > 0) { > + int res,i; > res = sin(phase) * maxval; > - ires.i = res; > - tmp = ires.c; > for (chn = 0; chn < channels; chn++) { > - for (byte = 0; byte < (unsigned int)bps; byte++) > - *(samples[chn] + byte) = tmp[byte]; > + /* Generate data in native endian format */ > + for ( i=0 ; i < bps ; i++ ){ > +#if (__BYTE_ORDER == __BIG_ENDIAN) > + *(samples[chn] + bps-1-i) = (res >> i*8) & 0xff; > +#else > + > + *(samples[chn] + i) = (res >> i*8) & 0xff; > +#endif > + } > samples[chn] += steps[chn]; > } > phase += step; > -- > 1.6.1.GIT > > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel