diff options
Diffstat (limited to 'src/pcm_resample_libsamplerate.c')
-rw-r--r-- | src/pcm_resample_libsamplerate.c | 49 |
1 files changed, 17 insertions, 32 deletions
diff --git a/src/pcm_resample_libsamplerate.c b/src/pcm_resample_libsamplerate.c index a71659d51..ccee76d04 100644 --- a/src/pcm_resample_libsamplerate.c +++ b/src/pcm_resample_libsamplerate.c @@ -142,6 +142,21 @@ pcm_resample_set(struct pcm_resample_state *state, return true; } +static bool +lsr_process(struct pcm_resample_state *state, GError **error_r) +{ + if (state->error == 0) + state->error = src_process(state->state, &state->data); + if (state->error) { + g_set_error(error_r, libsamplerate_quark(), state->error, + "libsamplerate has failed: %s", + src_strerror(state->error)); + return false; + } + + return true; +} + const int16_t * pcm_resample_lsr_16(struct pcm_resample_state *state, uint8_t channels, @@ -154,7 +169,6 @@ pcm_resample_lsr_16(struct pcm_resample_state *state, SRC_DATA *data = &state->data; size_t data_in_size; size_t data_out_size; - int error; int16_t *dest_buffer; assert((src_size % (sizeof(*src_buffer) * channels)) == 0); @@ -164,14 +178,6 @@ pcm_resample_lsr_16(struct pcm_resample_state *state, if (!success) return NULL; - /* there was an error previously, and nothing has changed */ - if (state->error) { - g_set_error(error_r, libsamplerate_quark(), state->error, - "libsamplerate has failed: %s", - src_strerror(state->error)); - return NULL; - } - data->input_frames = src_size / sizeof(*src_buffer) / channels; data_in_size = data->input_frames * sizeof(float) * channels; data->data_in = pcm_buffer_get(&state->in, data_in_size); @@ -183,14 +189,8 @@ pcm_resample_lsr_16(struct pcm_resample_state *state, src_short_to_float_array(src_buffer, data->data_in, data->input_frames * channels); - error = src_process(state->state, data); - if (error) { - g_set_error(error_r, libsamplerate_quark(), error, - "libsamplerate has failed: %s", - src_strerror(error)); - state->error = error; + if (!lsr_process(state, error_r)) return NULL; - } *dest_size_r = data->output_frames_gen * sizeof(*dest_buffer) * channels; @@ -233,7 +233,6 @@ pcm_resample_lsr_32(struct pcm_resample_state *state, SRC_DATA *data = &state->data; size_t data_in_size; size_t data_out_size; - int error; int32_t *dest_buffer; assert((src_size % (sizeof(*src_buffer) * channels)) == 0); @@ -243,14 +242,6 @@ pcm_resample_lsr_32(struct pcm_resample_state *state, if (!success) return NULL; - /* there was an error previously, and nothing has changed */ - if (state->error) { - g_set_error(error_r, libsamplerate_quark(), state->error, - "libsamplerate has failed: %s", - src_strerror(state->error)); - return NULL; - } - data->input_frames = src_size / sizeof(*src_buffer) / channels; data_in_size = data->input_frames * sizeof(float) * channels; data->data_in = pcm_buffer_get(&state->in, data_in_size); @@ -262,14 +253,8 @@ pcm_resample_lsr_32(struct pcm_resample_state *state, src_int_to_float_array(src_buffer, data->data_in, data->input_frames * channels); - error = src_process(state->state, data); - if (error) { - g_set_error(error_r, libsamplerate_quark(), error, - "libsamplerate has failed: %s", - src_strerror(error)); - state->error = error; + if (!lsr_process(state, error_r)) return NULL; - } *dest_size_r = data->output_frames_gen * sizeof(*dest_buffer) * channels; |