You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
avfilter/find_rect: add option to discard non-matching frames
Default is disabled.
This commit is contained in:
@@ -12139,6 +12139,9 @@ Number of mipmaps, default is 3.
|
|||||||
|
|
||||||
@item xmin, ymin, xmax, ymax
|
@item xmin, ymin, xmax, ymax
|
||||||
Specifies the rectangle in which to search.
|
Specifies the rectangle in which to search.
|
||||||
|
|
||||||
|
@item discard
|
||||||
|
Discard frames where object is not detected. Default is disabled.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@subsection Examples
|
@subsection Examples
|
||||||
|
@@ -40,6 +40,7 @@ typedef struct FOCContext {
|
|||||||
AVFrame *obj_frame;
|
AVFrame *obj_frame;
|
||||||
AVFrame *needle_frame[MAX_MIPMAPS];
|
AVFrame *needle_frame[MAX_MIPMAPS];
|
||||||
AVFrame *haystack_frame[MAX_MIPMAPS];
|
AVFrame *haystack_frame[MAX_MIPMAPS];
|
||||||
|
int discard;
|
||||||
} FOCContext;
|
} FOCContext;
|
||||||
|
|
||||||
#define OFFSET(x) offsetof(FOCContext, x)
|
#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 },
|
{ "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 },
|
{ "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 },
|
{ "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 }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -206,7 +208,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (best_score > foc->threshold) {
|
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",
|
av_log(ctx, AV_LOG_INFO, "Found at n=%lld pts_time=%f x=%d y=%d with score=%f\n",
|
||||||
|
Reference in New Issue
Block a user