From 93399e9381e62f37f46031f9bb35dec596967b3a Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Tue, 30 Oct 2012 20:40:19 +0100 Subject: lavfi/drawbox: add thickness option --- libavfilter/version.h | 2 +- libavfilter/vf_drawbox.c | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/version.h b/libavfilter/version.h index cb7b2a424e..d14097c35c 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 21 -#define LIBAVFILTER_VERSION_MICRO 102 +#define LIBAVFILTER_VERSION_MICRO 103 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c index a1ae19b4a9..b37a35c6d6 100644 --- a/libavfilter/vf_drawbox.c +++ b/libavfilter/vf_drawbox.c @@ -38,7 +38,7 @@ enum { Y, U, V, A }; typedef struct { const AVClass *class; - int x, y, w, h; + int x, y, w, h, thickness; char *color_str; unsigned char yuv_color[4]; int invert_color; ///< invert luma color @@ -55,6 +55,8 @@ static const AVOption drawbox_options[] = { { "h", "set the box heigth", OFFSET(h), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS }, { "color", "set the box edge color", OFFSET(color_str), AV_OPT_TYPE_STRING, {.str="black"}, CHAR_MIN, CHAR_MAX, FLAGS }, { "c", "set the box edge color", OFFSET(color_str), AV_OPT_TYPE_STRING, {.str="black"}, CHAR_MIN, CHAR_MAX, FLAGS }, + { "thickness", "set the box maximum thickness", OFFSET(thickness), AV_OPT_TYPE_INT, {.i64=4}, 0, INT_MAX, FLAGS }, + { "t", "set the box maximum thickness", OFFSET(thickness), AV_OPT_TYPE_INT, {.i64=4}, 0, INT_MAX, FLAGS }, {NULL}, }; @@ -64,7 +66,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args) { DrawBoxContext *drawbox = ctx->priv; uint8_t rgba_color[4]; - static const char *shorthand[] = { "x", "y", "w", "h", "color", NULL }; + static const char *shorthand[] = { "x", "y", "w", "h", "color", "thickness", NULL }; int ret; drawbox->class = &drawbox_class; @@ -140,15 +142,15 @@ static int draw_slice(AVFilterLink *inlink, int y0, int h, int slice_dir) if (drawbox->invert_color) { for (x = FFMAX(xb, 0); x < xb + drawbox->w && x < picref->video->w; x++) - if ((y - yb < 3) || (yb + drawbox->h - y < 4) || - (x - xb < 3) || (xb + drawbox->w - x < 4)) + if ((y - yb < drawbox->thickness-1) || (yb + drawbox->h - y < drawbox->thickness) || + (x - xb < drawbox->thickness-1) || (xb + drawbox->w - x < drawbox->thickness)) row[0][x] = 0xff - row[0][x]; } else { for (x = FFMAX(xb, 0); x < xb + drawbox->w && x < picref->video->w; x++) { double alpha = (double)drawbox->yuv_color[A] / 255; - if ((y - yb < 3) || (yb + drawbox->h - y < 4) || - (x - xb < 3) || (xb + drawbox->w - x < 4)) { + if ((y - yb < drawbox->thickness-1) || (yb + drawbox->h - y < drawbox->thickness) || + (x - xb < drawbox->thickness-1) || (xb + drawbox->w - x < drawbox->thickness)) { row[0][x ] = (1 - alpha) * row[0][x ] + alpha * drawbox->yuv_color[Y]; row[1][x >> drawbox->hsub] = (1 - alpha) * row[1][x >> drawbox->hsub] + alpha * drawbox->yuv_color[U]; row[2][x >> drawbox->hsub] = (1 - alpha) * row[2][x >> drawbox->hsub] + alpha * drawbox->yuv_color[V]; -- cgit v1.2.3