pcm_resample: moved code to pcm_resample_set()
A future patch will implement a 24 bit resampler. To unify code, move code which can be shared to a separate function.
This commit is contained in:
@@ -62,30 +62,23 @@ out:
|
|||||||
return convalgo;
|
return convalgo;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t
|
static void
|
||||||
pcm_resample_16(uint8_t channels,
|
pcm_resample_set(struct pcm_resample_state *state,
|
||||||
unsigned src_rate,
|
uint8_t channels, unsigned src_rate, unsigned dest_rate)
|
||||||
const int16_t *src_buffer, size_t src_size,
|
|
||||||
unsigned dest_rate,
|
|
||||||
int16_t *dest_buffer, size_t dest_size,
|
|
||||||
struct pcm_resample_state *state)
|
|
||||||
{
|
{
|
||||||
static int convalgo = -1;
|
static int convalgo = -1;
|
||||||
SRC_DATA *data = &state->data;
|
|
||||||
size_t data_in_size;
|
|
||||||
size_t data_out_size;
|
|
||||||
int error;
|
int error;
|
||||||
|
SRC_DATA *data = &state->data;
|
||||||
assert((src_size % (sizeof(*src_buffer) * channels)) == 0);
|
|
||||||
assert((dest_size % (sizeof(*dest_buffer) * channels)) == 0);
|
|
||||||
|
|
||||||
if (convalgo < 0)
|
if (convalgo < 0)
|
||||||
convalgo = pcm_resample_get_converter();
|
convalgo = pcm_resample_get_converter();
|
||||||
|
|
||||||
/* (re)set the state/ratio if the in or out format changed */
|
/* (re)set the state/ratio if the in or out format changed */
|
||||||
if (channels != state->prev.channels ||
|
if (channels == state->prev.channels &&
|
||||||
src_rate != state->prev.src_rate ||
|
src_rate == state->prev.src_rate &&
|
||||||
dest_rate != state->prev.dest_rate) {
|
dest_rate == state->prev.dest_rate)
|
||||||
|
return;
|
||||||
|
|
||||||
state->error = false;
|
state->error = false;
|
||||||
state->prev.channels = channels;
|
state->prev.channels = channels;
|
||||||
state->prev.src_rate = src_rate;
|
state->prev.src_rate = src_rate;
|
||||||
@@ -99,7 +92,7 @@ pcm_resample_16(uint8_t channels,
|
|||||||
ERROR("cannot create new libsamplerate state: %s\n",
|
ERROR("cannot create new libsamplerate state: %s\n",
|
||||||
src_strerror(error));
|
src_strerror(error));
|
||||||
state->error = true;
|
state->error = true;
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
data->src_ratio = (double)dest_rate / (double)src_rate;
|
data->src_ratio = (double)dest_rate / (double)src_rate;
|
||||||
@@ -108,6 +101,24 @@ pcm_resample_16(uint8_t channels,
|
|||||||
src_set_ratio(state->state, data->src_ratio);
|
src_set_ratio(state->state, data->src_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
pcm_resample_16(uint8_t channels,
|
||||||
|
unsigned src_rate,
|
||||||
|
const int16_t *src_buffer, size_t src_size,
|
||||||
|
unsigned dest_rate,
|
||||||
|
int16_t *dest_buffer, size_t dest_size,
|
||||||
|
struct pcm_resample_state *state)
|
||||||
|
{
|
||||||
|
SRC_DATA *data = &state->data;
|
||||||
|
size_t data_in_size;
|
||||||
|
size_t data_out_size;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
assert((src_size % (sizeof(*src_buffer) * channels)) == 0);
|
||||||
|
assert((dest_size % (sizeof(*dest_buffer) * channels)) == 0);
|
||||||
|
|
||||||
|
pcm_resample_set(state, channels, src_rate, dest_rate);
|
||||||
|
|
||||||
/* there was an error previously, and nothing has changed */
|
/* there was an error previously, and nothing has changed */
|
||||||
if (state->error)
|
if (state->error)
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user