FFTComplex *fft_in_r = NULL;
float *data_ir_l = NULL;
float *data_ir_r = NULL;
- int offset = 0;
+ int offset = 0, ret = 0;
int n_fft;
int i, j;
fft_in_l = av_calloc(n_fft, sizeof(*fft_in_l));
fft_in_r = av_calloc(n_fft, sizeof(*fft_in_r));
if (!fft_in_l || !fft_in_r) {
- return AVERROR(ENOMEM);
+ ret = AVERROR(ENOMEM);
+ goto fail;
}
av_fft_end(s->fft[0]);
if (!s->fft[0] || !s->fft[1] || !s->ifft[0] || !s->ifft[1]) {
av_log(ctx, AV_LOG_ERROR, "Unable to create FFT contexts of size %d.\n", s->n_fft);
- return AVERROR(ENOMEM);
+ ret = AVERROR(ENOMEM);
+ goto fail;
}
}
s->ringbuffer[1] = av_calloc(s->buffer_length, sizeof(float));
s->temp_fft[0] = av_malloc_array(s->n_fft, sizeof(FFTComplex));
s->temp_fft[1] = av_malloc_array(s->n_fft, sizeof(FFTComplex));
- if (!s->temp_fft[0] || !s->temp_fft[1])
- return AVERROR(ENOMEM);
+ if (!s->temp_fft[0] || !s->temp_fft[1]) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
}
if (!s->data_ir[0] || !s->data_ir[1] ||
- !s->ringbuffer[0] || !s->ringbuffer[1])
- return AVERROR(ENOMEM);
+ !s->ringbuffer[0] || !s->ringbuffer[1]) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
s->in[0].frame = ff_get_audio_buffer(ctx->inputs[0], s->size);
- if (!s->in[0].frame)
- return AVERROR(ENOMEM);
+ if (!s->in[0].frame) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
for (i = 0; i < s->nb_irs; i++) {
s->in[i + 1].frame = ff_get_audio_buffer(ctx->inputs[i + 1], s->ir_len);
- if (!s->in[i + 1].frame)
- return AVERROR(ENOMEM);
+ if (!s->in[i + 1].frame) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
}
if (s->type == TIME_DOMAIN) {
data_ir_l = av_calloc(nb_irs * FFALIGN(ir_len, 16), sizeof(*data_ir_l));
data_ir_r = av_calloc(nb_irs * FFALIGN(ir_len, 16), sizeof(*data_ir_r));
if (!data_ir_r || !data_ir_l || !s->temp_src[0] || !s->temp_src[1]) {
- av_free(data_ir_l);
- av_free(data_ir_r);
- return AVERROR(ENOMEM);
+ ret = AVERROR(ENOMEM);
+ goto fail;
}
} else {
data_hrtf_l = av_malloc_array(n_fft, sizeof(*data_hrtf_l) * nb_irs);
data_hrtf_r = av_malloc_array(n_fft, sizeof(*data_hrtf_r) * nb_irs);
if (!data_hrtf_r || !data_hrtf_l) {
- av_free(data_hrtf_l);
- av_free(data_hrtf_r);
- return AVERROR(ENOMEM);
+ ret = AVERROR(ENOMEM);
+ goto fail;
}
}
if (s->type == TIME_DOMAIN) {
memcpy(s->data_ir[0], data_ir_l, sizeof(float) * nb_irs * FFALIGN(ir_len, 16));
memcpy(s->data_ir[1], data_ir_r, sizeof(float) * nb_irs * FFALIGN(ir_len, 16));
-
- av_freep(&data_ir_l);
- av_freep(&data_ir_r);
} else {
s->data_hrtf[0] = av_malloc_array(n_fft * s->nb_irs, sizeof(FFTComplex));
s->data_hrtf[1] = av_malloc_array(n_fft * s->nb_irs, sizeof(FFTComplex));
if (!s->data_hrtf[0] || !s->data_hrtf[1]) {
- av_freep(&data_hrtf_l);
- av_freep(&data_hrtf_r);
- av_freep(&fft_in_l);
- av_freep(&fft_in_r);
- return AVERROR(ENOMEM);
+ ret = AVERROR(ENOMEM);
+ goto fail;
}
memcpy(s->data_hrtf[0], data_hrtf_l,
sizeof(FFTComplex) * nb_irs * n_fft);
memcpy(s->data_hrtf[1], data_hrtf_r,
sizeof(FFTComplex) * nb_irs * n_fft);
-
- av_freep(&data_hrtf_l);
- av_freep(&data_hrtf_r);
-
- av_freep(&fft_in_l);
- av_freep(&fft_in_r);
}
s->have_hrirs = 1;
- return 0;
+fail:
+
+ av_freep(&data_ir_l);
+ av_freep(&data_ir_r);
+
+ av_freep(&data_hrtf_l);
+ av_freep(&data_hrtf_r);
+
+ av_freep(&fft_in_l);
+ av_freep(&fft_in_r);
+
+ return ret;
}
static int filter_frame(AVFilterLink *inlink, AVFrame *in)