handle float values in sound files sensibly

git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@354 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Lennart Poettering 2005-09-16 00:03:19 +00:00
parent 652e000f9e
commit 668f3cdcbc

View file

@ -52,19 +52,18 @@ int pa_sound_file_load(const char *fname, struct pa_sample_spec *ss, struct pa_m
goto finish; goto finish;
} }
switch (sfinfo.format & 0xFF) { switch (sfinfo.format & SF_FORMAT_SUBMASK) {
case SF_FORMAT_PCM_16:
case SF_FORMAT_PCM_U8:
case SF_FORMAT_ULAW:
case SF_FORMAT_ALAW:
ss->format = PA_SAMPLE_S16NE;
readf_function = (sf_count_t (*)(SNDFILE *sndfile, void *ptr, sf_count_t frames)) sf_readf_short;
break;
case SF_FORMAT_FLOAT: case SF_FORMAT_FLOAT:
default: case SF_FORMAT_DOUBLE:
/* Only float and double need a special case. */
ss->format = PA_SAMPLE_FLOAT32NE; ss->format = PA_SAMPLE_FLOAT32NE;
readf_function = (sf_count_t (*)(SNDFILE *sndfile, void *ptr, sf_count_t frames)) sf_readf_float; readf_function = (sf_count_t (*)(SNDFILE *sndfile, void *ptr, sf_count_t frames)) sf_readf_float;
break; break;
default:
/* Everything else is cleanly converted to signed 16 bit. */
ss->format = PA_SAMPLE_S16NE;
readf_function = (sf_count_t (*)(SNDFILE *sndfile, void *ptr, sf_count_t frames)) sf_readf_short;
break;
} }
ss->rate = sfinfo.samplerate; ss->rate = sfinfo.samplerate;