[FFmpeg-devel] [PATCH 1/7] Revert "Revert "lavfi/buffersrc: push the frame deeper if requested.""

James Almer jamrial at gmail.com
Mon Jul 17 17:41:40 EEST 2017


On 7/17/2017 11:19 AM, Nicolas George wrote:
> This reverts commit 04aa09c4bcf2d5a634a35da3a3ae3fc1abe30ef8.

You could mention this is also reverting
e5bce8b4ce7b1f3a83998febdfa86a3771df96ce.

> 
> 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.
> 
> Signed-off-by: Nicolas George <george at nsup.org>
> ---
>  libavfilter/buffersrc.c | 25 +++++++++++++++++++++++++
>  tests/ref/lavf/ffm      |  2 +-
>  tests/ref/lavf/mxf      |  6 +++---
>  3 files changed, 29 insertions(+), 4 deletions(-)
> 
> 
> The field_order info seems to not be printed by any tool, and I do not know
> the MXF format to check directly in the file; with FFM it was easy to see in
> a hexdump. Anyway, the fact that field order was not set before de-reverting
> hints at something fishy happening in the initialization code of ffmpeg. I
> do not have time nor motivation to investigate that, so I will assume the
> change is for the best like FFM.
> 
> If someone wants to investigate, the change can be toggled by simply adding
> "return 0" at the beginning of push_frame(), below.
> 
> 
> diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
> index 587b29b91a..e8f59c2de7 100644
> --- a/libavfilter/buffersrc.c
> +++ b/libavfilter/buffersrc.c
> @@ -173,6 +173,20 @@ int attribute_align_arg av_buffersrc_add_frame_flags(AVFilterContext *ctx, AVFra
>      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,
>                                             AVFrame *frame, int flags)
>  {
> @@ -185,6 +199,11 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
>      if (!frame) {
>          s->eof = 1;
>          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;
>      } else if (s->eof)
>          return AVERROR(EINVAL);
> @@ -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)
>          return ret;
>  
> +    if ((flags & AV_BUFFERSRC_FLAG_PUSH)) {
> +        ret = push_frame(ctx->graph);
> +        if (ret < 0)
> +            return ret;
> +    }
> +
>      return 0;
>  }
>  
> diff --git a/tests/ref/lavf/ffm b/tests/ref/lavf/ffm
> index 54c56034aa..d9fa8d52cb 100644
> --- a/tests/ref/lavf/ffm
> +++ b/tests/ref/lavf/ffm
> @@ -1,3 +1,3 @@
> -a0e9616f0d9a8c1029f3220b1b9175f4 *./tests/data/lavf/lavf.ffm
> +ca2a450cd0d1e299514a345923b4c82a *./tests/data/lavf/lavf.ffm
>  376832 ./tests/data/lavf/lavf.ffm
>  ./tests/data/lavf/lavf.ffm CRC=0x000e23ae
> diff --git a/tests/ref/lavf/mxf b/tests/ref/lavf/mxf
> index 9ab4432c63..48fe95a235 100644
> --- a/tests/ref/lavf/mxf
> +++ b/tests/ref/lavf/mxf
> @@ -1,9 +1,9 @@
> -dbdbb7d8677dc29b0d90eedcf418ce13 *./tests/data/lavf/lavf.mxf
> +eaac3125ac1a61fe5f968c7af83fa71e *./tests/data/lavf/lavf.mxf
>  525369 ./tests/data/lavf/lavf.mxf
>  ./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
>  ./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
>  ./tests/data/lavf/lavf.mxf CRC=0x8dddfaab
> 



More information about the ffmpeg-devel mailing list