X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_random.c;h=e73a224cd8cd2dd279718c0b5d9da66afe3cdf2c;hb=cb9dbc60db1847fcb594684b92334da54ea8757e;hp=373a7db053af1220b4218828a2e7ddf1003cc569;hpb=22219a3ac46ac18f797c94e4619a34728556786c;p=ffmpeg diff --git a/libavfilter/vf_random.c b/libavfilter/vf_random.c index 373a7db053a..e73a224cd8c 100644 --- a/libavfilter/vf_random.c +++ b/libavfilter/vf_random.c @@ -97,8 +97,13 @@ static int request_frame(AVFilterLink *outlink) ret = ff_request_frame(ctx->inputs[0]); +next: if (ret == AVERROR_EOF && !ctx->is_disabled && s->nb_frames > 0) { AVFrame *out = s->frames[s->nb_frames - 1]; + if (!out) { + s->nb_frames--; + goto next; + } out->pts = s->pts[s->flush_idx++]; ret = ff_filter_frame(outlink, out); s->frames[s->nb_frames - 1] = NULL; @@ -108,6 +113,14 @@ static int request_frame(AVFilterLink *outlink) return ret; } +static av_cold void uninit(AVFilterContext *ctx) +{ + RandomContext *s = ctx->priv; + + for (int i = 0; i < s->nb_frames; i++) + av_frame_free(&s->frames[i]); +} + static const AVFilterPad random_inputs[] = { { .name = "default", @@ -132,6 +145,7 @@ AVFilter ff_vf_random = { .priv_size = sizeof(RandomContext), .priv_class = &random_class, .init = init, + .uninit = uninit, .inputs = random_inputs, .outputs = random_outputs, };