chiark
/
gitweb
/
~mdw
/
disorder
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Suppress no-collection log message for scratches
[disorder]
/
lib
/
resample.c
diff --git
a/lib/resample.c
b/lib/resample.c
index de2358cdbfbdf7339f7b464a1efb4cdfa1434c26..39514ed37c3cf6497ba05a1e530053932db39d57 100644
(file)
--- 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 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);
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
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)
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
#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
}
}
#endif
}
}
@@
-96,6
+96,8
@@
void resample_close(struct resampler *rs) {
#if HAVE_SAMPLERATE_H
if(rs->state)
src_delete(rs->state);
#if HAVE_SAMPLERATE_H
if(rs->state)
src_delete(rs->state);
+#else
+ rs = 0; /* quieten compiler */
#endif
}
#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,
*/
static void resample_prepare_input(const struct resampler *rs,
const uint8_t *bytes,
- size_t n
byt
es,
+ size_t n
fram
es,
float *floats) {
float *floats) {
- size_t nframes = nbytes / (rs->input_bytes_per_frame);
-
while(nframes > 0) {
int n;
while(nframes > 0) {
int n;
@@
-259,11
+259,12
@@
size_t resample_convert(const struct resampler *rs,
float *input = xcalloc(nframesin * rs->output_channels, sizeof (float));
float *output = 0;
float *input = xcalloc(nframesin * rs->output_channels, sizeof (float));
float *output = 0;
- resample_prepare_input(rs, bytes, n
bytes
, input);
+ resample_prepare_input(rs, bytes, n
framesin
, input);
#if HAVE_SAMPLERATE_H
if(rs->state) {
/* A sample-rate conversion must be performed */
SRC_DATA data;
#if HAVE_SAMPLERATE_H
if(rs->state) {
/* A sample-rate conversion must be performed */
SRC_DATA data;
+ memset(&data, 0, sizeof data);
/* Compute how many frames are expected to come out. */
size_t maxframesout = nframesin * rs->output_rate / rs->input_rate + 1;
output = xcalloc(maxframesout * rs->output_channels, sizeof(float));
/* Compute how many frames are expected to come out. */
size_t maxframesout = nframesin * rs->output_rate / rs->input_rate + 1;
output = xcalloc(maxframesout * rs->output_channels, sizeof(float));
@@
-272,12
+273,17
@@
size_t resample_convert(const struct resampler *rs,
data.input_frames = nframesin;
data.output_frames = maxframesout;
data.end_of_input = eof;
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;
+ D(("nframesin=%zu maxframesout=%zu eof=%d ratio=%d.%06d",
+ nframesin, maxframesout, eof,
+ (int)data.src_ratio,
+ ((int)(data.src_ratio * 1000000) % 1000000)));
int error_ = src_process(rs->state, &data);
if(error_)
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;
nframesin = data.input_frames_used;
nsamplesout = data.output_frames_gen * rs->output_channels;
+ D(("new nframesin=%zu nsamplesout=%zu", nframesin, nsamplesout));
}
#endif
if(!output) {
}
#endif
if(!output) {
@@
-299,7
+305,9
@@
size_t resample_convert(const struct resampler *rs,
if(output != input)
xfree(output);
xfree(input);
if(output != input)
xfree(output);
xfree(input);
+ eof = 0; /* quieten compiler */
/* Report how many input bytes were actually consumed */
/* Report how many input bytes were actually consumed */
+ //fprintf(stderr, "converted %zu frames\n", nframesin);
return nframesin * rs->input_bytes_per_frame;
}
return nframesin * rs->input_bytes_per_frame;
}