mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
test/pcm.c: Sample generation on big endian platforms was broken.
Has not worked since commit 3d1fa92490
Signed-off-by: Kenneth Johansson <kenneth@southpole.se>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
5a70411d6c
commit
d23845e563
1 changed files with 13 additions and 11 deletions
24
test/pcm.c
24
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue