Newer versions of libsamplerate made the data_in pointer const. This
causes the following warning:
In file included from resample_filter.c:6:0:
/usr/local/include/samplerate.h:177:6: note: expected 'float *' but argument is of type 'const float *'
void src_short_to_float_array (const short *in, float *out, int len) ;
^
resample_filter.c:173:7: warning: passing argument 1 of 'free' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
In file included from para.h:11:0,
from resample_filter.c:10:
/usr/include/stdlib.h:460:13: note: expected 'void *' but argument is of type 'const float *'
extern void free (void *__ptr) __THROW;
The problem is that we first convert the input from int16 to float
and use the data_in pointer as the target for the conversion.
Fix this by introducing a temporary non-const variable for the
converted input.
size_t *result_frames)
{
int ret, num_samples, out_samples;
size_t *result_frames)
{
int ret, num_samples, out_samples;
int16_t *out;
SRC_DATA data;
int16_t *out;
SRC_DATA data;
data.output_frames = num_frames * ctx->ratio + 1;
out_samples = data.output_frames * ctx->channels;
data.output_frames = num_frames * ctx->ratio + 1;
out_samples = data.output_frames * ctx->channels;
- data.data_in = para_malloc(num_samples * sizeof(float));
- src_short_to_float_array(in, data.data_in, num_samples);
+ in_float = para_malloc(num_samples * sizeof(float));
+ src_short_to_float_array(in, in_float, num_samples);
+ data.data_in = in_float;
data.data_out = para_malloc(out_samples * sizeof(float));
ret = src_process(ctx->src_state, &data);
data.data_out = para_malloc(out_samples * sizeof(float));
ret = src_process(ctx->src_state, &data);
if (ret != 0) {
PARA_ERROR_LOG("%s\n", src_strerror(ret));
free(data.data_out);
if (ret != 0) {
PARA_ERROR_LOG("%s\n", src_strerror(ret));
free(data.data_out);