fix conversion between arbitrary samplerates

git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@1281 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
Michael Gernoth 2006-10-01 15:07:55 +00:00
parent deace67d29
commit de56acd493

View File

@ -186,6 +186,7 @@ rdpsnd_dsp_resample(unsigned char **out, unsigned char *in, unsigned int size,
SRC_DATA resample_data;
float *infloat, *outfloat;
int innum, outnum;
int err;
#else
int offset;
#endif
@ -240,7 +241,7 @@ rdpsnd_dsp_resample(unsigned char **out, unsigned char *in, unsigned int size,
}
innum = size / samplewidth;
outnum = innum * (resample_to_srate / format->nSamplesPerSec);
outnum = ((float)innum * ((float)resample_to_srate / (float)format->nSamplesPerSec)) + 1;
infloat = xmalloc(sizeof(float) * innum);
outfloat = xmalloc(sizeof(float) * outnum);
@ -255,12 +256,14 @@ rdpsnd_dsp_resample(unsigned char **out, unsigned char *in, unsigned int size,
resample_data.src_ratio = (double) resample_to_srate / (double) format->nSamplesPerSec;
resample_data.end_of_input = 0;
src_process(src_converter, &resample_data);
if ((err = src_process(src_converter, &resample_data)) != 0)
error("src_process: %s", src_strerror(err));
xfree(infloat);
outsize = outnum * samplewidth;
outsize = resample_data.output_frames_gen * resample_to_channels * samplewidth;
*out = xmalloc(outsize);
src_float_to_short_array(outfloat, (short *) *out, outnum);
src_float_to_short_array(outfloat, (short *) *out, resample_data.output_frames_gen * resample_to_channels);
xfree(outfloat);
#else