X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/0024bde0fcca14f018c647f41d8192b4564df96e..136406deb8d6adab122ee83f17c7a36eee8d81d1:/lib/resample.c diff --git a/lib/resample.c b/lib/resample.c index de2358c..c4c814e 100644 --- a/lib/resample.c +++ b/lib/resample.c @@ -58,7 +58,6 @@ void resample_init(struct resampler *rs, int output_bits, int output_channels, int output_rate, int output_signed, int output_endian) { - int error_; memset(rs, 0, sizeof *rs); assert(input_bits == 8 || input_bits == 16); assert(output_bits == 8 || output_bits == 16); @@ -80,11 +79,12 @@ void resample_init(struct resampler *rs, rs->input_bytes_per_frame = rs->input_channels * rs->input_bytes_per_sample; if(rs->input_rate != rs->output_rate) { #if HAVE_SAMPLERATE_H + int error_; rs->state = src_new(SRC_SINC_BEST_QUALITY, rs->output_channels, &error_); if(!rs->state) - fatal(0, "calling src_new: %s", src_strerror(error_)); + disorder_fatal(0, "calling src_new: %s", src_strerror(error_)); #else - fatal(0, "need to resample audio data but libsamplerate not available"); + disorder_fatal(0, "need to resample audio data but libsamplerate not available"); #endif } } @@ -96,6 +96,8 @@ void resample_close(struct resampler *rs) { #if HAVE_SAMPLERATE_H if(rs->state) src_delete(rs->state); +#else + rs = 0; /* quieten compiler */ #endif } @@ -212,10 +214,8 @@ static size_t resample_put_sample(const struct resampler *rs, */ static void resample_prepare_input(const struct resampler *rs, const uint8_t *bytes, - size_t nbytes, + size_t nframes, float *floats) { - size_t nframes = nbytes / (rs->input_bytes_per_frame); - while(nframes > 0) { int n; @@ -259,7 +259,7 @@ size_t resample_convert(const struct resampler *rs, float *input = xcalloc(nframesin * rs->output_channels, sizeof (float)); float *output = 0; - resample_prepare_input(rs, bytes, nbytes, input); + resample_prepare_input(rs, bytes, nframesin, input); #if HAVE_SAMPLERATE_H if(rs->state) { /* A sample-rate conversion must be performed */ @@ -272,10 +272,10 @@ size_t resample_convert(const struct resampler *rs, data.input_frames = nframesin; data.output_frames = maxframesout; data.end_of_input = eof; - data.src_ratio = rs->output_rate / rs->input_rate; + data.src_ratio = (double)rs->output_rate / rs->input_rate; int error_ = src_process(rs->state, &data); if(error_) - fatal(0, "calling src_process: %s", src_strerror(error_)); + disorder_fatal(0, "calling src_process: %s", src_strerror(error_)); nframesin = data.input_frames_used; nsamplesout = data.output_frames_gen * rs->output_channels; } @@ -299,7 +299,9 @@ size_t resample_convert(const struct resampler *rs, if(output != input) xfree(output); xfree(input); + eof = 0; /* quieten compiler */ /* Report how many input bytes were actually consumed */ + //fprintf(stderr, "converted %zu frames\n", nframesin); return nframesin * rs->input_bytes_per_frame; }