Commit 1daacba9 authored by Nicolas George's avatar Nicolas George

Revert "Revert "lavfi/buffersrc: push the frame deeper if requested.""

This reverts commit 04aa09c4
and reintroduces 0ff5567a that
was temporarily reverted due to minor regressions.

It also reverts e5bce8b4 that fixed FATE refs.
The fate-ffm change is caused by field_order now being set
on the output format because the first frame arrives earlier.
The fate-mxf change is assumed to be the same.
parent 70eb77b3
...@@ -173,6 +173,20 @@ int attribute_align_arg av_buffersrc_add_frame_flags(AVFilterContext *ctx, AVFra ...@@ -173,6 +173,20 @@ int attribute_align_arg av_buffersrc_add_frame_flags(AVFilterContext *ctx, AVFra
return ret; return ret;
} }
static int push_frame(AVFilterGraph *graph)
{
int ret;
while (1) {
ret = ff_filter_graph_run_once(graph);
if (ret == AVERROR(EAGAIN))
break;
if (ret < 0)
return ret;
}
return 0;
}
static int av_buffersrc_add_frame_internal(AVFilterContext *ctx, static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
AVFrame *frame, int flags) AVFrame *frame, int flags)
{ {
...@@ -185,6 +199,11 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx, ...@@ -185,6 +199,11 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
if (!frame) { if (!frame) {
s->eof = 1; s->eof = 1;
ff_avfilter_link_set_in_status(ctx->outputs[0], AVERROR_EOF, AV_NOPTS_VALUE); ff_avfilter_link_set_in_status(ctx->outputs[0], AVERROR_EOF, AV_NOPTS_VALUE);
if ((flags & AV_BUFFERSRC_FLAG_PUSH)) {
ret = push_frame(ctx->graph);
if (ret < 0)
return ret;
}
return 0; return 0;
} else if (s->eof) } else if (s->eof)
return AVERROR(EINVAL); return AVERROR(EINVAL);
...@@ -239,6 +258,12 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx, ...@@ -239,6 +258,12 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
if ((ret = ctx->output_pads[0].request_frame(ctx->outputs[0])) < 0) if ((ret = ctx->output_pads[0].request_frame(ctx->outputs[0])) < 0)
return ret; return ret;
if ((flags & AV_BUFFERSRC_FLAG_PUSH)) {
ret = push_frame(ctx->graph);
if (ret < 0)
return ret;
}
return 0; return 0;
} }
......
a0e9616f0d9a8c1029f3220b1b9175f4 *./tests/data/lavf/lavf.ffm ca2a450cd0d1e299514a345923b4c82a *./tests/data/lavf/lavf.ffm
376832 ./tests/data/lavf/lavf.ffm 376832 ./tests/data/lavf/lavf.ffm
./tests/data/lavf/lavf.ffm CRC=0x000e23ae ./tests/data/lavf/lavf.ffm CRC=0x000e23ae
dbdbb7d8677dc29b0d90eedcf418ce13 *./tests/data/lavf/lavf.mxf eaac3125ac1a61fe5f968c7af83fa71e *./tests/data/lavf/lavf.mxf
525369 ./tests/data/lavf/lavf.mxf 525369 ./tests/data/lavf/lavf.mxf
./tests/data/lavf/lavf.mxf CRC=0x8dddfaab ./tests/data/lavf/lavf.mxf CRC=0x8dddfaab
40fcb0a898f8825a17f5754b23762f49 *./tests/data/lavf/lavf.mxf 1562530330b13e9e70f522fe20265632 *./tests/data/lavf/lavf.mxf
560697 ./tests/data/lavf/lavf.mxf 560697 ./tests/data/lavf/lavf.mxf
./tests/data/lavf/lavf.mxf CRC=0xf21b1b48 ./tests/data/lavf/lavf.mxf CRC=0xf21b1b48
9233d192af20fc2a89304f5ae93c21ee *./tests/data/lavf/lavf.mxf e07858715997313ae66a1cdd6fde5f66 *./tests/data/lavf/lavf.mxf
525369 ./tests/data/lavf/lavf.mxf 525369 ./tests/data/lavf/lavf.mxf
./tests/data/lavf/lavf.mxf CRC=0x8dddfaab ./tests/data/lavf/lavf.mxf CRC=0x8dddfaab
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment