At Fri, 03 Jul 2009 19:04:20 +0200, Kenneth Johansson wrote: > > On Fri, 2009-07-03 at 17:41 +0200, Takashi Iwai wrote: > > > ... and the code doesn't handle the case of 3 byte format, too. > > > > > > Takashi > > > > Soo ? there is a lot of formats this code can't generate. It's a test > program and I doubt anybody has ever tried to change the output format > since it has never worked for most formats. 24bit 3byte format is very popular (e.g. used by USB audio), and the commit that broke the big-endian was to support such formats. It works actually. > but if you want to add support for 3 bytes then there is no way around > having two different storage methods one for BIG and one for LITTLE > endian machines. 3 byte format is just 24bit linear data packed into 3 bytes. The difference is only the length of the bytes. So, the difference of endian exists. BTW, a simpler solution is to use memcpy() with a certain offset. For example, int offset, size; size = snd_pcm_format_physical_width(fmt) / 8; #ifdef BIG_ENDIAN offset = 4 - size; #else offset = 0; #endif for (...) { ... memcpy(dest, src + offset, size); ... } memcpy() isn't so expensive with the recent gcc/glibc. Could you rewrite the patch in that way and test it on big-endian machines? thanks, Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel