summaryrefslogtreecommitdiff
path: root/libavfilter/vsrc_testsrc.c
diff options
context:
space:
mode:
authorTobias Rapp <t.rapp@noa-archive.com>2018-05-08 11:43:50 +0200
committerTobias Rapp <t.rapp@noa-archive.com>2018-05-18 15:39:54 +0200
commiteb28b5ec8a21d1ac0d3752f81a187e20eb012016 (patch)
treea3f68ccfe7fb0fc793ac2990e5e2831eb11d3d3d /libavfilter/vsrc_testsrc.c
parente9dd5b4f5eed46c576020b40ebaa87cdac2c633e (diff)
downloadffmpeg-eb28b5ec8a21d1ac0d3752f81a187e20eb012016.tar.gz
avfilter/vsrc_testsrc: add pal75bars and pal100bars video filter sources
Generates color bar test patterns based on EBU PAL recommendations. Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Tobias Rapp <t.rapp@noa-archive.com>
Diffstat (limited to 'libavfilter/vsrc_testsrc.c')
-rw-r--r--libavfilter/vsrc_testsrc.c106
1 files changed, 105 insertions, 1 deletions
diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
index a790974d14..8d76ae9271 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_PAL75_FILTER || CONFIG_PAL100_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