[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