avfilter/vf_waveform: use nonsubsampled yuv output format for lowpass filter

Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
Paul B Mahol 2016-03-06 12:01:20 +01:00
parent 247fe3e494
commit 5451be50a8
5 changed files with 370 additions and 288 deletions

View File

@ -109,7 +109,7 @@ static const AVOption waveform_options[] = {
AVFILTER_DEFINE_CLASS(waveform);
static const enum AVPixelFormat lowpass_pix_fmts[] = {
static const enum AVPixelFormat in_lowpass_pix_fmts[] = {
AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10, AV_PIX_FMT_GBRP12,
AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P,
@ -127,6 +127,51 @@ static const enum AVPixelFormat lowpass_pix_fmts[] = {
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_rgb8_lowpass_pix_fmts[] = {
AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_rgb9_lowpass_pix_fmts[] = {
AV_PIX_FMT_GBRP9,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_rgb10_lowpass_pix_fmts[] = {
AV_PIX_FMT_GBRP10,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_rgb12_lowpass_pix_fmts[] = {
AV_PIX_FMT_GBRP12,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_yuv8_lowpass_pix_fmts[] = {
AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVA444P,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_yuv9_lowpass_pix_fmts[] = {
AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUVA444P9,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_yuv10_lowpass_pix_fmts[] = {
AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUVA444P10,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_yuv12_lowpass_pix_fmts[] = {
AV_PIX_FMT_YUV444P12,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat out_gray8_lowpass_pix_fmts[] = {
AV_PIX_FMT_GRAY8,
AV_PIX_FMT_NONE
};
static const enum AVPixelFormat flat_pix_fmts[] = {
AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_NONE
};
@ -144,21 +189,73 @@ static int query_formats(AVFilterContext *ctx)
{
WaveformContext *s = ctx->priv;
AVFilterFormats *fmts_list;
const enum AVPixelFormat *out_pix_fmts;
const enum AVPixelFormat *pix_fmts;
const AVPixFmtDescriptor *desc;
AVFilterFormats *avff;
int depth, rgb, i, ret, ncomp;
switch (s->filter) {
case LOWPASS: pix_fmts = lowpass_pix_fmts; break;
case FLAT:
case AFLAT:
case CHROMA:
case ACHROMA: pix_fmts = flat_pix_fmts; break;
case COLOR: pix_fmts = color_pix_fmts; break;
if (s->filter != LOWPASS) {
switch (s->filter) {
case FLAT:
case AFLAT:
case CHROMA:
case ACHROMA: pix_fmts = flat_pix_fmts; break;
case COLOR: pix_fmts = color_pix_fmts; break;
}
fmts_list = ff_make_format_list(pix_fmts);
if (!fmts_list)
return AVERROR(ENOMEM);
return ff_set_common_formats(ctx, fmts_list);
}
fmts_list = ff_make_format_list(pix_fmts);
if (!fmts_list)
return AVERROR(ENOMEM);
return ff_set_common_formats(ctx, fmts_list);
if (!ctx->inputs[0]->in_formats ||
!ctx->inputs[0]->in_formats->nb_formats) {
return AVERROR(EAGAIN);
}
if (!ctx->inputs[0]->out_formats) {
if ((ret = ff_formats_ref(ff_make_format_list(in_lowpass_pix_fmts), &ctx->inputs[0]->out_formats)) < 0)
return ret;
}
avff = ctx->inputs[0]->in_formats;
desc = av_pix_fmt_desc_get(avff->formats[0]);
ncomp = desc->nb_components;
rgb = desc->flags & AV_PIX_FMT_FLAG_RGB;
depth = desc->comp[0].depth;
for (i = 1; i < avff->nb_formats; i++) {
desc = av_pix_fmt_desc_get(avff->formats[i]);
if (rgb != (desc->flags & AV_PIX_FMT_FLAG_RGB) ||
depth != desc->comp[0].depth)
return AVERROR(EAGAIN);
}
if (ncomp == 1 && depth == 8)
out_pix_fmts = out_gray8_lowpass_pix_fmts;
else if (rgb && depth == 8 && ncomp > 2)
out_pix_fmts = out_rgb8_lowpass_pix_fmts;
else if (rgb && depth == 9 && ncomp > 2)
out_pix_fmts = out_rgb9_lowpass_pix_fmts;
else if (rgb && depth == 10 && ncomp > 2)
out_pix_fmts = out_rgb10_lowpass_pix_fmts;
else if (rgb && depth == 12 && ncomp > 2)
out_pix_fmts = out_rgb12_lowpass_pix_fmts;
else if (depth == 8 && ncomp > 2)
out_pix_fmts = out_yuv8_lowpass_pix_fmts;
else if (depth == 9 && ncomp > 2)
out_pix_fmts = out_yuv9_lowpass_pix_fmts;
else if (depth == 10 && ncomp > 2)
out_pix_fmts = out_yuv10_lowpass_pix_fmts;
else if (depth == 12 && ncomp > 2)
out_pix_fmts = out_yuv12_lowpass_pix_fmts;
else
return AVERROR(EAGAIN);
if ((ret = ff_formats_ref(ff_make_format_list(out_pix_fmts), &ctx->outputs[0]->in_formats)) < 0)
return ret;
return 0;
}
static void envelope_instant16(WaveformContext *s, AVFrame *out, int plane, int component)
@ -166,11 +263,8 @@ static void envelope_instant16(WaveformContext *s, AVFrame *out, int plane, int
const int dst_linesize = out->linesize[component] / 2;
const int bg = s->bg_color[component] * (s->max / 256);
const int limit = s->max - 1;
const int is_chroma = (component == 1 || component == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int dst_h = AV_CEIL_RSHIFT(out->height, shift_h);
const int dst_w = AV_CEIL_RSHIFT(out->width, shift_w);
const int dst_h = out->height;
const int dst_w = out->width;
const int start = s->estart[plane];
const int end = s->eend[plane];
uint16_t *dst;
@ -216,11 +310,8 @@ static void envelope_instant(WaveformContext *s, AVFrame *out, int plane, int co
{
const int dst_linesize = out->linesize[component];
const uint8_t bg = s->bg_color[component];
const int is_chroma = (component == 1 || component == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int dst_h = AV_CEIL_RSHIFT(out->height, shift_h);
const int dst_w = AV_CEIL_RSHIFT(out->width, shift_w);
const int dst_h = out->height;
const int dst_w = out->width;
const int start = s->estart[plane];
const int end = s->eend[plane];
uint8_t *dst;
@ -267,11 +358,8 @@ static void envelope_peak16(WaveformContext *s, AVFrame *out, int plane, int com
const int dst_linesize = out->linesize[component] / 2;
const int bg = s->bg_color[component] * (s->max / 256);
const int limit = s->max - 1;
const int is_chroma = (component == 1 || component == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int dst_h = AV_CEIL_RSHIFT(out->height, shift_h);
const int dst_w = AV_CEIL_RSHIFT(out->width, shift_w);
const int dst_h = out->height;
const int dst_w = out->width;
const int start = s->estart[plane];
const int end = s->eend[plane];
int *emax = s->emax[plane][component];
@ -339,11 +427,8 @@ static void envelope_peak(WaveformContext *s, AVFrame *out, int plane, int compo
{
const int dst_linesize = out->linesize[component];
const int bg = s->bg_color[component];
const int is_chroma = (component == 1 || component == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int dst_h = AV_CEIL_RSHIFT(out->height, shift_h);
const int dst_w = AV_CEIL_RSHIFT(out->width, shift_w);
const int dst_h = out->height;
const int dst_w = out->width;
const int start = s->estart[plane];
const int end = s->eend[plane];
int *emax = s->emax[plane][component];
@ -461,14 +546,15 @@ static void lowpass16(WaveformContext *s, AVFrame *in, AVFrame *out,
const int src_h = AV_CEIL_RSHIFT(in->height, shift_h);
const int src_w = AV_CEIL_RSHIFT(in->width, shift_w);
const uint16_t *src_data = (const uint16_t *)in->data[plane];
uint16_t *dst_data = (uint16_t *)out->data[plane] + (column ? (offset >> shift_h) * dst_linesize : offset >> shift_w);
uint16_t * const dst_bottom_line = dst_data + dst_linesize * ((s->size >> shift_h) - 1);
uint16_t *dst_data = (uint16_t *)out->data[plane] + (column ? offset * dst_linesize : offset);
uint16_t * const dst_bottom_line = dst_data + dst_linesize * (s->size - 1);
uint16_t * const dst_line = (mirror ? dst_bottom_line : dst_data);
const int step = column ? 1 << shift_w : 1 << shift_h;
const uint16_t *p;
int y;
if (!column && mirror)
dst_data += s->size >> shift_w;
dst_data += s->size;
for (y = 0; y < src_h; y++) {
const uint16_t *src_data_end = src_data + src_w;
@ -476,20 +562,27 @@ static void lowpass16(WaveformContext *s, AVFrame *in, AVFrame *out,
for (p = src_data; p < src_data_end; p++) {
uint16_t *target;
int v = FFMIN(*p, limit);
int i = 0, v = FFMIN(*p, limit);
if (column) {
target = dst++ + dst_signed_linesize * (v >> shift_h);
do {
target = dst++ + dst_signed_linesize * v;
update16(target, max, intensity, limit);
} while (++i < step);
} else {
if (mirror)
target = dst_data - (v >> shift_w) - 1;
else
target = dst_data + (v >> shift_w);
uint16_t *row = dst_data;
do {
if (mirror)
target = row - v - 1;
else
target = row + v;
update16(target, max, intensity, limit);
row += dst_linesize;
} while (++i < step);
}
update16(target, max, intensity, limit);
}
src_data += src_linesize;
dst_data += dst_linesize;
dst_data += dst_linesize * step;
}
envelope16(s, out, plane, plane);
@ -510,33 +603,42 @@ static void lowpass(WaveformContext *s, AVFrame *in, AVFrame *out,
const int src_h = AV_CEIL_RSHIFT(in->height, shift_h);
const int src_w = AV_CEIL_RSHIFT(in->width, shift_w);
const uint8_t *src_data = in->data[plane];
uint8_t *dst_data = out->data[plane] + (column ? (offset >> shift_h) * dst_linesize : offset >> shift_w);
uint8_t * const dst_bottom_line = dst_data + dst_linesize * ((s->size >> shift_h) - 1);
uint8_t *dst_data = out->data[plane] + (column ? offset * dst_linesize : offset);
uint8_t * const dst_bottom_line = dst_data + dst_linesize * (s->size - 1);
uint8_t * const dst_line = (mirror ? dst_bottom_line : dst_data);
const int step = column ? 1 << shift_w : 1 << shift_h;
const uint8_t *p;
int y;
if (!column && mirror)
dst_data += s->size >> shift_w;
dst_data += s->size;
for (y = 0; y < src_h; y++) {
const uint8_t *src_data_end = src_data + src_w;
uint8_t *dst = dst_line;
for (p = src_data; p < src_data_end; p++) {
int i = 0;
uint8_t *target;
if (column) {
target = dst++ + dst_signed_linesize * (*p >> shift_h);
do {
target = dst++ + dst_signed_linesize * *p;
update(target, max, intensity);
} while (++i < step);
} else {
if (mirror)
target = dst_data - (*p >> shift_w) - 1;
else
target = dst_data + (*p >> shift_w);
uint8_t *row = dst_data;
do {
if (mirror)
target = row - *p - 1;
else
target = row + *p;
update(target, max, intensity);
row += dst_linesize;
} while (++i < step);
}
update(target, max, intensity);
}
src_data += src_linesize;
dst_data += dst_linesize;
dst_data += dst_linesize * step;
}
envelope(s, out, plane, plane);
@ -1149,15 +1251,12 @@ static void graticule_green_row(WaveformContext *s, AVFrame *out)
continue;
for (p = 0; p < s->ncomp; p++) {
const int is_chroma = (p == 1 || p == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int v = green_yuva_color[p];
for (l = 0; l < FF_ARRAY_ELEMS(lines[0]); l++) {
int x = offset + (s->mirror ? 255 - lines[c][l] : lines[c][l]);
uint8_t *dst = out->data[p] + (x >> shift_w);
uint8_t *dst = out->data[p] + x;
blend_vline(dst, out->height >> shift_h, out->linesize[p], o1, o2, v);
blend_vline(dst, out->height, out->linesize[p], o1, o2, v);
}
}
@ -1177,15 +1276,12 @@ static void graticule16_green_row(WaveformContext *s, AVFrame *out)
continue;
for (p = 0; p < s->ncomp; p++) {
const int is_chroma = (p == 1 || p == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int v = green_yuva_color[p] * mult;
for (l = 0; l < FF_ARRAY_ELEMS(lines[0]); l++) {
int x = offset + (s->mirror ? 255 - lines[c][l] : lines[c][l]) * mult;
uint16_t *dst = (uint16_t *)(out->data[p]) + (x >> shift_w);
uint16_t *dst = (uint16_t *)(out->data[p]) + x;
blend_vline16(dst, out->height >> shift_h, out->linesize[p], o1, o2, v);
blend_vline16(dst, out->height, out->linesize[p], o1, o2, v);
}
}
@ -1204,15 +1300,12 @@ static void graticule_green_column(WaveformContext *s, AVFrame *out)
continue;
for (p = 0; p < s->ncomp; p++) {
const int is_chroma = (p == 1 || p == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int v = green_yuva_color[p];
for (l = 0; l < FF_ARRAY_ELEMS(lines[0]); l++) {
int y = offset + (s->mirror ? 255 - lines[c][l] : lines[c][l]);
uint8_t *dst = out->data[p] + (y >> shift_h) * out->linesize[p];
uint8_t *dst = out->data[p] + y * out->linesize[p];
blend_hline(dst, out->width >> shift_w, o1, o2, v);
blend_hline(dst, out->width, o1, o2, v);
}
}
@ -1232,15 +1325,12 @@ static void graticule16_green_column(WaveformContext *s, AVFrame *out)
continue;
for (p = 0; p < s->ncomp; p++) {
const int is_chroma = (p == 1 || p == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int v = green_yuva_color[p] * mult;
for (l = 0; l < FF_ARRAY_ELEMS(lines[0]); l++) {
int y = offset + (s->mirror ? 255 - lines[c][l] : lines[c][l]) * mult;
uint16_t *dst = (uint16_t *)(out->data[p] + (y >> shift_h) * out->linesize[p]);
uint16_t *dst = (uint16_t *)(out->data[p] + y * out->linesize[p]);
blend_hline16(dst, out->width >> shift_w, o1, o2, v);
blend_hline16(dst, out->width, o1, o2, v);
}
}
@ -1309,7 +1399,7 @@ static int config_output(AVFilterLink *outlink)
AVFilterContext *ctx = outlink->src;
AVFilterLink *inlink = ctx->inputs[0];
WaveformContext *s = ctx->priv;
int comp = 0, i, j = 0, k, p, size, shift;
int comp = 0, i, j = 0, k, p, size;
for (i = 0; i < s->ncomp; i++) {
if ((1 << i) & s->pcomp)
@ -1331,25 +1421,20 @@ static int config_output(AVFilterLink *outlink)
return AVERROR(ENOMEM);
for (p = 0; p < s->ncomp; p++) {
const int is_chroma = (p == 1 || p == 2);
const int shift_w = (is_chroma ? s->desc->log2_chroma_w : 0);
const int shift_h = (is_chroma ? s->desc->log2_chroma_h : 0);
const int plane = s->desc->comp[p].plane;
int offset;
if (!((1 << p) & s->pcomp))
continue;
shift = s->mode ? shift_h : shift_w;
for (k = 0; k < 4; k++) {
s->emax[plane][k] = s->peak + size * (plane * 4 + k + 0);
s->emin[plane][k] = s->peak + size * (plane * 4 + k + 16);
}
offset = j++ * s->size * s->display;
s->estart[plane] = offset >> shift;
s->eend[plane] = (offset + s->size - 1) >> shift;
s->estart[plane] = offset;
s->eend[plane] = (offset + s->size - 1);
for (i = 0; i < size; i++) {
for (k = 0; k < 4; k++) {
s->emax[plane][k][i] = s->estart[plane];
@ -1379,20 +1464,17 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
out->pts = in->pts;
for (k = 0; k < s->ncomp; k++) {
const int is_chroma = (k == 1 || k == 2);
const int dst_h = AV_CEIL_RSHIFT(outlink->h, (is_chroma ? s->desc->log2_chroma_h : 0));
const int dst_w = AV_CEIL_RSHIFT(outlink->w, (is_chroma ? s->desc->log2_chroma_w : 0));
if (s->bits <= 8) {
for (i = 0; i < dst_h ; i++)
for (i = 0; i < outlink->h ; i++)
memset(out->data[s->desc->comp[k].plane] +
i * out->linesize[s->desc->comp[k].plane],
s->bg_color[k], dst_w);
s->bg_color[k], outlink->w);
} else {
const int mult = s->size / 256;
uint16_t *dst = (uint16_t *)out->data[s->desc->comp[k].plane];
for (i = 0; i < dst_h ; i++) {
for (j = 0; j < dst_w; j++)
for (i = 0; i < outlink->h ; i++) {
for (j = 0; j < outlink->w; j++)
dst[j] = s->bg_color[k] * mult;
dst += out->linesize[s->desc->comp[k].plane] / 2;
}

View File

@ -1,51 +1,51 @@
#tb 0: 1/25
0, 0, 0, 1, 135168, 0xef68cdfa
0, 1, 1, 1, 135168, 0x3db0cdfa
0, 2, 2, 1, 135168, 0xd5e6cdfa
0, 3, 3, 1, 135168, 0x7f71cdfa
0, 4, 4, 1, 135168, 0x9df7cdfa
0, 5, 5, 1, 135168, 0xff48cdfa
0, 6, 6, 1, 135168, 0xb46acdfa
0, 7, 7, 1, 135168, 0x485acdfa
0, 8, 8, 1, 135168, 0x8be2cdfa
0, 9, 9, 1, 135168, 0x86dbcdfa
0, 10, 10, 1, 135168, 0xdecacdfa
0, 11, 11, 1, 135168, 0x29a3cdfa
0, 12, 12, 1, 135168, 0x04c5cdfa
0, 13, 13, 1, 135168, 0x5f2ccdfa
0, 14, 14, 1, 135168, 0x9680cdfa
0, 15, 15, 1, 135168, 0xe397cdfa
0, 16, 16, 1, 135168, 0xa40ecdfa
0, 17, 17, 1, 135168, 0x5f35cdfa
0, 18, 18, 1, 135168, 0x32fbcdfa
0, 19, 19, 1, 135168, 0x983dcdfa
0, 20, 20, 1, 135168, 0xb67dcdfa
0, 21, 21, 1, 135168, 0x5d41cdfa
0, 22, 22, 1, 135168, 0x35cecdfa
0, 23, 23, 1, 135168, 0xee17cdfa
0, 24, 24, 1, 135168, 0x6599cdfa
0, 25, 25, 1, 135168, 0x918bcdfa
0, 26, 26, 1, 135168, 0xbd30cdfa
0, 27, 27, 1, 135168, 0xc2a6cdfa
0, 28, 28, 1, 135168, 0x688fcdfa
0, 29, 29, 1, 135168, 0xb11bcdfa
0, 30, 30, 1, 135168, 0x8316cdfa
0, 31, 31, 1, 135168, 0x8073cdfa
0, 32, 32, 1, 135168, 0x3bc1cdfa
0, 33, 33, 1, 135168, 0xb581cdfa
0, 34, 34, 1, 135168, 0xdf90cdfa
0, 35, 35, 1, 135168, 0x6297cdfa
0, 36, 36, 1, 135168, 0xe8e8cdfa
0, 37, 37, 1, 135168, 0xa238cdfa
0, 38, 38, 1, 135168, 0xdc68cdfa
0, 39, 39, 1, 135168, 0x7545cdfa
0, 40, 40, 1, 135168, 0xa29dcdfa
0, 41, 41, 1, 135168, 0x874bcdfa
0, 42, 42, 1, 135168, 0x7dfacdfa
0, 43, 43, 1, 135168, 0x7fdfcdfa
0, 44, 44, 1, 135168, 0xebb4cdfa
0, 45, 45, 1, 135168, 0x7295cdfa
0, 46, 46, 1, 135168, 0x54eecdfa
0, 47, 47, 1, 135168, 0x18c4cdfa
0, 48, 48, 1, 135168, 0xaa8fcdfa
0, 49, 49, 1, 135168, 0x99edcdfa
0, 0, 0, 1, 270336, 0x3af3cd54
0, 1, 1, 1, 270336, 0x892ccd54
0, 2, 2, 1, 270336, 0x2171cd54
0, 3, 3, 1, 270336, 0xcaedcd54
0, 4, 4, 1, 270336, 0xe973cd54
0, 5, 5, 1, 270336, 0x4ad3cd54
0, 6, 6, 1, 270336, 0xffe6cd54
0, 7, 7, 1, 270336, 0x93d6cd54
0, 8, 8, 1, 270336, 0xd75ecd54
0, 9, 9, 1, 270336, 0xd257cd54
0, 10, 10, 1, 270336, 0x2a55cd54
0, 11, 11, 1, 270336, 0x751fcd54
0, 12, 12, 1, 270336, 0x5041cd54
0, 13, 13, 1, 270336, 0xaaa8cd54
0, 14, 14, 1, 270336, 0xe1fccd54
0, 15, 15, 1, 270336, 0x2f22cd54
0, 16, 16, 1, 270336, 0xef8acd54
0, 17, 17, 1, 270336, 0xaab1cd54
0, 18, 18, 1, 270336, 0x7e77cd54
0, 19, 19, 1, 270336, 0xe3b9cd54
0, 20, 20, 1, 270336, 0x0208cd54
0, 21, 21, 1, 270336, 0xa8bdcd54
0, 22, 22, 1, 270336, 0x814acd54
0, 23, 23, 1, 270336, 0x39a2cd54
0, 24, 24, 1, 270336, 0xb115cd54
0, 25, 25, 1, 270336, 0xdd07cd54
0, 26, 26, 1, 270336, 0x08bbcd54
0, 27, 27, 1, 270336, 0x0e31cd54
0, 28, 28, 1, 270336, 0xb40bcd54
0, 29, 29, 1, 270336, 0xfc97cd54
0, 30, 30, 1, 270336, 0xce92cd54
0, 31, 31, 1, 270336, 0xcbefcd54
0, 32, 32, 1, 270336, 0x873dcd54
0, 33, 33, 1, 270336, 0x010ccd54
0, 34, 34, 1, 270336, 0x2b1bcd54
0, 35, 35, 1, 270336, 0xae13cd54
0, 36, 36, 1, 270336, 0x3473cd54
0, 37, 37, 1, 270336, 0xedb4cd54
0, 38, 38, 1, 270336, 0x27f3cd54
0, 39, 39, 1, 270336, 0xc0c1cd54
0, 40, 40, 1, 270336, 0xee19cd54
0, 41, 41, 1, 270336, 0xd2c7cd54
0, 42, 42, 1, 270336, 0xc976cd54
0, 43, 43, 1, 270336, 0xcb5bcd54
0, 44, 44, 1, 270336, 0x373fcd54
0, 45, 45, 1, 270336, 0xbe11cd54
0, 46, 46, 1, 270336, 0xa06acd54
0, 47, 47, 1, 270336, 0x6440cd54
0, 48, 48, 1, 270336, 0xf60bcd54
0, 49, 49, 1, 270336, 0xe569cd54

View File

@ -1,51 +1,51 @@
#tb 0: 1/25
0, 0, 0, 1, 135168, 0x60746d0d
0, 1, 1, 1, 135168, 0x3a19788d
0, 2, 2, 1, 135168, 0x18e0d247
0, 3, 3, 1, 135168, 0x8b4c177f
0, 4, 4, 1, 135168, 0xc4b34d26
0, 5, 5, 1, 135168, 0xba364556
0, 6, 6, 1, 135168, 0xfcab7319
0, 7, 7, 1, 135168, 0x363d77ce
0, 8, 8, 1, 135168, 0x04367b07
0, 9, 9, 1, 135168, 0x6e5b55a0
0, 10, 10, 1, 135168, 0x33918421
0, 11, 11, 1, 135168, 0x05ba7ff3
0, 12, 12, 1, 135168, 0xcae09d62
0, 13, 13, 1, 135168, 0xca78c5cb
0, 14, 14, 1, 135168, 0x1542db51
0, 15, 15, 1, 135168, 0xe013f307
0, 16, 16, 1, 135168, 0x064008dd
0, 17, 17, 1, 135168, 0xeb7010d5
0, 18, 18, 1, 135168, 0x0cd313e1
0, 19, 19, 1, 135168, 0xaf1b135f
0, 20, 20, 1, 135168, 0x1b3c02c0
0, 21, 21, 1, 135168, 0x50940658
0, 22, 22, 1, 135168, 0x83a2046e
0, 23, 23, 1, 135168, 0x1edf0a54
0, 24, 24, 1, 135168, 0x37141206
0, 25, 25, 1, 135168, 0x7832163e
0, 26, 26, 1, 135168, 0xd4ba13dc
0, 27, 27, 1, 135168, 0x9ba710a3
0, 28, 28, 1, 135168, 0x434a108f
0, 29, 29, 1, 135168, 0x86b01071
0, 30, 30, 1, 135168, 0x7bd91c8d
0, 31, 31, 1, 135168, 0x7a4c179c
0, 32, 32, 1, 135168, 0x023f15b2
0, 33, 33, 1, 135168, 0xe8901b20
0, 34, 34, 1, 135168, 0x49d3157b
0, 35, 35, 1, 135168, 0xdc990af9
0, 36, 36, 1, 135168, 0x1ff707a2
0, 37, 37, 1, 135168, 0xe6610022
0, 38, 38, 1, 135168, 0x6fc3f168
0, 39, 39, 1, 135168, 0x719809ff
0, 40, 40, 1, 135168, 0xd1d9144f
0, 41, 41, 1, 135168, 0x2f801797
0, 42, 42, 1, 135168, 0x111c1eae
0, 43, 43, 1, 135168, 0x23c11c4c
0, 44, 44, 1, 135168, 0x07351d23
0, 45, 45, 1, 135168, 0x04f1173d
0, 46, 46, 1, 135168, 0xb2b71c10
0, 47, 47, 1, 135168, 0x58c01a53
0, 48, 48, 1, 135168, 0xadd11b7a
0, 49, 49, 1, 135168, 0x924123c2
0, 0, 0, 1, 270336, 0x24a46c67
0, 1, 1, 1, 270336, 0x622077e7
0, 2, 2, 1, 270336, 0xb96dd1a1
0, 3, 3, 1, 270336, 0x180b16d9
0, 4, 4, 1, 270336, 0x3db34c80
0, 5, 5, 1, 270336, 0x417444b0
0, 6, 6, 1, 270336, 0x3c017273
0, 7, 7, 1, 270336, 0x572e7728
0, 8, 8, 1, 270336, 0x18e17a61
0, 9, 9, 1, 270336, 0x8d9f54fa
0, 10, 10, 1, 270336, 0x01e5837b
0, 11, 11, 1, 270336, 0x72ae7f4d
0, 12, 12, 1, 270336, 0xb6ab9cbc
0, 13, 13, 1, 270336, 0x28c5c525
0, 14, 14, 1, 270336, 0x6d89daab
0, 15, 15, 1, 270336, 0x761ff261
0, 16, 16, 1, 270336, 0xae200837
0, 17, 17, 1, 270336, 0x09fe102f
0, 18, 18, 1, 270336, 0x4999133b
0, 19, 19, 1, 270336, 0xbc2d12b9
0, 20, 20, 1, 270336, 0x35f8021a
0, 21, 21, 1, 270336, 0x5a8605b2
0, 22, 22, 1, 270336, 0xb25703c8
0, 23, 23, 1, 270336, 0x641909ae
0, 24, 24, 1, 270336, 0x8a6e1160
0, 25, 25, 1, 270336, 0xce181598
0, 26, 26, 1, 270336, 0xc0ea1336
0, 27, 27, 1, 270336, 0x941d0ffd
0, 28, 28, 1, 270336, 0xf94a0fe9
0, 29, 29, 1, 270336, 0x591d0fcb
0, 30, 30, 1, 270336, 0x84fb1be7
0, 31, 31, 1, 270336, 0xda8016f6
0, 32, 32, 1, 270336, 0x8736150c
0, 33, 33, 1, 270336, 0xf5931a7a
0, 34, 34, 1, 270336, 0x582b14d5
0, 35, 35, 1, 270336, 0x85ce0a53
0, 36, 36, 1, 270336, 0xf1c106fc
0, 37, 37, 1, 270336, 0xd023ff6d
0, 38, 38, 1, 270336, 0xe398f0c2
0, 39, 39, 1, 270336, 0x5c910959
0, 40, 40, 1, 270336, 0xfbec13a9
0, 41, 41, 1, 270336, 0x3f1e16f1
0, 42, 42, 1, 270336, 0x6c1a1e08
0, 43, 43, 1, 270336, 0x15091ba6
0, 44, 44, 1, 270336, 0x82721c7d
0, 45, 45, 1, 270336, 0x69a91697
0, 46, 46, 1, 270336, 0xdcbb1b6a
0, 47, 47, 1, 270336, 0x7cfa19ad
0, 48, 48, 1, 270336, 0x65ba1ad4
0, 49, 49, 1, 270336, 0xca65231c

View File

@ -1,51 +1,51 @@
#tb 0: 1/25
0, 0, 0, 1, 110592, 0xa6deed0a
0, 1, 1, 1, 110592, 0xe659ed0a
0, 2, 2, 1, 110592, 0x1ca5ed0a
0, 3, 3, 1, 110592, 0xc2e8ed0a
0, 4, 4, 1, 110592, 0x78d4ed0a
0, 5, 5, 1, 110592, 0xbe2eed0a
0, 6, 6, 1, 110592, 0x482ded0a
0, 7, 7, 1, 110592, 0x994eed0a
0, 8, 8, 1, 110592, 0x93aeed0a
0, 9, 9, 1, 110592, 0xbba8ed0a
0, 10, 10, 1, 110592, 0xeb2bed0a
0, 11, 11, 1, 110592, 0xe41ced0a
0, 12, 12, 1, 110592, 0xb404ed0a
0, 13, 13, 1, 110592, 0xbad1ed0a
0, 14, 14, 1, 110592, 0x952aed0a
0, 15, 15, 1, 110592, 0xbed4ed0a
0, 16, 16, 1, 110592, 0x5c7ded0a
0, 17, 17, 1, 110592, 0xbfe8ed0a
0, 18, 18, 1, 110592, 0xbb6bed0a
0, 19, 19, 1, 110592, 0x7473ed0a
0, 20, 20, 1, 110592, 0x7489ed0a
0, 21, 21, 1, 110592, 0x88a4ed0a
0, 22, 22, 1, 110592, 0xff0ced0a
0, 23, 23, 1, 110592, 0x04b8ed0a
0, 24, 24, 1, 110592, 0xeb8ded0a
0, 25, 25, 1, 110592, 0xc752ed0a
0, 26, 26, 1, 110592, 0x5b1bed0a
0, 27, 27, 1, 110592, 0x1c97ed0a
0, 28, 28, 1, 110592, 0x0a28ed0a
0, 29, 29, 1, 110592, 0x302ced0a
0, 30, 30, 1, 110592, 0x280bed0a
0, 31, 31, 1, 110592, 0xaa30ed0a
0, 32, 32, 1, 110592, 0xce59ed0a
0, 33, 33, 1, 110592, 0xe5f6ed0a
0, 34, 34, 1, 110592, 0x5b34ed0a
0, 35, 35, 1, 110592, 0x1b97ed0a
0, 36, 36, 1, 110592, 0x3283ed0a
0, 37, 37, 1, 110592, 0xe0d1ed0a
0, 38, 38, 1, 110592, 0x03f1ed0a
0, 39, 39, 1, 110592, 0x5744ed0a
0, 40, 40, 1, 110592, 0x8bbfed0a
0, 41, 41, 1, 110592, 0xde8fed0a
0, 42, 42, 1, 110592, 0x9975ed0a
0, 43, 43, 1, 110592, 0x72eded0a
0, 44, 44, 1, 110592, 0xe3efed0a
0, 45, 45, 1, 110592, 0xee7fed0a
0, 46, 46, 1, 110592, 0x44ffed0a
0, 47, 47, 1, 110592, 0x91e6ed0a
0, 48, 48, 1, 110592, 0x0a58ed0a
0, 49, 49, 1, 110592, 0x68d2ed0a
0, 0, 0, 1, 221184, 0x2a1149a3
0, 1, 1, 1, 221184, 0x698c49a3
0, 2, 2, 1, 221184, 0x9fc949a3
0, 3, 3, 1, 221184, 0x461b49a3
0, 4, 4, 1, 221184, 0xfbf849a3
0, 5, 5, 1, 221184, 0x416149a3
0, 6, 6, 1, 221184, 0xcb5149a3
0, 7, 7, 1, 221184, 0x1c8149a3
0, 8, 8, 1, 221184, 0x16e149a3
0, 9, 9, 1, 221184, 0x3edb49a3
0, 10, 10, 1, 221184, 0x6e5e49a3
0, 11, 11, 1, 221184, 0x674f49a3
0, 12, 12, 1, 221184, 0x373749a3
0, 13, 13, 1, 221184, 0x3e0449a3
0, 14, 14, 1, 221184, 0x185d49a3
0, 15, 15, 1, 221184, 0x420749a3
0, 16, 16, 1, 221184, 0xdfa149a3
0, 17, 17, 1, 221184, 0x431b49a3
0, 18, 18, 1, 221184, 0x3e9e49a3
0, 19, 19, 1, 221184, 0xf79749a3
0, 20, 20, 1, 221184, 0xf7ad49a3
0, 21, 21, 1, 221184, 0x0bd749a3
0, 22, 22, 1, 221184, 0x823f49a3
0, 23, 23, 1, 221184, 0x87dc49a3
0, 24, 24, 1, 221184, 0x6ec049a3
0, 25, 25, 1, 221184, 0x4a8549a3
0, 26, 26, 1, 221184, 0xde3f49a3
0, 27, 27, 1, 221184, 0x9fbb49a3
0, 28, 28, 1, 221184, 0x8d4c49a3
0, 29, 29, 1, 221184, 0xb35049a3
0, 30, 30, 1, 221184, 0xab2f49a3
0, 31, 31, 1, 221184, 0x2d6349a3
0, 32, 32, 1, 221184, 0x518c49a3
0, 33, 33, 1, 221184, 0x692949a3
0, 34, 34, 1, 221184, 0xde5849a3
0, 35, 35, 1, 221184, 0x9ebb49a3
0, 36, 36, 1, 221184, 0xb5a749a3
0, 37, 37, 1, 221184, 0x640449a3
0, 38, 38, 1, 221184, 0x871549a3
0, 39, 39, 1, 221184, 0xda6849a3
0, 40, 40, 1, 221184, 0x0ef249a3
0, 41, 41, 1, 221184, 0x61c249a3
0, 42, 42, 1, 221184, 0x1ca849a3
0, 43, 43, 1, 221184, 0xf61149a3
0, 44, 44, 1, 221184, 0x672249a3
0, 45, 45, 1, 221184, 0x71b249a3
0, 46, 46, 1, 221184, 0xc82349a3
0, 47, 47, 1, 221184, 0x151949a3
0, 48, 48, 1, 221184, 0x8d7c49a3
0, 49, 49, 1, 221184, 0xebf649a3

View File

@ -1,51 +1,51 @@
#tb 0: 1/25
0, 0, 0, 1, 270336, 0x7be065a8
0, 1, 1, 1, 270336, 0xa4e56622
0, 2, 2, 1, 270336, 0xae4a662a
0, 3, 3, 1, 270336, 0x367e6678
0, 4, 4, 1, 270336, 0x970f667c
0, 5, 5, 1, 270336, 0xdf7565f6
0, 6, 6, 1, 270336, 0xc4a36652
0, 7, 7, 1, 270336, 0x2f426630
0, 8, 8, 1, 270336, 0xc095662c
0, 9, 9, 1, 270336, 0x75fa6626
0, 10, 10, 1, 270336, 0x95616592
0, 11, 11, 1, 270336, 0x78916608
0, 12, 12, 1, 270336, 0x118c65bc
0, 13, 13, 1, 270336, 0x75446604
0, 14, 14, 1, 270336, 0xe5fb6612
0, 15, 15, 1, 270336, 0x3b8f6618
0, 16, 16, 1, 270336, 0xdeee6646
0, 17, 17, 1, 270336, 0xede46606
0, 18, 18, 1, 270336, 0x64336606
0, 19, 19, 1, 270336, 0xfc50663a
0, 20, 20, 1, 270336, 0xe5fc660a
0, 21, 21, 1, 270336, 0x6ecb6612
0, 22, 22, 1, 270336, 0x06a4662a
0, 23, 23, 1, 270336, 0xc7b66656
0, 24, 24, 1, 270336, 0x033e6636
0, 25, 25, 1, 270336, 0xc14f6650
0, 26, 26, 1, 270336, 0x7462662c
0, 27, 27, 1, 270336, 0xf8cb65e4
0, 28, 28, 1, 270336, 0x6351665e
0, 29, 29, 1, 270336, 0x44e6666e
0, 30, 30, 1, 270336, 0x1d5f660e
0, 31, 31, 1, 270336, 0xc248662e
0, 32, 32, 1, 270336, 0x36256642
0, 33, 33, 1, 270336, 0xe4426598
0, 34, 34, 1, 270336, 0xde81665a
0, 35, 35, 1, 270336, 0xaeab6622
0, 36, 36, 1, 270336, 0x134e6668
0, 37, 37, 1, 270336, 0x6c6e665e
0, 38, 38, 1, 270336, 0x500b6670
0, 39, 39, 1, 270336, 0x2c4c6648
0, 40, 40, 1, 270336, 0xe4ae664c
0, 41, 41, 1, 270336, 0x9b7e664c
0, 42, 42, 1, 270336, 0xfefb6570
0, 43, 43, 1, 270336, 0x04e96600
0, 44, 44, 1, 270336, 0xcbba6670
0, 45, 45, 1, 270336, 0x9f9666a6
0, 46, 46, 1, 270336, 0x85b76642
0, 47, 47, 1, 270336, 0x1a0e667c
0, 48, 48, 1, 270336, 0x92c9662a
0, 49, 49, 1, 270336, 0x9ed76682
0, 0, 0, 1, 540672, 0x8a2521d6
0, 1, 1, 1, 540672, 0xb9a321d6
0, 2, 2, 1, 540672, 0x325421d6
0, 3, 3, 1, 540672, 0xafee21d2
0, 4, 4, 1, 540672, 0x172121d6
0, 5, 5, 1, 540672, 0x24d121d6
0, 6, 6, 1, 540672, 0x7fec21d6
0, 7, 7, 1, 540672, 0xa8a021d6
0, 8, 8, 1, 540672, 0x29fd21d6
0, 9, 9, 1, 540672, 0x6dfe21d6
0, 10, 10, 1, 540672, 0xe39821d6
0, 11, 11, 1, 540672, 0x83f521d6
0, 12, 12, 1, 540672, 0x57aa21d6
0, 13, 13, 1, 540672, 0x67b221d6
0, 14, 14, 1, 540672, 0x535821d6
0, 15, 15, 1, 540672, 0xb8ac21d6
0, 16, 16, 1, 540672, 0x27f621d6
0, 17, 17, 1, 540672, 0x775221d6
0, 18, 18, 1, 540672, 0x8e6621d6
0, 19, 19, 1, 540672, 0x74c921d6
0, 20, 20, 1, 540672, 0x04cd21d6
0, 21, 21, 1, 540672, 0xccd421d6
0, 22, 22, 1, 540672, 0x317221d6
0, 23, 23, 1, 540672, 0xd79321d6
0, 24, 24, 1, 540672, 0xa2ac21d6
0, 25, 25, 1, 540672, 0x7f0a21d6
0, 26, 26, 1, 540672, 0x483521d6
0, 27, 27, 1, 540672, 0xb65721d6
0, 28, 28, 1, 540672, 0xb77021d6
0, 29, 29, 1, 540672, 0x9fd521d6
0, 30, 30, 1, 540672, 0xb72121d6
0, 31, 31, 1, 540672, 0x540221d6
0, 32, 32, 1, 540672, 0xa34121d6
0, 33, 33, 1, 540672, 0xe01421d6
0, 34, 34, 1, 540672, 0x6fc721d6
0, 35, 35, 1, 540672, 0x7fa621d6
0, 36, 36, 1, 540672, 0xc48c21d6
0, 37, 37, 1, 540672, 0x40f021d6
0, 38, 38, 1, 540672, 0xdf3f21d6
0, 39, 39, 1, 540672, 0xb04321d6
0, 40, 40, 1, 540672, 0x222821d6
0, 41, 41, 1, 540672, 0x2a5521d6
0, 42, 42, 1, 540672, 0x6a4621be
0, 43, 43, 1, 540672, 0xed7f21d6
0, 44, 44, 1, 540672, 0xb16521d6
0, 45, 45, 1, 540672, 0x9f5621d6
0, 46, 46, 1, 540672, 0x204321d6
0, 47, 47, 1, 540672, 0xc26e21d6
0, 48, 48, 1, 540672, 0x3e8321d6
0, 49, 49, 1, 540672, 0xaaee21d6