From: Limin Wang <[email protected]>
Signed-off-by: Limin Wang <[email protected]>
---
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
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".