lavfi: add testsrc2 test source.
authorNicolas George <george@nsup.org>
Sun, 25 Oct 2015 15:31:00 +0000 (16:31 +0100)
committerNicolas George <george@nsup.org>
Sat, 7 Nov 2015 15:02:48 +0000 (16:02 +0100)
Similar to testsrc, but using drawutils and therefore
supporting a lot of pixel formats instead of just rgb24.
This allows using it as input for other tests without
requiring a format conversion.
It is also slightly faster than testsrc for some reason.

libavfilter/Makefile
libavfilter/allfilters.c
libavfilter/vsrc_testsrc.c
tests/fate/filter-video.mak
tests/ref/fate/filter-testsrc2-rgb24 [new file with mode: 0644]
tests/ref/fate/filter-testsrc2-yuv420p [new file with mode: 0644]
tests/ref/fate/filter-testsrc2-yuv444p [new file with mode: 0644]

index 1b23085..f771dca 100644 (file)
@@ -264,6 +264,7 @@ OBJS-$(CONFIG_RGBTESTSRC_FILTER)             += vsrc_testsrc.o
 OBJS-$(CONFIG_SMPTEBARS_FILTER)              += vsrc_testsrc.o
 OBJS-$(CONFIG_SMPTEHDBARS_FILTER)            += vsrc_testsrc.o
 OBJS-$(CONFIG_TESTSRC_FILTER)                += vsrc_testsrc.o
+OBJS-$(CONFIG_TESTSRC2_FILTER)               += vsrc_testsrc.o
 
 OBJS-$(CONFIG_NULLSINK_FILTER)               += vsink_nullsink.o
 
index a538b81..05dfac9 100644 (file)
@@ -285,6 +285,7 @@ void avfilter_register_all(void)
     REGISTER_FILTER(SMPTEBARS,      smptebars,      vsrc);
     REGISTER_FILTER(SMPTEHDBARS,    smptehdbars,    vsrc);
     REGISTER_FILTER(TESTSRC,        testsrc,        vsrc);
+    REGISTER_FILTER(TESTSRC2,       testsrc2,       vsrc);
 
     REGISTER_FILTER(NULLSINK,       nullsink,       vsink);
 
index f63c861..1fca3e7 100644 (file)
@@ -41,6 +41,7 @@
 #include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/parseutils.h"
+#include "libavutil/xga_font_data.h"
 #include "avfilter.h"
 #include "drawutils.h"
 #include "formats.h"
@@ -679,6 +680,276 @@ AVFilter ff_vsrc_testsrc = {
 
 #endif /* CONFIG_TESTSRC_FILTER */
 
+#if CONFIG_TESTSRC2_FILTER
+
+static const AVOption testsrc2_options[] = {
+    COMMON_OPTIONS
+    { NULL }
+};
+
+AVFILTER_DEFINE_CLASS(testsrc2);
+
+static void set_color(TestSourceContext *s, FFDrawColor *color, uint32_t argb)
+{
+    uint8_t rgba[4] = { (argb >> 16) & 0xFF,
+                        (argb >>  8) & 0xFF,
+                        (argb >>  0) & 0xFF,
+                        (argb >> 24) & 0xFF, };
+    ff_draw_color(&s->draw, color, rgba);
+}
+
+static uint32_t color_gradient(unsigned index)
+{
+    unsigned si = index & 0xFF, sd = 0xFF - si;
+    switch (index >> 8) {
+    case 0: return 0xFF0000 + (si <<  8);
+    case 1: return 0x00FF00 + (sd << 16);
+    case 2: return 0x00FF00 + (si <<  0);
+    case 3: return 0x0000FF + (sd <<  8);
+    case 4: return 0x0000FF + (si << 16);
+    case 5: return 0xFF0000 + (sd <<  0);
+    }
+    av_assert0(0);
+}
+
+static void draw_text(TestSourceContext *s, AVFrame *frame, FFDrawColor *color,
+                      int x0, int y0, const uint8_t *text)
+{
+    int x = x0;
+
+    for (; *text; text++) {
+        if (*text == '\n') {
+            x = x0;
+            y0 += 16;
+            continue;
+        }
+        ff_blend_mask(&s->draw, color, frame->data, frame->linesize,
+                      frame->width, frame->height,
+                      avpriv_vga16_font + *text * 16, 1, 8, 16, 0, 0, x, y0);
+        x += 8;
+    }
+}
+
+static void test2_fill_picture(AVFilterContext *ctx, AVFrame *frame)
+{
+    TestSourceContext *s = ctx->priv;
+    FFDrawColor color;
+
+    /* colored background */
+    {
+        unsigned i, x = 0, x2;
+
+        x = 0;
+        for (i = 1; i < 7; i++) {
+            x2 = av_rescale(i, s->w, 6);
+            x2 = ff_draw_round_to_sub(&s->draw, 0, 0, x2);
+            set_color(s, &color, ((i & 1) ? 0xFF0000 : 0) |
+                                 ((i & 2) ? 0x00FF00 : 0) |
+                                 ((i & 4) ? 0x0000FF : 0));
+            ff_fill_rectangle(&s->draw, &color, frame->data, frame->linesize,
+                              x, 0, x2 - x, frame->height);
+            x = x2;
+        }
+    }
+
+    /* oblique gradient */
+    /* note: too slow if using blending */
+    if (s->h >= 64) {
+        unsigned x, dx, y0, y, g0, g;
+
+        dx = ff_draw_round_to_sub(&s->draw, 0, +1, 1);
+        y0 = av_rescale_q(s->pts, s->time_base, av_make_q(2, s->h - 16));
+        g0 = av_rescale_q(s->pts, s->time_base, av_make_q(1, 128));
+        for (x = 0; x < s->w; x += dx) {
+            g = (av_rescale(x, 6 * 256, s->w) + g0) % (6 * 256);
+            set_color(s, &color, color_gradient(g));
+            y = y0 + av_rescale(x, s->h / 2, s->w);
+            y %= 2 * (s->h - 16);
+            if (y > s->h - 16)
+                y = 2 * (s->h - 16) - y;
+            y = ff_draw_round_to_sub(&s->draw, 1, 0, y);
+            ff_fill_rectangle(&s->draw, &color, frame->data, frame->linesize,
+                              x, y, dx, 16);
+        }
+    }
+
+    /* top right: draw clock hands */
+    if (s->w >= 64 && s->h >= 64) {
+        int l = (FFMIN(s->w, s->h) - 32) >> 1;
+        int steps = FFMAX(4, l >> 5);
+        int xc = (s->w >> 2) + (s->w >> 1);
+        int yc = (s->h >> 2);
+        int cycle = l << 2;
+        int pos, xh, yh;
+        int c, i;
+
+        for (c = 0; c < 3; c++) {
+            set_color(s, &color, 0xBBBBBB ^ (0xFF << (c << 3)));
+            pos = av_rescale_q(s->pts, s->time_base, av_make_q(64 >> (c << 1), cycle)) % cycle;
+            xh = pos < 1 * l ? pos :
+                 pos < 2 * l ? l :
+                 pos < 3 * l ? 3 * l - pos : 0;
+            yh = pos < 1 * l ? 0 :
+                 pos < 2 * l ? pos - l :
+                 pos < 3 * l ? l :
+                               cycle - pos;
+            xh -= l >> 1;
+            yh -= l >> 1;
+            for (i = 1; i <= steps; i++) {
+                int x = av_rescale(xh, i, steps) + xc;
+                int y = av_rescale(yh, i, steps) + yc;
+                x = ff_draw_round_to_sub(&s->draw, 0, -1, x);
+                y = ff_draw_round_to_sub(&s->draw, 1, -1, y);
+                ff_fill_rectangle(&s->draw, &color, frame->data, frame->linesize,
+                                  x, y, 8, 8);
+            }
+        }
+    }
+
+    /* bottom left: beating rectangles */
+    if (s->w >= 64 && s->h >= 64) {
+        int l = (FFMIN(s->w, s->h) - 16) >> 2;
+        int cycle = l << 3;
+        int xc = (s->w >> 2);
+        int yc = (s->h >> 2) + (s->h >> 1);
+        int xm1 = ff_draw_round_to_sub(&s->draw, 0, -1, xc - 8);
+        int xm2 = ff_draw_round_to_sub(&s->draw, 0, +1, xc + 8);
+        int ym1 = ff_draw_round_to_sub(&s->draw, 1, -1, yc - 8);
+        int ym2 = ff_draw_round_to_sub(&s->draw, 1, +1, yc + 8);
+        int size, step, x1, x2, y1, y2;
+
+        size = av_rescale_q(s->pts, s->time_base, av_make_q(4, cycle));
+        step = size / l;
+        size %= l;
+        if (step & 1)
+            size = l - size;
+        step = (step >> 1) & 3;
+        set_color(s, &color, 0xFF808080);
+        x1 = ff_draw_round_to_sub(&s->draw, 0, -1, xc - 4 - size);
+        x2 = ff_draw_round_to_sub(&s->draw, 0, +1, xc + 4 + size);
+        y1 = ff_draw_round_to_sub(&s->draw, 1, -1, yc - 4 - size);
+        y2 = ff_draw_round_to_sub(&s->draw, 1, +1, yc + 4 + size);
+        if (step == 0 || step == 2)
+            ff_fill_rectangle(&s->draw, &color, frame->data, frame->linesize,
+                              x1, ym1, x2 - x1, ym2 - ym1);
+        if (step == 1 || step == 2)
+            ff_fill_rectangle(&s->draw, &color, frame->data, frame->linesize,
+                              xm1, y1, xm2 - xm1, y2 - y1);
+        if (step == 3)
+            ff_fill_rectangle(&s->draw, &color, frame->data, frame->linesize,
+                              x1, y1, x2 - x1, y2 - y1);
+    }
+
+    /* bottom right: checker with random noise */
+    {
+        unsigned xmin = av_rescale(5, s->w, 8);
+        unsigned xmax = av_rescale(7, s->w, 8);
+        unsigned ymin = av_rescale(5, s->h, 8);
+        unsigned ymax = av_rescale(7, s->h, 8);
+        unsigned x, y, i, r;
+        uint8_t alpha[256];
+
+        r = s->pts;
+        for (y = ymin; y < ymax - 15; y += 16) {
+            for (x = xmin; x < xmax - 15; x += 16) {
+                if ((x ^ y) & 16)
+                    continue;
+                for (i = 0; i < 256; i++) {
+                    r = r * 1664525 + 1013904223;
+                    alpha[i] = r >> 24;
+                }
+                set_color(s, &color, 0xFF00FF80);
+                ff_blend_mask(&s->draw, &color, frame->data, frame->linesize,
+                                   frame->width, frame->height,
+                                   alpha, 16, 16, 16, 3, 0, x, y);
+            }
+        }
+    }
+
+    /* bouncing square */
+    if (s->w >= 16 && s->h >= 16) {
+        unsigned w = s->w - 8;
+        unsigned h = s->h - 8;
+        unsigned x = av_rescale_q(s->pts, s->time_base, av_make_q(233, 55 * w)) % (w << 1);
+        unsigned y = av_rescale_q(s->pts, s->time_base, av_make_q(233, 89 * h)) % (h << 1);
+        if (x > w)
+            x = (w << 1) - x;
+        if (y > h)
+            y = (h << 1) - y;
+        x = ff_draw_round_to_sub(&s->draw, 0, -1, x);
+        y = ff_draw_round_to_sub(&s->draw, 1, -1, y);
+        set_color(s, &color, 0xFF8000FF);
+        ff_fill_rectangle(&s->draw, &color, frame->data, frame->linesize,
+                          x, y, 8, 8);
+    }
+
+    /* top right: draw frame time and frame number */
+    {
+        char buf[256];
+        unsigned time;
+
+        time = av_rescale_q(s->pts, s->time_base, av_make_q(1, 1000)) % 86400000;
+        set_color(s, &color, 0xC0000000);
+        ff_blend_rectangle(&s->draw, &color, frame->data, frame->linesize,
+                           frame->width, frame->height,
+                           2, 2, 100, 36);
+        set_color(s, &color, 0xFFFF8000);
+        snprintf(buf, sizeof(buf), "%02d:%02d:%02d.%03d\n%12"PRIi64,
+                 time / 3600000, (time / 60000) % 60, (time / 1000) % 60,
+                 time % 1000, s->pts);
+        draw_text(s, frame, &color, 4, 4, buf);
+    }
+}
+static av_cold int test2_init(AVFilterContext *ctx)
+{
+    TestSourceContext *s = ctx->priv;
+
+    s->fill_picture_fn = test2_fill_picture;
+    return init(ctx);
+}
+
+static int test2_query_formats(AVFilterContext *ctx)
+{
+    return ff_set_common_formats(ctx, ff_draw_supported_pixel_formats(0));
+}
+
+static int test2_config_props(AVFilterLink *inlink)
+{
+    AVFilterContext *ctx = inlink->src;
+    TestSourceContext *s = ctx->priv;
+
+    av_assert0(ff_draw_init(&s->draw, inlink->format, 0) >= 0);
+    s->w = ff_draw_round_to_sub(&s->draw, 0, -1, s->w);
+    s->h = ff_draw_round_to_sub(&s->draw, 1, -1, s->h);
+    if (av_image_check_size(s->w, s->h, 0, ctx) < 0)
+        return AVERROR(EINVAL);
+    return config_props(inlink);
+}
+
+static const AVFilterPad avfilter_vsrc_testsrc2_outputs[] = {
+    {
+        .name          = "default",
+        .type          = AVMEDIA_TYPE_VIDEO,
+        .request_frame = request_frame,
+        .config_props  = test2_config_props,
+    },
+    { NULL }
+};
+
+AVFilter ff_vsrc_testsrc2 = {
+    .name          = "testsrc2",
+    .description   = NULL_IF_CONFIG_SMALL("Generate another test pattern."),
+    .priv_size     = sizeof(TestSourceContext),
+    .priv_class    = &testsrc2_class,
+    .init          = test2_init,
+    .uninit        = uninit,
+    .query_formats = test2_query_formats,
+    .inputs        = NULL,
+    .outputs       = avfilter_vsrc_testsrc2_outputs,
+};
+
+#endif /* CONFIG_TESTSRC2_FILTER */
+
 #if CONFIG_RGBTESTSRC_FILTER
 
 #define rgbtestsrc_options options
index c538db8..85aa765 100644 (file)
@@ -66,6 +66,15 @@ fate-filter-lavd-life: CMD = framecrc -f lavfi -i life=s=40x40:r=5:seed=42:mold=
 FATE_FILTER-$(call ALLYES, AVDEVICE TESTSRC_FILTER) += fate-filter-lavd-testsrc
 fate-filter-lavd-testsrc: CMD = framecrc -f lavfi -i testsrc=r=7:n=2:d=10
 
+FATE_FILTER-$(call ALLYES, TESTSRC2_FILTER) += fate-filter-testsrc2-yuv420p
+fate-filter-testsrc2-yuv420p: CMD = framecrc -lavfi testsrc2=r=7:d=10 -pix_fmt yuv420p
+
+FATE_FILTER-$(call ALLYES, TESTSRC2_FILTER) += fate-filter-testsrc2-yuv444p
+fate-filter-testsrc2-yuv444p: CMD = framecrc -lavfi testsrc2=r=7:d=10 -pix_fmt yuv444p
+
+FATE_FILTER-$(call ALLYES, TESTSRC2_FILTER) += fate-filter-testsrc2-rgb24
+fate-filter-testsrc2-rgb24: CMD = framecrc -lavfi testsrc2=r=7:d=10 -pix_fmt rgb24
+
 FATE_FILTER-$(call ALLYES, AVDEVICE TESTSRC_FILTER FORMAT_FILTER CONCAT_FILTER SCALE_FILTER) += fate-filter-lavd-scalenorm
 fate-filter-lavd-scalenorm: tests/data/filtergraphs/scalenorm
 fate-filter-lavd-scalenorm: CMD = framecrc -f lavfi -graph_file $(TARGET_PATH)/tests/data/filtergraphs/scalenorm -i dummy
diff --git a/tests/ref/fate/filter-testsrc2-rgb24 b/tests/ref/fate/filter-testsrc2-rgb24
new file mode 100644 (file)
index 0000000..2fdfa00
--- /dev/null
@@ -0,0 +1,71 @@
+#tb 0: 1/7
+0,          0,          0,        1,   230400, 0x1c012312
+0,          1,          1,        1,   230400, 0xf7cf4e81
+0,          2,          2,        1,   230400, 0x29a45e1c
+0,          3,          3,        1,   230400, 0xe73082a7
+0,          4,          4,        1,   230400, 0x7b84c199
+0,          5,          5,        1,   230400, 0xcdfd5b52
+0,          6,          6,        1,   230400, 0xc035ebb8
+0,          7,          7,        1,   230400, 0x8e37afd0
+0,          8,          8,        1,   230400, 0x66386f44
+0,          9,          9,        1,   230400, 0x17fa6b56
+0,         10,         10,        1,   230400, 0x154c5b53
+0,         11,         11,        1,   230400, 0xcaff83ab
+0,         12,         12,        1,   230400, 0x7c3d935d
+0,         13,         13,        1,   230400, 0x8b2a48ef
+0,         14,         14,        1,   230400, 0xb56dc39e
+0,         15,         15,        1,   230400, 0x2f4522e6
+0,         16,         16,        1,   230400, 0x275efedf
+0,         17,         17,        1,   230400, 0x7917108e
+0,         18,         18,        1,   230400, 0x3f631971
+0,         19,         19,        1,   230400, 0xd70bb265
+0,         20,         20,        1,   230400, 0xb918d1e3
+0,         21,         21,        1,   230400, 0xce8d0032
+0,         22,         22,        1,   230400, 0xbbc3bd32
+0,         23,         23,        1,   230400, 0x42103583
+0,         24,         24,        1,   230400, 0x4be88f56
+0,         25,         25,        1,   230400, 0xd32610ea
+0,         26,         26,        1,   230400, 0xcae0a12b
+0,         27,         27,        1,   230400, 0x4256bdf3
+0,         28,         28,        1,   230400, 0x76b59faf
+0,         29,         29,        1,   230400, 0x6cbf7c06
+0,         30,         30,        1,   230400, 0x0625b097
+0,         31,         31,        1,   230400, 0x867c78c3
+0,         32,         32,        1,   230400, 0x767cc08b
+0,         33,         33,        1,   230400, 0x097980b0
+0,         34,         34,        1,   230400, 0xba182417
+0,         35,         35,        1,   230400, 0x08f62b8b
+0,         36,         36,        1,   230400, 0x8fc5e64c
+0,         37,         37,        1,   230400, 0xed020fad
+0,         38,         38,        1,   230400, 0x9b97066b
+0,         39,         39,        1,   230400, 0x1d0b31ff
+0,         40,         40,        1,   230400, 0x6915912f
+0,         41,         41,        1,   230400, 0xb7e6358e
+0,         42,         42,        1,   230400, 0x7a3aa13b
+0,         43,         43,        1,   230400, 0x7317e56a
+0,         44,         44,        1,   230400, 0xf1e1c7f9
+0,         45,         45,        1,   230400, 0xb1d5d5e1
+0,         46,         46,        1,   230400, 0x0bad1208
+0,         47,         47,        1,   230400, 0x2f71275a
+0,         48,         48,        1,   230400, 0x4d79679d
+0,         49,         49,        1,   230400, 0xfa52be03
+0,         50,         50,        1,   230400, 0x17d1d67a
+0,         51,         51,        1,   230400, 0x15844f5b
+0,         52,         52,        1,   230400, 0xd19466c3
+0,         53,         53,        1,   230400, 0xeb80cd8a
+0,         54,         54,        1,   230400, 0x9beee240
+0,         55,         55,        1,   230400, 0x677a13b3
+0,         56,         56,        1,   230400, 0x43abe88f
+0,         57,         57,        1,   230400, 0xa42aafc1
+0,         58,         58,        1,   230400, 0x0a78c290
+0,         59,         59,        1,   230400, 0x3806e07d
+0,         60,         60,        1,   230400, 0xaeef5d61
+0,         61,         61,        1,   230400, 0x0763c77f
+0,         62,         62,        1,   230400, 0xccc17ab1
+0,         63,         63,        1,   230400, 0x9a844893
+0,         64,         64,        1,   230400, 0x8f962741
+0,         65,         65,        1,   230400, 0xe3022980
+0,         66,         66,        1,   230400, 0x896130af
+0,         67,         67,        1,   230400, 0xdf6675fa
+0,         68,         68,        1,   230400, 0xa20c8f9e
+0,         69,         69,        1,   230400, 0x3e402c75
diff --git a/tests/ref/fate/filter-testsrc2-yuv420p b/tests/ref/fate/filter-testsrc2-yuv420p
new file mode 100644 (file)
index 0000000..804e5fa
--- /dev/null
@@ -0,0 +1,71 @@
+#tb 0: 1/7
+0,          0,          0,        1,   115200, 0x3744b3ed
+0,          1,          1,        1,   115200, 0x0c1062d6
+0,          2,          2,        1,   115200, 0x201b9db1
+0,          3,          3,        1,   115200, 0x278d887e
+0,          4,          4,        1,   115200, 0x309b9c06
+0,          5,          5,        1,   115200, 0x75e1a17b
+0,          6,          6,        1,   115200, 0xa14e9aca
+0,          7,          7,        1,   115200, 0xb73857e2
+0,          8,          8,        1,   115200, 0x686b77e7
+0,          9,          9,        1,   115200, 0x02b6ab21
+0,         10,         10,        1,   115200, 0x1fc2d693
+0,         11,         11,        1,   115200, 0x296dd4a5
+0,         12,         12,        1,   115200, 0x2d0ba5a4
+0,         13,         13,        1,   115200, 0x59e85f83
+0,         14,         14,        1,   115200, 0xc95a675e
+0,         15,         15,        1,   115200, 0x40426f99
+0,         16,         16,        1,   115200, 0xf040bf35
+0,         17,         17,        1,   115200, 0xc705ccd9
+0,         18,         18,        1,   115200, 0xa76dcd9d
+0,         19,         19,        1,   115200, 0x5635daa5
+0,         20,         20,        1,   115200, 0x3af5d306
+0,         21,         21,        1,   115200, 0x0caf7172
+0,         22,         22,        1,   115200, 0x7161ef8f
+0,         23,         23,        1,   115200, 0xc8ce7fb1
+0,         24,         24,        1,   115200, 0xccf02fed
+0,         25,         25,        1,   115200, 0x81cdf49f
+0,         26,         26,        1,   115200, 0xb9170ee1
+0,         27,         27,        1,   115200, 0x7e7d78d0
+0,         28,         28,        1,   115200, 0xfe4c0185
+0,         29,         29,        1,   115200, 0x9dde4256
+0,         30,         30,        1,   115200, 0x1eb35d69
+0,         31,         31,        1,   115200, 0xad3d2e3f
+0,         32,         32,        1,   115200, 0xf3282aa1
+0,         33,         33,        1,   115200, 0x1cef3c17
+0,         34,         34,        1,   115200, 0x688a442c
+0,         35,         35,        1,   115200, 0x2cdb327a
+0,         36,         36,        1,   115200, 0xe6c16f00
+0,         37,         37,        1,   115200, 0x6f8fac56
+0,         38,         38,        1,   115200, 0x54e8d2a1
+0,         39,         39,        1,   115200, 0x29afc657
+0,         40,         40,        1,   115200, 0xb3138f57
+0,         41,         41,        1,   115200, 0x169041ca
+0,         42,         42,        1,   115200, 0x9e3e4e2b
+0,         43,         43,        1,   115200, 0x192977ac
+0,         44,         44,        1,   115200, 0x4aefe354
+0,         45,         45,        1,   115200, 0xc575c060
+0,         46,         46,        1,   115200, 0xfe3ec033
+0,         47,         47,        1,   115200, 0xab53a3e7
+0,         48,         48,        1,   115200, 0xbe229fcb
+0,         49,         49,        1,   115200, 0x088e58c3
+0,         50,         50,        1,   115200, 0x79eaf2db
+0,         51,         51,        1,   115200, 0xb32489ab
+0,         52,         52,        1,   115200, 0x125d1db7
+0,         53,         53,        1,   115200, 0x81efd887
+0,         54,         54,        1,   115200, 0x0eb22945
+0,         55,         55,        1,   115200, 0x46cca5d0
+0,         56,         56,        1,   115200, 0x636c4203
+0,         57,         57,        1,   115200, 0x3d3074a6
+0,         58,         58,        1,   115200, 0xe92f787e
+0,         59,         59,        1,   115200, 0xd0cd4ecf
+0,         60,         60,        1,   115200, 0xf3ac6472
+0,         61,         61,        1,   115200, 0xac8063b4
+0,         62,         62,        1,   115200, 0x2b0c68f2
+0,         63,         63,        1,   115200, 0xc6173b40
+0,         64,         64,        1,   115200, 0x12c35e41
+0,         65,         65,        1,   115200, 0x57c48fdd
+0,         66,         66,        1,   115200, 0x1079be75
+0,         67,         67,        1,   115200, 0xc8e7d33e
+0,         68,         68,        1,   115200, 0x79cdac12
+0,         69,         69,        1,   115200, 0x8dbe5a5f
diff --git a/tests/ref/fate/filter-testsrc2-yuv444p b/tests/ref/fate/filter-testsrc2-yuv444p
new file mode 100644 (file)
index 0000000..c8cc7c1
--- /dev/null
@@ -0,0 +1,71 @@
+#tb 0: 1/7
+0,          0,          0,        1,   230400, 0xbfb96366
+0,          1,          1,        1,   230400, 0xe63ca6e9
+0,          2,          2,        1,   230400, 0xc6acccc8
+0,          3,          3,        1,   230400, 0x6ea1b629
+0,          4,          4,        1,   230400, 0x508477ed
+0,          5,          5,        1,   230400, 0x49d4d57c
+0,          6,          6,        1,   230400, 0xd601a939
+0,          7,          7,        1,   230400, 0x0a0288f3
+0,          8,          8,        1,   230400, 0xa6da89f8
+0,          9,          9,        1,   230400, 0x0490ac8e
+0,         10,         10,        1,   230400, 0x1873ccd2
+0,         11,         11,        1,   230400, 0x64ef9885
+0,         12,         12,        1,   230400, 0x6b8fa2f0
+0,         13,         13,        1,   230400, 0x8d9657a4
+0,         14,         14,        1,   230400, 0xb4af4f21
+0,         15,         15,        1,   230400, 0x64137e0e
+0,         16,         16,        1,   230400, 0xb8b26ce2
+0,         17,         17,        1,   230400, 0xee1e7b00
+0,         18,         18,        1,   230400, 0x1c9b25d8
+0,         19,         19,        1,   230400, 0xe0c761ab
+0,         20,         20,        1,   230400, 0xe1cf0c14
+0,         21,         21,        1,   230400, 0xea380055
+0,         22,         22,        1,   230400, 0x6537716f
+0,         23,         23,        1,   230400, 0x8d9b9380
+0,         24,         24,        1,   230400, 0x9a04e333
+0,         25,         25,        1,   230400, 0x78005375
+0,         26,         26,        1,   230400, 0xc1cc9b9e
+0,         27,         27,        1,   230400, 0x84fda020
+0,         28,         28,        1,   230400, 0x711ef4ab
+0,         29,         29,        1,   230400, 0xccd04c02
+0,         30,         30,        1,   230400, 0xcf2a4bbd
+0,         31,         31,        1,   230400, 0x6d0ef0c0
+0,         32,         32,        1,   230400, 0x46141d09
+0,         33,         33,        1,   230400, 0x3a3d3f71
+0,         34,         34,        1,   230400, 0xe9e7f98f
+0,         35,         35,        1,   230400, 0x0f618ebb
+0,         36,         36,        1,   230400, 0x9c7d07b2
+0,         37,         37,        1,   230400, 0x90f8e960
+0,         38,         38,        1,   230400, 0xe3a856aa
+0,         39,         39,        1,   230400, 0xc66dcd53
+0,         40,         40,        1,   230400, 0xe7c1a281
+0,         41,         41,        1,   230400, 0xff484046
+0,         42,         42,        1,   230400, 0x1f56e486
+0,         43,         43,        1,   230400, 0x46bba179
+0,         44,         44,        1,   230400, 0x05a05e03
+0,         45,         45,        1,   230400, 0x552d3d32
+0,         46,         46,        1,   230400, 0x0899531d
+0,         47,         47,        1,   230400, 0x6321c950
+0,         48,         48,        1,   230400, 0xed67b3cc
+0,         49,         49,        1,   230400, 0x37ec807d
+0,         50,         50,        1,   230400, 0xc6af1344
+0,         51,         51,        1,   230400, 0x2bc9132b
+0,         52,         52,        1,   230400, 0x6024e553
+0,         53,         53,        1,   230400, 0xd7cef4f3
+0,         54,         54,        1,   230400, 0xf7f6eb0d
+0,         55,         55,        1,   230400, 0x0a2ed09e
+0,         56,         56,        1,   230400, 0x8c6883aa
+0,         57,         57,        1,   230400, 0x8542f554
+0,         58,         58,        1,   230400, 0xbebf972f
+0,         59,         59,        1,   230400, 0xf6f5f05f
+0,         60,         60,        1,   230400, 0xa4047f4a
+0,         61,         61,        1,   230400, 0x2b3f3d82
+0,         62,         62,        1,   230400, 0x99d9049a
+0,         63,         63,        1,   230400, 0xe74e5520
+0,         64,         64,        1,   230400, 0x04e2cd3d
+0,         65,         65,        1,   230400, 0x2324e05e
+0,         66,         66,        1,   230400, 0x4e4e3400
+0,         67,         67,        1,   230400, 0xdd547c3e
+0,         68,         68,        1,   230400, 0x1c6c13e4
+0,         69,         69,        1,   230400, 0xf7d2d98b