summaryrefslogtreecommitdiff
path: root/libavfilter/vf_cropdetect.c
diff options
context:
space:
mode:
authorGyan Doshi <ffmpeg@gyani.pro>2020-12-08 18:52:37 +0530
committerGyan Doshi <ffmpeg@gyani.pro>2020-12-09 12:52:09 +0530
commit7777e5119ad3377e2c4cb20a7aff56448d035b55 (patch)
treebbb5e43ecc210704f3cfac80dcca24a67534e7f3 /libavfilter/vf_cropdetect.c
parentb9b719fedc532ebc6bbde711d60985e8cb5957b2 (diff)
avfilter/cropdetect: add option for initial skip
The cropdetect filter, at present, skips the first two frames. This behaviour is hardcoded. New option 'skip' allows users to change this. Convenient for when input is a single image or a trimmed video stream. Default is kept at 2 to preserve current behaviour.
Diffstat (limited to 'libavfilter/vf_cropdetect.c')
-rw-r--r--libavfilter/vf_cropdetect.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
index 7c7d0b953a..5ae87cad2d 100644
--- a/libavfilter/vf_cropdetect.c
+++ b/libavfilter/vf_cropdetect.c
@@ -37,6 +37,7 @@ typedef struct CropDetectContext {
int x1, y1, x2, y2;
float limit;
int round;
+ int skip;
int reset_count;
int frame_nb;
int max_pixsteps[4];
@@ -127,10 +128,10 @@ static av_cold int init(AVFilterContext *ctx)
{
CropDetectContext *s = ctx->priv;
- s->frame_nb = -2;
+ s->frame_nb = -1 * s->skip;
- av_log(ctx, AV_LOG_VERBOSE, "limit:%f round:%d reset_count:%d\n",
- s->limit, s->round, s->reset_count);
+ av_log(ctx, AV_LOG_VERBOSE, "limit:%f round:%d skip:%d reset_count:%d\n",
+ s->limit, s->round, s->skip, s->reset_count);
return 0;
}
@@ -167,7 +168,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
int outliers, last_y;
int limit = lrint(s->limit);
- // ignore first 2 frames - they may be empty
+ // ignore first s->skip frames
if (++s->frame_nb > 0) {
metadata = &frame->metadata;
@@ -247,6 +248,7 @@ static const AVOption cropdetect_options[] = {
{ "limit", "Threshold below which the pixel is considered black", OFFSET(limit), AV_OPT_TYPE_FLOAT, { .dbl = 24.0/255 }, 0, 65535, FLAGS },
{ "round", "Value by which the width/height should be divisible", OFFSET(round), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, INT_MAX, FLAGS },
{ "reset", "Recalculate the crop area after this many frames", OFFSET(reset_count), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
+ { "skip", "Number of initial frames to skip", OFFSET(skip), AV_OPT_TYPE_INT, { .i64 = 2 }, 0, INT_MAX, FLAGS },
{ "reset_count", "Recalculate the crop area after this many frames",OFFSET(reset_count),AV_OPT_TYPE_INT,{ .i64 = 0 }, 0, INT_MAX, FLAGS },
{ "max_outliers", "Threshold count of outliers", OFFSET(max_outliers),AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
{ NULL }