diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c index 3aa0c1477d..f85a7690fd 100644 --- a/libavfilter/vf_cropdetect.c +++ b/libavfilter/vf_cropdetect.c @@ -337,9 +337,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) scan_w = s->x2 - s->x1; scan_h = s->y2 - s->y1; -#define FIND_EDGE(DST, FROM, NOEND, INC, STEP0, STEP1, LEN) \ +#define FIND_EDGE(DST, FROM, NOEND, INC, BASE, STEP0, STEP1, LEN) \ for (last_y = y = FROM; NOEND; y = y INC) { \ - if (checkline_edge(ctx, tmpbuf + STEP0 * y, STEP1, LEN)) { \ + if (checkline_edge(ctx, BASE + STEP0 * y, STEP1, LEN)) { \ if (last_y INC == y) { \ DST = y; \ break; \ @@ -351,10 +351,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) DST = y -(INC); \ } - FIND_EDGE(s->y1, s->y1, y >= 0, -1, inw, 1, scan_w); - FIND_EDGE(s->y2, s->y2, y < inh, +1, inw, 1, scan_w); - FIND_EDGE(s->x1, s->x1, y >= 0, -1, 1, inw, scan_h); - FIND_EDGE(s->x2, s->x2, y < inw, +1, 1, inw, scan_h); + const uint8_t *rows = tmpbuf + s->x1; + const uint8_t *cols = tmpbuf + s->y1 * inw; + FIND_EDGE(s->y1, s->y1, y >= 0, -1, rows, inw, 1, scan_w); + FIND_EDGE(s->y2, s->y2, y < inh, +1, rows, inw, 1, scan_w); + FIND_EDGE(s->x1, s->x1, y >= 0, -1, cols, 1, inw, scan_h); + FIND_EDGE(s->x2, s->x2, y < inw, +1, cols, 1, inw, scan_h); // queue bboxes bboff = (s->frame_nb - 1) % s->window_size; diff --git a/tests/ref/fate/filter-metadata-cropdetect1 b/tests/ref/fate/filter-metadata-cropdetect1 index 25c80ccebc..1f02632fc2 100644 --- a/tests/ref/fate/filter-metadata-cropdetect1 +++ b/tests/ref/fate/filter-metadata-cropdetect1 @@ -1,9 +1,9 @@ pts=0 pts=1001 -pts=2002|tag:lavfi.cropdetect.y=314|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=851|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=601|tag:lavfi.cropdetect.w=832|tag:lavfi.cropdetect.h=288|tag:lavfi.cropdetect.x=20|tag:lavfi.cropdetect.limit=0.094118 -pts=3003|tag:lavfi.cropdetect.y=316|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=864|tag:lavfi.cropdetect.h=304|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.limit=0.094118 +pts=2002|tag:lavfi.cropdetect.y=314|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=661|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=601|tag:lavfi.cropdetect.w=656|tag:lavfi.cropdetect.h=288|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.limit=0.094118 +pts=3003|tag:lavfi.cropdetect.y=316|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=304|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.limit=0.094118 pts=4004|tag:lavfi.cropdetect.y=122|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.limit=0.094118 -pts=5005|tag:lavfi.cropdetect.y=316|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=864|tag:lavfi.cropdetect.h=304|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.limit=0.094118 +pts=5005|tag:lavfi.cropdetect.y=316|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=304|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.limit=0.094118 pts=6006|tag:lavfi.cropdetect.y=122|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.limit=0.094118 pts=7007|tag:lavfi.cropdetect.y=122|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.limit=0.094118 pts=8008|tag:lavfi.cropdetect.y=122|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.limit=0.094118 diff --git a/tests/ref/fate/filter-metadata-cropdetect2 b/tests/ref/fate/filter-metadata-cropdetect2 index a27577b99b..d8c8f778db 100644 --- a/tests/ref/fate/filter-metadata-cropdetect2 +++ b/tests/ref/fate/filter-metadata-cropdetect2 @@ -1,10 +1,10 @@ pts=0 pts=512 -pts=1024|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.limit=0.094118 +pts=1024|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1215|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1184|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 pts=1536|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1257|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1232|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=24|tag:lavfi.cropdetect.limit=0.094118 -pts=2048|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.limit=0.094118 -pts=2560|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.limit=0.094118 -pts=3072|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=912|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 -pts=3584|tag:lavfi.cropdetect.y=40|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=38|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=896|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 -pts=4096|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=912|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 -pts=4608|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.limit=0.094118 +pts=2048|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1215|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1184|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 +pts=2560|tag:lavfi.cropdetect.y=42|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1215|tag:lavfi.cropdetect.y1=37|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1184|tag:lavfi.cropdetect.h=1072|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 +pts=3072|tag:lavfi.cropdetect.y=40|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=37|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=896|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 +pts=3584|tag:lavfi.cropdetect.y=42|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=40|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=896|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 +pts=4096|tag:lavfi.cropdetect.y=40|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=37|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=896|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118 +pts=4608|tag:lavfi.cropdetect.y=42|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1215|tag:lavfi.cropdetect.y1=37|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1184|tag:lavfi.cropdetect.h=1072|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.limit=0.094118