|
|
|
@ -295,13 +295,14 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf) |
|
|
|
|
|
|
|
|
|
if (s->q.available != s->size) { |
|
|
|
|
if (s->q.available < s->mid) { |
|
|
|
|
out = ff_get_video_buffer(outlink, outlink->w, outlink->h); |
|
|
|
|
if (!out) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
for (i = 0; i < s->mid; i++) |
|
|
|
|
ff_bufqueue_add(ctx, &s->q, av_frame_clone(out)); |
|
|
|
|
av_frame_free(&out); |
|
|
|
|
for (i = 0; i < s->mid; i++) { |
|
|
|
|
out = av_frame_clone(buf); |
|
|
|
|
if (!out) { |
|
|
|
|
av_frame_free(&buf); |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
ff_bufqueue_add(ctx, &s->q, out); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (s->q.available < s->size) { |
|
|
|
|
ff_bufqueue_add(ctx, &s->q, buf); |
|
|
|
@ -362,7 +363,7 @@ static int request_frame(AVFilterLink *outlink) |
|
|
|
|
ret = ff_request_frame(ctx->inputs[0]); |
|
|
|
|
|
|
|
|
|
if (ret == AVERROR_EOF && !ctx->is_disabled && s->available) { |
|
|
|
|
AVFrame *buf = ff_get_video_buffer(outlink, outlink->w, outlink->h); |
|
|
|
|
AVFrame *buf = av_frame_clone(ff_bufqueue_peek(&s->q, s->available)); |
|
|
|
|
if (!buf) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|