|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|