[FFmpeg-cvslog] avfilter/vsrc_testsrc: add complement mode to rgbtestsrc
Paul B Mahol
git at videolan.org
Sun Jan 17 13:29:02 EET 2021
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Jan 16 15:54:25 2021 +0100| [294854bd0a4ec92431b96906cf47a3b02f6c3af4] | committer: Paul B Mahol
avfilter/vsrc_testsrc: add complement mode to rgbtestsrc
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=294854bd0a4ec92431b96906cf47a3b02f6c3af4
---
libavfilter/vsrc_testsrc.c | 34 ++++++++++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
index c047fe8e86..2cf33aadc9 100644
--- a/libavfilter/vsrc_testsrc.c
+++ b/libavfilter/vsrc_testsrc.c
@@ -77,6 +77,7 @@ typedef struct TestSourceContext {
/* only used by rgbtest */
uint8_t rgba_map[4];
+ int complement;
int depth;
/* only used by haldclut */
@@ -963,7 +964,13 @@ AVFilter ff_vsrc_testsrc2 = {
#if CONFIG_RGBTESTSRC_FILTER
-#define rgbtestsrc_options options
+static const AVOption rgbtestsrc_options[] = {
+ COMMON_OPTIONS
+ { "complement", "set complement colors", OFFSET(complement), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS },
+ { "co", "set complement colors", OFFSET(complement), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS },
+ { NULL }
+};
+
AVFILTER_DEFINE_CLASS(rgbtestsrc);
#define R 0
@@ -1024,6 +1031,29 @@ static void rgbtest_put_pixel(uint8_t *dstp[4], int dst_linesizep[4],
}
}
+static void rgbtest_fill_picture_complement(AVFilterContext *ctx, AVFrame *frame)
+{
+ TestSourceContext *test = ctx->priv;
+ int x, y, w = frame->width, h = frame->height;
+
+ for (y = 0; y < h; y++) {
+ for (x = 0; x < w; x++) {
+ int c = (1 << FFMAX(test->depth, 8))*x/w;
+ int r = 0, g = 0, b = 0;
+
+ if (6*y < h ) r = c;
+ else if (6*y < 2*h) g = c, b = c;
+ else if (6*y < 3*h) g = c;
+ else if (6*y < 4*h) r = c, b = c;
+ else if (6*y < 5*h) b = c;
+ else r = c, g = c;
+
+ rgbtest_put_pixel(frame->data, frame->linesize, x, y, r, g, b,
+ ctx->outputs[0]->format, test->rgba_map);
+ }
+ }
+}
+
static void rgbtest_fill_picture(AVFilterContext *ctx, AVFrame *frame)
{
TestSourceContext *test = ctx->priv;
@@ -1049,7 +1079,7 @@ static av_cold int rgbtest_init(AVFilterContext *ctx)
TestSourceContext *test = ctx->priv;
test->draw_once = 1;
- test->fill_picture_fn = rgbtest_fill_picture;
+ test->fill_picture_fn = test->complement ? rgbtest_fill_picture_complement : rgbtest_fill_picture;
return init(ctx);
}
More information about the ffmpeg-cvslog
mailing list