test/pcm.c: Fix S24 format

S24 format has different bit width and physical width.
For calculating the byte offset for big-endian packing, the latter value
has to be used.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Iwai 2009-07-06 08:41:00 +02:00
parent d23845e563
commit 3d0843e8ce

View file

@ -40,6 +40,7 @@ static void generate_sine(const snd_pcm_channel_area_t *areas,
unsigned int maxval = (1 << (snd_pcm_format_width(format) - 1)) - 1;
int bps = snd_pcm_format_width(format) / 8; /* bytes per sample */
int phys_bps = snd_pcm_format_physical_width(format) / 8;
/* verify and prepare the contents of areas */
for (chn = 0; chn < channels; chn++) {
@ -63,7 +64,7 @@ static void generate_sine(const snd_pcm_channel_area_t *areas,
/* 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;
*(samples[chn] + phys_bps - 1 - i) = (res >> i * 8) & 0xff;
#else
*(samples[chn] + i) = (res >> i * 8) & 0xff;