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.
This commit is contained in:
Nicolas George 2015-10-25 16:31:00 +01:00
parent 91bc4de2a4
commit b16e569312
7 changed files with 495 additions and 0 deletions

View 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

View 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);

View 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

View 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

View File

@ -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

View File

@ -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

View File

@ -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