History

avfilter/af_afftdn: add support for writable input frames

Paul B Mahol committed 4 years ago

Commit 2cb482a1 parent df272921 file · +17 −17Browse files

Showing the changes to libavfilter (1 of 1 file). Show all

Unified · Split

libavfilter/af_afftdn.c+17−17
@@ -1164,9 +1164,8 @@ static int output_frame(AVFilterLink *inlink, AVFrame *in) · 1163 unmodified lines
11641164 AudioFFTDeNoiseContext *s = ctx->priv;
11651165 const int output_mode = ctx->is_disabled ? IN_MODE : s->output_mode;
11661166 const int offset = s->window_length - s->sample_advance;
1167− AVFrame *out = NULL;
1167+ AVFrame *out;
11681168 ThreadData td;
1169− int ret = 0;
11701169
11711170 for (int ch = 0; ch < s->channels; ch++) {
11721171 float *src = (float *)s->winframe->extended_data[ch];
@@ -1225,10 +1224,16 @@ static int output_frame(AVFilterLink *inlink, AVFrame *in) · 52 unmodified lines
12251224 ff_filter_execute(ctx, filter_channel, &td, NULL,
12261225 FFMIN(outlink->channels, ff_filter_get_nb_threads(ctx)));
12271226
1228− out = ff_get_audio_buffer(outlink, in->nb_samples);
1229− if (!out) {
1230− ret = AVERROR(ENOMEM);
1231− goto end;
1227+ if (av_frame_is_writable(in)) {
1228+ out = in;
1229+ } else {
1230+ out = ff_get_audio_buffer(outlink, in->nb_samples);
1231+ if (!out) {
1232+ av_frame_free(&in);
1233+ return AVERROR(ENOMEM);
1234+ }
1235+
1236+ out->pts = in->pts;
12321237 }
12331238
12341239 for (int ch = 0; ch < inlink->channels; ch++) {
@@ -1251,23 +1256,18 @@ static int output_frame(AVFilterLink *inlink, AVFrame *in) · 16 unmodified lines
12511256 dst[m] = orig[m] - src[m];
12521257 break;
12531258 default:
1259+ if (in != out)
1260+ av_frame_free(&in);
12541261 av_frame_free(&out);
1255− ret = AVERROR_BUG;
1256− goto end;
1262+ return AVERROR_BUG;
12571263 }
12581264 memmove(src, src + s->sample_advance, (s->window_length - s->sample_advance) * sizeof(*src));
12591265 memset(src + (s->window_length - s->sample_advance), 0, s->sample_advance * sizeof(*src));
12601266 }
12611267
1262− out->pts = in->pts;
1263−
1264− ret = ff_filter_frame(outlink, out);
1265− if (ret < 0)
1266− goto end;
1267−end:
1268− av_frame_free(&in);
1269−
1270− return ret;
1268+ if (out != in)
1269+ av_frame_free(&in);
1270+ return ff_filter_frame(outlink, out);
12711271 }
12721272
12731273 static int activate(AVFilterContext *ctx)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t