input/wav: fix and simplify conversion of integer samples
Size of individual samples is specified by unitsize, not samplesize. The sample immediate is not necessary.
This commit is contained in:
parent
b944e336d6
commit
8b5aefc681
|
@ -187,7 +187,6 @@ static void send_chunk(const struct sr_input *in, int offset, int num_samples)
|
||||||
struct sr_datafeed_analog_old analog;
|
struct sr_datafeed_analog_old analog;
|
||||||
struct context *inc;
|
struct context *inc;
|
||||||
float fdata[CHUNK_SIZE];
|
float fdata[CHUNK_SIZE];
|
||||||
uint64_t sample;
|
|
||||||
int total_samples, samplenum;
|
int total_samples, samplenum;
|
||||||
char *s, *d;
|
char *s, *d;
|
||||||
|
|
||||||
|
@ -199,18 +198,16 @@ static void send_chunk(const struct sr_input *in, int offset, int num_samples)
|
||||||
total_samples = num_samples * inc->num_channels;
|
total_samples = num_samples * inc->num_channels;
|
||||||
for (samplenum = 0; samplenum < total_samples; samplenum++) {
|
for (samplenum = 0; samplenum < total_samples; samplenum++) {
|
||||||
if (inc->fmt_code == WAVE_FORMAT_PCM_) {
|
if (inc->fmt_code == WAVE_FORMAT_PCM_) {
|
||||||
sample = 0;
|
switch (inc->unitsize) {
|
||||||
memcpy(&sample, s, inc->unitsize);
|
|
||||||
switch (inc->samplesize) {
|
|
||||||
case 1:
|
case 1:
|
||||||
/* 8-bit PCM samples are unsigned. */
|
/* 8-bit PCM samples are unsigned. */
|
||||||
fdata[samplenum] = (uint8_t)sample / (float)255;
|
fdata[samplenum] = *(uint8_t*)(s) / (float)255;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
fdata[samplenum] = RL16S(&sample) / (float)INT16_MAX;
|
fdata[samplenum] = RL16S(s) / (float)INT16_MAX;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
fdata[samplenum] = RL32S(&sample) / (float)INT32_MAX;
|
fdata[samplenum] = RL32S(s) / (float)INT32_MAX;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue