From abdafca9ad26b020b13b76d538a98d135d127fcb Mon Sep 17 00:00:00 2001 From: Gyan Doshi Date: Thu, 1 Apr 2021 18:22:03 +0530 Subject: avfilter/find_rect: add option to discard non-matching frames Default is disabled. --- libavfilter/vf_find_rect.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'libavfilter/vf_find_rect.c') diff --git a/libavfilter/vf_find_rect.c b/libavfilter/vf_find_rect.c index ea3b7aeee5..f9129cc140 100644 --- a/libavfilter/vf_find_rect.c +++ b/libavfilter/vf_find_rect.c @@ -40,6 +40,7 @@ typedef struct FOCContext { AVFrame *obj_frame; AVFrame *needle_frame[MAX_MIPMAPS]; AVFrame *haystack_frame[MAX_MIPMAPS]; + int discard; } FOCContext; #define OFFSET(x) offsetof(FOCContext, x) @@ -52,6 +53,7 @@ static const AVOption find_rect_options[] = { { "ymin", "", OFFSET(ymin), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS }, { "xmax", "", OFFSET(xmax), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS }, { "ymax", "", OFFSET(ymax), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS }, + { "discard", "", OFFSET(discard), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, FLAGS }, { NULL } }; @@ -206,7 +208,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) } if (best_score > foc->threshold) { - return ff_filter_frame(ctx->outputs[0], in); + if (foc->discard) { + av_frame_free(&in); + return 0; + } else { + return ff_filter_frame(ctx->outputs[0], in); + } } av_log(ctx, AV_LOG_INFO, "Found at n=%lld pts_time=%f x=%d y=%d with score=%f\n", -- cgit v1.2.3