aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas George <george@nsup.org>2015-10-25 16:31:00 +0100
committerNicolas George <george@nsup.org>2015-11-07 16:02:48 +0100
commitb16e56931271db1ddd7008850bad5c7056d2f7ff (patch)
tree31217b5ee23434d88e003370f96a4029a5f45a85
parent91bc4de2a4fcd68950085b0a6bef99727968ce82 (diff)
downloadffmpeg-b16e56931271db1ddd7008850bad5c7056d2f7ff.tar.gz
lavfi: add testsrc2 test source.
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.
-rw-r--r--libavfilter/Makefile1
-rw-r--r--libavfilter/allfilters.c1
-rw-r--r--libavfilter/vsrc_testsrc.c271
-rw-r--r--tests/fate/filter-video.mak9
-rw-r--r--tests/ref/fate/filter-testsrc2-rgb2471
-rw-r--r--tests/ref/fate/filter-testsrc2-yuv420p71
-rw-r--r--tests/ref/fate/filter-testsrc2-yuv444p71
7 files changed, 495 insertions, 0 deletions
diff --git a/libavfilter/Makefile b/libavfilter/Makefile
index 1b2308585c..f771dca0f9 100644
--- a/libavfilter/Makefile
+++ b/libavfilter/Makefile
@@ -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
diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c
index a538b81983..05dfac9182 100644
--- a/libavfilter/allfilters.c
+++ b/libavfilter/allfilters.c
@@ -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);
diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
index f63c861186..1fca3e71ee 100644
--- a/libavfilter/vsrc_testsrc.c
+++ b/libavfilter/vsrc_testsrc.c
@@ -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
diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak
index c538db85bd..85aa765d1c 100644
--- a/tests/fate/filter-video.mak
+++ b/tests/fate/filter-video.mak
@@ -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
index 0000000000..2fdfa003cc
--- /dev/null
+++ b/tests/ref/fate/filter-testsrc2-rgb24
@@ -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
index 0000000000..804e5fa370
--- /dev/null
+++ b/tests/ref/fate/filter-testsrc2-yuv420p
@@ -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
index 0000000000..c8cc7c17c5
--- /dev/null
+++ b/tests/ref/fate/filter-testsrc2-yuv444p
@@ -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