|
|
|
@ -120,16 +120,13 @@ static int fir_frame(AudioFIRContext *s, AVFrame *in, AVFilterLink *outlink) |
|
|
|
|
{ |
|
|
|
|
AVFilterContext *ctx = outlink->src; |
|
|
|
|
AVFrame *out = NULL; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
s->nb_samples = in->nb_samples; |
|
|
|
|
|
|
|
|
|
if (!s->want_skip) { |
|
|
|
|
out = ff_get_audio_buffer(outlink, s->nb_samples); |
|
|
|
|
if (!out) { |
|
|
|
|
av_frame_free(&in); |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
out = ff_get_audio_buffer(outlink, s->nb_samples); |
|
|
|
|
if (!out) { |
|
|
|
|
av_frame_free(&in); |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (s->pts == AV_NOPTS_VALUE) |
|
|
|
@ -139,11 +136,9 @@ static int fir_frame(AudioFIRContext *s, AVFrame *in, AVFilterLink *outlink) |
|
|
|
|
|
|
|
|
|
s->part_index = (s->part_index + 1) % s->nb_partitions; |
|
|
|
|
|
|
|
|
|
if (!s->want_skip) { |
|
|
|
|
out->pts = s->pts; |
|
|
|
|
if (s->pts != AV_NOPTS_VALUE) |
|
|
|
|
s->pts += av_rescale_q(out->nb_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base); |
|
|
|
|
} |
|
|
|
|
out->pts = s->pts; |
|
|
|
|
if (s->pts != AV_NOPTS_VALUE) |
|
|
|
|
s->pts += av_rescale_q(out->nb_samples, (AVRational){1, outlink->sample_rate}, outlink->time_base); |
|
|
|
|
|
|
|
|
|
s->index++; |
|
|
|
|
if (s->index == 3) |
|
|
|
@ -152,14 +147,7 @@ static int fir_frame(AudioFIRContext *s, AVFrame *in, AVFilterLink *outlink) |
|
|
|
|
av_frame_free(&in); |
|
|
|
|
s->in[0] = NULL; |
|
|
|
|
|
|
|
|
|
if (s->want_skip == 1) { |
|
|
|
|
s->want_skip = 0; |
|
|
|
|
ret = 0; |
|
|
|
|
} else { |
|
|
|
|
ret = ff_filter_frame(outlink, out); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ret; |
|
|
|
|
return ff_filter_frame(outlink, out); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void drawtext(AVFrame *pic, int x, int y, const char *txt, uint32_t color) |
|
|
|
@ -496,16 +484,7 @@ static int activate(AVFilterContext *ctx) |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (s->need_padding) { |
|
|
|
|
in = ff_get_audio_buffer(outlink, s->part_size); |
|
|
|
|
if (!in) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
s->need_padding = 0; |
|
|
|
|
ret = 1; |
|
|
|
|
} else { |
|
|
|
|
ret = ff_inlink_consume_samples(ctx->inputs[0], s->part_size, s->part_size, &in); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ret = ff_inlink_consume_samples(ctx->inputs[0], s->part_size, s->part_size, &in); |
|
|
|
|
if (ret > 0) |
|
|
|
|
ret = fir_frame(s, in, outlink); |
|
|
|
|
|
|
|
|
@ -626,8 +605,6 @@ static int config_output(AVFilterLink *outlink) |
|
|
|
|
|
|
|
|
|
s->nb_channels = outlink->channels; |
|
|
|
|
s->nb_coef_channels = ctx->inputs[1]->channels; |
|
|
|
|
s->want_skip = 1; |
|
|
|
|
s->need_padding = 1; |
|
|
|
|
s->pts = AV_NOPTS_VALUE; |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|