[FFmpeg-devel] [PATCH v2 2/2] avfilter/vf_scale: change filter_frame interface to activate interface

Limin Wang lance.lmwang at gmail.com
Wed Sep 18 17:23:41 EEST 2019


ping, patchset 1 is merged already.


On Sat, Sep 07, 2019 at 11:11:26PM +0800, lance.lmwang at gmail.com wrote:
> From: Limin Wang <lance.lmwang at gmail.com>
> 
> Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> ---
>  libavfilter/vf_scale.c | 36 +++++++++++++++++++++++++++++++++++-
>  1 file changed, 35 insertions(+), 1 deletion(-)
> 
> diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
> index cb42794..5c1d811 100644
> --- a/libavfilter/vf_scale.c
> +++ b/libavfilter/vf_scale.c
> @@ -27,6 +27,7 @@
>  #include <string.h>
>  
>  #include "avfilter.h"
> +#include "filters.h"
>  #include "formats.h"
>  #include "internal.h"
>  #include "scale.h"
> @@ -554,6 +555,39 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
>      return ret;
>  }
>  
> +static int activate(AVFilterContext *ctx)
> +{
> +    AVFilterLink *inlink = ctx->inputs[0];
> +    AVFilterLink *outlink = ctx->outputs[0];
> +    AVFrame *in, *out = NULL;
> +    int64_t pts;
> +    int ret, status;
> +
> +    FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink);
> +
> +    ret = ff_inlink_consume_frame(inlink, &in);
> +    if (ret > 0) {
> +        ret = scale_frame(inlink, in, &out);
> +        if (ret)
> +            return ret;
> +        if (out)
> +            return ff_filter_frame(outlink, out);
> +    }
> +
> +    if (ff_inlink_acknowledge_status(inlink, &status, &pts)) {
> +        if (status == AVERROR_EOF) {
> +            /* frame flushing */
> +        }
> +
> +        ff_outlink_set_status(outlink, status, pts);
> +        return ret;
> +    }
> +
> +    FF_FILTER_FORWARD_WANTED(outlink, inlink);
> +
> +    return FFERROR_NOT_READY;
> +}
> +
>  static int filter_frame_ref(AVFilterLink *link, AVFrame *in)
>  {
>      AVFilterLink *outlink = link->dst->outputs[1];
> @@ -653,7 +687,6 @@ static const AVFilterPad avfilter_vf_scale_inputs[] = {
>      {
>          .name         = "default",
>          .type         = AVMEDIA_TYPE_VIDEO,
> -        .filter_frame = filter_frame,
>      },
>      { NULL }
>  };
> @@ -672,6 +705,7 @@ AVFilter ff_vf_scale = {
>      .description     = NULL_IF_CONFIG_SMALL("Scale the input video size and/or convert the image format."),
>      .init_dict       = init_dict,
>      .uninit          = uninit,
> +    .activate        = activate,
>      .query_formats   = query_formats,
>      .priv_size       = sizeof(ScaleContext),
>      .priv_class      = &scale_class,
> -- 
> 2.6.4
> 


More information about the ffmpeg-devel mailing list