X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvsrc_testsrc.c;h=f06714807ffda7e8d8749c9f60ae059a2153f90c;hb=8dc5eb43b070efe152be8971ae58512ea23ecc02;hp=a790974d14213f565eb99395b47126dabe876d10;hpb=7386b4ff39506b7a34b3689cc4b05993ed9b4a4f;p=ffmpeg diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index a790974d142..f06714807ff 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -1252,7 +1252,7 @@ AVFilter ff_vsrc_yuvtestsrc = { #endif /* CONFIG_YUVTESTSRC_FILTER */ -#if CONFIG_SMPTEBARS_FILTER || CONFIG_SMPTEHDBARS_FILTER +#if CONFIG_PAL75BARS_FILTER || CONFIG_PAL100BARS_FILTER || CONFIG_SMPTEBARS_FILTER || CONFIG_SMPTEHDBARS_FILTER static const uint8_t rainbow[7][4] = { { 180, 128, 128, 255 }, /* 75% white */ @@ -1264,6 +1264,16 @@ static const uint8_t rainbow[7][4] = { { 35, 212, 114, 255 }, /* 75% blue */ }; +static const uint8_t rainbow100[7][4] = { + { 235, 128, 128, 255 }, /* 100% white */ + { 210, 16, 146, 255 }, /* 100% yellow */ + { 170, 166, 16, 255 }, /* 100% cyan */ + { 145, 54, 34, 255 }, /* 100% green */ + { 106, 202, 222, 255 }, /* 100% magenta */ + { 81, 90, 240, 255 }, /* 100% red */ + { 41, 240, 110, 255 }, /* 100% blue */ +}; + static const uint8_t rainbowhd[7][4] = { { 180, 128, 128, 255 }, /* 75% white */ { 168, 44, 136, 255 }, /* 75% yellow */ @@ -1371,6 +1381,100 @@ static const AVFilterPad smptebars_outputs[] = { { NULL } }; +#if CONFIG_PAL75BARS_FILTER + +#define pal75bars_options options +AVFILTER_DEFINE_CLASS(pal75bars); + +static void pal75bars_fill_picture(AVFilterContext *ctx, AVFrame *picref) +{ + TestSourceContext *test = ctx->priv; + int r_w, i, x = 0; + const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(picref->format); + + picref->color_range = AVCOL_RANGE_MPEG; + picref->colorspace = AVCOL_SPC_BT470BG; + + r_w = FFALIGN((test->w + 7) / 8, 1 << pixdesc->log2_chroma_w); + + draw_bar(test, white, x, 0, r_w, test->h, picref); + x += r_w; + for (i = 1; i < 7; i++) { + draw_bar(test, rainbow[i], x, 0, r_w, test->h, picref); + x += r_w; + } + draw_bar(test, black0, x, 0, r_w, test->h, picref); +} + +static av_cold int pal75bars_init(AVFilterContext *ctx) +{ + TestSourceContext *test = ctx->priv; + + test->fill_picture_fn = pal75bars_fill_picture; + test->draw_once = 1; + return init(ctx); +} + +AVFilter ff_vsrc_pal75bars = { + .name = "pal75bars", + .description = NULL_IF_CONFIG_SMALL("Generate PAL 75% color bars."), + .priv_size = sizeof(TestSourceContext), + .priv_class = &pal75bars_class, + .init = pal75bars_init, + .uninit = uninit, + .query_formats = smptebars_query_formats, + .inputs = NULL, + .outputs = smptebars_outputs, +}; + +#endif /* CONFIG_PAL75BARS_FILTER */ + +#if CONFIG_PAL100BARS_FILTER + +#define pal100bars_options options +AVFILTER_DEFINE_CLASS(pal100bars); + +static void pal100bars_fill_picture(AVFilterContext *ctx, AVFrame *picref) +{ + TestSourceContext *test = ctx->priv; + int r_w, i, x = 0; + const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(picref->format); + + picref->color_range = AVCOL_RANGE_MPEG; + picref->colorspace = AVCOL_SPC_BT470BG; + + r_w = FFALIGN((test->w + 7) / 8, 1 << pixdesc->log2_chroma_w); + + for (i = 0; i < 7; i++) { + draw_bar(test, rainbow100[i], x, 0, r_w, test->h, picref); + x += r_w; + } + draw_bar(test, black0, x, 0, r_w, test->h, picref); +} + +static av_cold int pal100bars_init(AVFilterContext *ctx) +{ + TestSourceContext *test = ctx->priv; + + test->fill_picture_fn = pal100bars_fill_picture; + test->draw_once = 1; + return init(ctx); +} + +AVFilter ff_vsrc_pal100bars = { + .name = "pal100bars", + .description = NULL_IF_CONFIG_SMALL("Generate PAL 100% color bars."), + .priv_size = sizeof(TestSourceContext), + .priv_class = &pal100bars_class, + .init = pal100bars_init, + .uninit = uninit, + .query_formats = smptebars_query_formats, + .inputs = NULL, + .outputs = smptebars_outputs, +}; + +#endif /* CONFIG_PAL100BARS_FILTER */ + #if CONFIG_SMPTEBARS_FILTER #define smptebars_options options