avfilter: add showpalette filter
authorClément Bœsch <clement@stupeflix.com>
Thu, 15 Jan 2015 10:39:06 +0000 (11:39 +0100)
committerClément Bœsch <clement@stupeflix.com>
Thu, 15 Jan 2015 15:36:13 +0000 (16:36 +0100)
Changelog
doc/filters.texi
libavfilter/Makefile
libavfilter/allfilters.c
libavfilter/version.h
libavfilter/vf_showpalette.c [new file with mode: 0644]
tests/fate/filter-video.mak
tests/ref/fate/filter-showpalette [new file with mode: 0644]

index 4fc3800..04f1728 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -15,6 +15,7 @@ version <next>:
 - VOC seeking support
 - Closed caption Decoder
 - fspp, uspp, pp7 MPlayer postprocessing filters ported to native filters
+- showpalette filter
 
 
 version 2.5:
index 154508c..2523763 100644 (file)
@@ -6885,6 +6885,19 @@ pad="2*iw:2*ih:ow-iw:oh-ih"
 @end example
 @end itemize
 
+@section showpalette
+
+Displays the 256 colors palette of each frame. This filter is only relevant for
+@var{pal8} pixel format frames.
+
+It accepts the following option:
+
+@table @option
+@item s
+Set the size of the box used to represent one palette color entry. Default is
+@code{30} (for a @code{30x30} pixel box).
+@end table
+
 @section perspective
 
 Correct perspective of video not recorded perpendicular to the screen.
index 37f5a65..1f0eb15 100644 (file)
@@ -181,6 +181,7 @@ OBJS-$(CONFIG_SETPTS_FILTER)                 += setpts.o
 OBJS-$(CONFIG_SETSAR_FILTER)                 += vf_aspect.o
 OBJS-$(CONFIG_SETTB_FILTER)                  += settb.o
 OBJS-$(CONFIG_SHOWINFO_FILTER)               += vf_showinfo.o
+OBJS-$(CONFIG_SHOWPALETTE_FILTER)            += vf_showpalette.o
 OBJS-$(CONFIG_SHUFFLEPLANES_FILTER)          += vf_shuffleplanes.o
 OBJS-$(CONFIG_SIGNALSTATS_FILTER)            += vf_signalstats.o
 OBJS-$(CONFIG_SMARTBLUR_FILTER)              += vf_smartblur.o
index b19da61..028e3ea 100644 (file)
@@ -196,6 +196,7 @@ void avfilter_register_all(void)
     REGISTER_FILTER(SETSAR,         setsar,         vf);
     REGISTER_FILTER(SETTB,          settb,          vf);
     REGISTER_FILTER(SHOWINFO,       showinfo,       vf);
+    REGISTER_FILTER(SHOWPALETTE,    showpalette,    vf);
     REGISTER_FILTER(SHUFFLEPLANES,  shuffleplanes,  vf);
     REGISTER_FILTER(SIGNALSTATS,    signalstats,    vf);
     REGISTER_FILTER(SMARTBLUR,      smartblur,      vf);
index 383eb55..021f01c 100644 (file)
@@ -30,8 +30,8 @@
 #include "libavutil/version.h"
 
 #define LIBAVFILTER_VERSION_MAJOR  5
-#define LIBAVFILTER_VERSION_MINOR  7
-#define LIBAVFILTER_VERSION_MICRO 101
+#define LIBAVFILTER_VERSION_MINOR  8
+#define LIBAVFILTER_VERSION_MICRO 100
 
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
                                                LIBAVFILTER_VERSION_MINOR, \
diff --git a/libavfilter/vf_showpalette.c b/libavfilter/vf_showpalette.c
new file mode 100644 (file)
index 0000000..adcfeb4
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file
+ * Display frame palette (AV_PIX_FMT_PAL8)
+ */
+
+#include "libavutil/avassert.h"
+#include "libavutil/opt.h"
+#include "avfilter.h"
+#include "formats.h"
+#include "internal.h"
+#include "video.h"
+
+typedef struct {
+    const AVClass *class;
+    int size;
+} ShowPaletteContext;
+
+#define OFFSET(x) offsetof(ShowPaletteContext, x)
+#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
+static const AVOption showpalette_options[] = {
+    { "s", "set pixel box size", OFFSET(size), AV_OPT_TYPE_INT, {.i64=30}, 1, 100, FLAGS },
+    { NULL }
+};
+
+AVFILTER_DEFINE_CLASS(showpalette);
+
+static int query_formats(AVFilterContext *ctx)
+{
+    static const enum AVPixelFormat in_fmts[]  = {AV_PIX_FMT_PAL8,  AV_PIX_FMT_NONE};
+    static const enum AVPixelFormat out_fmts[] = {AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE};
+    AVFilterFormats *in  = ff_make_format_list(in_fmts);
+    AVFilterFormats *out = ff_make_format_list(out_fmts);
+    if (!in || !out)
+        return AVERROR(ENOMEM);
+    ff_formats_ref(in,  &ctx->inputs[0]->out_formats);
+    ff_formats_ref(out, &ctx->outputs[0]->in_formats);
+    return 0;
+}
+
+static int config_output(AVFilterLink *outlink)
+{
+    AVFilterContext *ctx = outlink->src;
+    const ShowPaletteContext *s = ctx->priv;
+    outlink->w = outlink->h = 16 * s->size;
+    return 0;
+}
+
+static int disp_palette(AVFrame *out, const AVFrame *in, int size)
+{
+    int x, y, i, j;
+    uint32_t *dst = (uint32_t *)out->data[0];
+    const int dst_linesize = out->linesize[0] >> 2;
+    const uint32_t *pal = (uint32_t *)in->data[1];
+
+    for (y = 0; y < 16; y++)
+        for (x = 0; x < 16; x++)
+            for (j = 0; j < size; j++)
+                for (i = 0; i < size; i++)
+                    dst[(y*dst_linesize + x) * size + j*dst_linesize + i] = pal[y*16 + x];
+    return 0;
+}
+
+static int filter_frame(AVFilterLink *inlink, AVFrame *in)
+{
+    int ret;
+    AVFrame *out;
+    AVFilterContext *ctx = inlink->dst;
+    const ShowPaletteContext *s= ctx->priv;
+    AVFilterLink *outlink = ctx->outputs[0];
+
+    out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
+    if (!out) {
+        av_frame_free(&in);
+        return AVERROR(ENOMEM);
+    }
+    av_frame_copy_props(out, in);
+    ret = disp_palette(out, in, s->size);
+    av_frame_free(&in);
+    return ret < 0 ? ret : ff_filter_frame(outlink, out);
+}
+
+static const AVFilterPad showpalette_inputs[] = {
+    {
+        .name         = "default",
+        .type         = AVMEDIA_TYPE_VIDEO,
+        .filter_frame = filter_frame,
+    },
+    { NULL }
+};
+
+static const AVFilterPad showpalette_outputs[] = {
+    {
+        .name         = "default",
+        .type         = AVMEDIA_TYPE_VIDEO,
+        .config_props = config_output,
+    },
+    { NULL }
+};
+
+AVFilter ff_vf_showpalette = {
+    .name          = "showpalette",
+    .description   = NULL_IF_CONFIG_SMALL("Display frame palette"),
+    .priv_size     = sizeof(ShowPaletteContext),
+    .query_formats = query_formats,
+    .inputs        = showpalette_inputs,
+    .outputs       = showpalette_outputs,
+    .priv_class    = &showpalette_class,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+};
index 414d96d..e50e387 100644 (file)
@@ -26,6 +26,9 @@ FATE_FILTER-$(call ALLYES, MCDEINT_FILTER, MPEGTS_DEMUXER, MPEG2VIDEO_DECODER SN
 FATE_FILTER-$(call ALLYES, CODECVIEW_FILTER RM_DEMUXER RV40_DECODER) += fate-filter-codecview-mvs
 fate-filter-codecview-mvs: CMD = framecrc -flags2 +export_mvs -i $(TARGET_SAMPLES)/real/spygames-2MB.rmvb -vf codecview=mv=pf+bf+bb -vframes 60 -an
 
+FATE_FILTER-$(call ALLYES, SHOWPALETTE_FILTER FLIC_DEMUXER FLIC_DECODER) += fate-filter-showpalette
+fate-filter-showpalette: CMD = framecrc -i $(TARGET_SAMPLES)/fli/fli-engines.fli -vf showpalette=3 -pix_fmt bgra
+
 FATE_SAMPLES_AVCONV += $(FATE_FILTER-yes)
 
 FATE_FILTER-$(call ALLYES, AVDEVICE LIFE_FILTER) += fate-filter-lavd-life
diff --git a/tests/ref/fate/filter-showpalette b/tests/ref/fate/filter-showpalette
new file mode 100644 (file)
index 0000000..1a13c23
--- /dev/null
@@ -0,0 +1,316 @@
+#tb 0: 1/35
+0,          0,          0,        1,     9216, 0xc72e034e
+0,          1,          1,        1,     9216, 0xc72e034e
+0,          2,          2,        1,     9216, 0xc72e034e
+0,          3,          3,        1,     9216, 0xc72e034e
+0,          4,          4,        1,     9216, 0xc72e034e
+0,          5,          5,        1,     9216, 0xc72e034e
+0,          6,          6,        1,     9216, 0xc72e034e
+0,          7,          7,        1,     9216, 0xc72e034e
+0,          8,          8,        1,     9216, 0xc72e034e
+0,          9,          9,        1,     9216, 0xc72e034e
+0,         10,         10,        1,     9216, 0xc72e034e
+0,         11,         11,        1,     9216, 0xc72e034e
+0,         12,         12,        1,     9216, 0xc72e034e
+0,         13,         13,        1,     9216, 0xc72e034e
+0,         14,         14,        1,     9216, 0xc72e034e
+0,         15,         15,        1,     9216, 0xc72e034e
+0,         16,         16,        1,     9216, 0xc72e034e
+0,         17,         17,        1,     9216, 0xc72e034e
+0,         18,         18,        1,     9216, 0xc72e034e
+0,         19,         19,        1,     9216, 0xc72e034e
+0,         20,         20,        1,     9216, 0xc72e034e
+0,         21,         21,        1,     9216, 0xc72e034e
+0,         22,         22,        1,     9216, 0xc72e034e
+0,         23,         23,        1,     9216, 0xc72e034e
+0,         24,         24,        1,     9216, 0xc72e034e
+0,         25,         25,        1,     9216, 0xc72e034e
+0,         26,         26,        1,     9216, 0xc72e034e
+0,         27,         27,        1,     9216, 0xc72e034e
+0,         28,         28,        1,     9216, 0xc72e034e
+0,         29,         29,        1,     9216, 0xc72e034e
+0,         30,         30,        1,     9216, 0xc72e034e
+0,         31,         31,        1,     9216, 0xc72e034e
+0,         32,         32,        1,     9216, 0xc72e034e
+0,         33,         33,        1,     9216, 0xc72e034e
+0,         34,         34,        1,     9216, 0xc72e034e
+0,         35,         35,        1,     9216, 0xc72e034e
+0,         36,         36,        1,     9216, 0xc72e034e
+0,         37,         37,        1,     9216, 0xc72e034e
+0,         38,         38,        1,     9216, 0xc72e034e
+0,         39,         39,        1,     9216, 0xc72e034e
+0,         40,         40,        1,     9216, 0xc72e034e
+0,         41,         41,        1,     9216, 0xc72e034e
+0,         42,         42,        1,     9216, 0xc72e034e
+0,         43,         43,        1,     9216, 0xc72e034e
+0,         44,         44,        1,     9216, 0xc72e034e
+0,         45,         45,        1,     9216, 0xc72e034e
+0,         46,         46,        1,     9216, 0xc72e034e
+0,         47,         47,        1,     9216, 0xc72e034e
+0,         48,         48,        1,     9216, 0xc72e034e
+0,         49,         49,        1,     9216, 0xc72e034e
+0,         50,         50,        1,     9216, 0xc72e034e
+0,         51,         51,        1,     9216, 0xc72e034e
+0,         52,         52,        1,     9216, 0xc72e034e
+0,         53,         53,        1,     9216, 0xc72e034e
+0,         54,         54,        1,     9216, 0xc72e034e
+0,         55,         55,        1,     9216, 0xc72e034e
+0,         56,         56,        1,     9216, 0xc72e034e
+0,         57,         57,        1,     9216, 0xc72e034e
+0,         58,         58,        1,     9216, 0xc72e034e
+0,         59,         59,        1,     9216, 0xc72e034e
+0,         60,         60,        1,     9216, 0xc72e034e
+0,         61,         61,        1,     9216, 0xc72e034e
+0,         62,         62,        1,     9216, 0xc72e034e
+0,         63,         63,        1,     9216, 0xc72e034e
+0,         64,         64,        1,     9216, 0xc72e034e
+0,         65,         65,        1,     9216, 0xc72e034e
+0,         66,         66,        1,     9216, 0xc72e034e
+0,         67,         67,        1,     9216, 0xc72e034e
+0,         68,         68,        1,     9216, 0xc72e034e
+0,         69,         69,        1,     9216, 0xc72e034e
+0,         70,         70,        1,     9216, 0xc72e034e
+0,         71,         71,        1,     9216, 0xc72e034e
+0,         72,         72,        1,     9216, 0xc72e034e
+0,         73,         73,        1,     9216, 0xc72e034e
+0,         74,         74,        1,     9216, 0xc72e034e
+0,         75,         75,        1,     9216, 0xc72e034e
+0,         76,         76,        1,     9216, 0xc72e034e
+0,         77,         77,        1,     9216, 0xc72e034e
+0,         78,         78,        1,     9216, 0xc72e034e
+0,         79,         79,        1,     9216, 0xc72e034e
+0,         80,         80,        1,     9216, 0xc72e034e
+0,         81,         81,        1,     9216, 0xc72e034e
+0,         82,         82,        1,     9216, 0xc72e034e
+0,         83,         83,        1,     9216, 0xc72e034e
+0,         84,         84,        1,     9216, 0xc72e034e
+0,         85,         85,        1,     9216, 0xc72e034e
+0,         86,         86,        1,     9216, 0xc72e034e
+0,         87,         87,        1,     9216, 0xc72e034e
+0,         88,         88,        1,     9216, 0xc72e034e
+0,         89,         89,        1,     9216, 0xc72e034e
+0,         90,         90,        1,     9216, 0xf75be32f
+0,         91,         91,        1,     9216, 0xf75be32f
+0,         92,         92,        1,     9216, 0xbb5bc1ae
+0,         93,         93,        1,     9216, 0xbb5bc1ae
+0,         94,         94,        1,     9216, 0x67e4a45c
+0,         95,         95,        1,     9216, 0x67e4a45c
+0,         96,         96,        1,     9216, 0x6a42832c
+0,         97,         97,        1,     9216, 0x6a42832c
+0,         98,         98,        1,     9216, 0x44da649f
+0,         99,         99,        1,     9216, 0x44da649f
+0,        100,        100,        1,     9216, 0x60273f76
+0,        101,        101,        1,     9216, 0x60273f76
+0,        102,        102,        1,     9216, 0x5f0b20aa
+0,        103,        103,        1,     9216, 0x5f0b20aa
+0,        104,        104,        1,     9216, 0xd382ff8f
+0,        105,        105,        1,     9216, 0xd382ff8f
+0,        106,        106,        1,     9216, 0x5a29e2a0
+0,        107,        107,        1,     9216, 0x5a29e2a0
+0,        108,        108,        1,     9216, 0x13ffc143
+0,        109,        109,        1,     9216, 0x93aba0d9
+0,        110,        110,        1,     9216, 0x93aba0d9
+0,        111,        111,        1,     9216, 0x93aba0d9
+0,        112,        112,        1,     9216, 0x93aba0d9
+0,        113,        113,        1,     9216, 0x93aba0d9
+0,        114,        114,        1,     9216, 0x93aba0d9
+0,        115,        115,        1,     9216, 0x93aba0d9
+0,        116,        116,        1,     9216, 0x93aba0d9
+0,        117,        117,        1,     9216, 0x93aba0d9
+0,        118,        118,        1,     9216, 0x93aba0d9
+0,        119,        119,        1,     9216, 0x93aba0d9
+0,        120,        120,        1,     9216, 0x93aba0d9
+0,        121,        121,        1,     9216, 0x93aba0d9
+0,        122,        122,        1,     9216, 0x93aba0d9
+0,        123,        123,        1,     9216, 0x93aba0d9
+0,        124,        124,        1,     9216, 0x93aba0d9
+0,        125,        125,        1,     9216, 0x93aba0d9
+0,        126,        126,        1,     9216, 0x93aba0d9
+0,        127,        127,        1,     9216, 0x93aba0d9
+0,        128,        128,        1,     9216, 0x93aba0d9
+0,        129,        129,        1,     9216, 0x93aba0d9
+0,        130,        130,        1,     9216, 0x93aba0d9
+0,        131,        131,        1,     9216, 0x93aba0d9
+0,        132,        132,        1,     9216, 0x93aba0d9
+0,        133,        133,        1,     9216, 0x93aba0d9
+0,        134,        134,        1,     9216, 0x93aba0d9
+0,        135,        135,        1,     9216, 0x93aba0d9
+0,        136,        136,        1,     9216, 0x93aba0d9
+0,        137,        137,        1,     9216, 0x93aba0d9
+0,        138,        138,        1,     9216, 0x93aba0d9
+0,        139,        139,        1,     9216, 0x93aba0d9
+0,        140,        140,        1,     9216, 0x93aba0d9
+0,        141,        141,        1,     9216, 0x93aba0d9
+0,        142,        142,        1,     9216, 0x93aba0d9
+0,        143,        143,        1,     9216, 0x93aba0d9
+0,        144,        144,        1,     9216, 0x93aba0d9
+0,        145,        145,        1,     9216, 0x93aba0d9
+0,        146,        146,        1,     9216, 0x93aba0d9
+0,        147,        147,        1,     9216, 0x93aba0d9
+0,        148,        148,        1,     9216, 0x93aba0d9
+0,        149,        149,        1,     9216, 0x93aba0d9
+0,        150,        150,        1,     9216, 0x93aba0d9
+0,        151,        151,        1,     9216, 0x93aba0d9
+0,        152,        152,        1,     9216, 0x93aba0d9
+0,        153,        153,        1,     9216, 0x93aba0d9
+0,        154,        154,        1,     9216, 0x93aba0d9
+0,        155,        155,        1,     9216, 0x93aba0d9
+0,        156,        156,        1,     9216, 0x93aba0d9
+0,        157,        157,        1,     9216, 0x93aba0d9
+0,        158,        158,        1,     9216, 0x93aba0d9
+0,        159,        159,        1,     9216, 0x93aba0d9
+0,        160,        160,        1,     9216, 0x93aba0d9
+0,        161,        161,        1,     9216, 0x93aba0d9
+0,        162,        162,        1,     9216, 0x93aba0d9
+0,        163,        163,        1,     9216, 0x93aba0d9
+0,        164,        164,        1,     9216, 0x93aba0d9
+0,        165,        165,        1,     9216, 0x93aba0d9
+0,        166,        166,        1,     9216, 0x93aba0d9
+0,        167,        167,        1,     9216, 0x93aba0d9
+0,        168,        168,        1,     9216, 0x93aba0d9
+0,        169,        169,        1,     9216, 0x93aba0d9
+0,        170,        170,        1,     9216, 0x93aba0d9
+0,        171,        171,        1,     9216, 0x93aba0d9
+0,        172,        172,        1,     9216, 0x93aba0d9
+0,        173,        173,        1,     9216, 0x93aba0d9
+0,        174,        174,        1,     9216, 0x93aba0d9
+0,        175,        175,        1,     9216, 0x93aba0d9
+0,        176,        176,        1,     9216, 0x93aba0d9
+0,        177,        177,        1,     9216, 0x93aba0d9
+0,        178,        178,        1,     9216, 0x93aba0d9
+0,        179,        179,        1,     9216, 0x93aba0d9
+0,        180,        180,        1,     9216, 0x93aba0d9
+0,        181,        181,        1,     9216, 0x93aba0d9
+0,        182,        182,        1,     9216, 0x93aba0d9
+0,        183,        183,        1,     9216, 0x93aba0d9
+0,        184,        184,        1,     9216, 0x93aba0d9
+0,        185,        185,        1,     9216, 0x93aba0d9
+0,        186,        186,        1,     9216, 0x93aba0d9
+0,        187,        187,        1,     9216, 0x93aba0d9
+0,        188,        188,        1,     9216, 0x93aba0d9
+0,        189,        189,        1,     9216, 0x93aba0d9
+0,        190,        190,        1,     9216, 0x93aba0d9
+0,        191,        191,        1,     9216, 0x93aba0d9
+0,        192,        192,        1,     9216, 0x93aba0d9
+0,        193,        193,        1,     9216, 0x93aba0d9
+0,        194,        194,        1,     9216, 0x93aba0d9
+0,        195,        195,        1,     9216, 0x93aba0d9
+0,        196,        196,        1,     9216, 0x93aba0d9
+0,        197,        197,        1,     9216, 0x93aba0d9
+0,        198,        198,        1,     9216, 0x93aba0d9
+0,        199,        199,        1,     9216, 0x93aba0d9
+0,        200,        200,        1,     9216, 0x93aba0d9
+0,        201,        201,        1,     9216, 0x93aba0d9
+0,        202,        202,        1,     9216, 0x93aba0d9
+0,        203,        203,        1,     9216, 0x93aba0d9
+0,        204,        204,        1,     9216, 0x93aba0d9
+0,        205,        205,        1,     9216, 0x93aba0d9
+0,        206,        206,        1,     9216, 0x93aba0d9
+0,        207,        207,        1,     9216, 0x93aba0d9
+0,        208,        208,        1,     9216, 0x93aba0d9
+0,        209,        209,        1,     9216, 0x93aba0d9
+0,        210,        210,        1,     9216, 0xb57cbdda
+0,        211,        211,        1,     9216, 0xfad4d7a8
+0,        212,        212,        1,     9216, 0x4a0bf635
+0,        213,        213,        1,     9216, 0x44880d81
+0,        214,        214,        1,     9216, 0x4de02b90
+0,        215,        215,        1,     9216, 0x2a4f4ac8
+0,        216,        216,        1,     9216, 0x96616376
+0,        217,        217,        1,     9216, 0x65c88629
+0,        218,        218,        1,     9216, 0x3d4a9efb
+0,        219,        219,        1,     9216, 0x85a5bdbe
+0,        220,        220,        1,     9216, 0x653edbd6
+0,        221,        221,        1,     9216, 0x9f28f433
+0,        222,        222,        1,     9216, 0x8f3f13ef
+0,        223,        223,        1,     9216, 0x43e32e56
+0,        224,        224,        1,     9216, 0x780d3969
+0,        225,        225,        1,     9216, 0x780d3969
+0,        226,        226,        1,     9216, 0x780d3969
+0,        227,        227,        1,     9216, 0x780d3969
+0,        228,        228,        1,     9216, 0x780d3969
+0,        229,        229,        1,     9216, 0x780d3969
+0,        230,        230,        1,     9216, 0x780d3969
+0,        231,        231,        1,     9216, 0x780d3969
+0,        232,        232,        1,     9216, 0x780d3969
+0,        233,        233,        1,     9216, 0x780d3969
+0,        234,        234,        1,     9216, 0x780d3969
+0,        235,        235,        1,     9216, 0x780d3969
+0,        236,        236,        1,     9216, 0x780d3969
+0,        237,        237,        1,     9216, 0x780d3969
+0,        238,        238,        1,     9216, 0x780d3969
+0,        239,        239,        1,     9216, 0x780d3969
+0,        240,        240,        1,     9216, 0x780d3969
+0,        241,        241,        1,     9216, 0x780d3969
+0,        242,        242,        1,     9216, 0x780d3969
+0,        243,        243,        1,     9216, 0x780d3969
+0,        244,        244,        1,     9216, 0x780d3969
+0,        245,        245,        1,     9216, 0x780d3969
+0,        246,        246,        1,     9216, 0x780d3969
+0,        247,        247,        1,     9216, 0x780d3969
+0,        248,        248,        1,     9216, 0x780d3969
+0,        249,        249,        1,     9216, 0x780d3969
+0,        250,        250,        1,     9216, 0x780d3969
+0,        251,        251,        1,     9216, 0x780d3969
+0,        252,        252,        1,     9216, 0x780d3969
+0,        253,        253,        1,     9216, 0x780d3969
+0,        254,        254,        1,     9216, 0x780d3969
+0,        255,        255,        1,     9216, 0x780d3969
+0,        256,        256,        1,     9216, 0x780d3969
+0,        257,        257,        1,     9216, 0x780d3969
+0,        258,        258,        1,     9216, 0x780d3969
+0,        259,        259,        1,     9216, 0x780d3969
+0,        260,        260,        1,     9216, 0x780d3969
+0,        261,        261,        1,     9216, 0x780d3969
+0,        262,        262,        1,     9216, 0x780d3969
+0,        263,        263,        1,     9216, 0x780d3969
+0,        264,        264,        1,     9216, 0x780d3969
+0,        265,        265,        1,     9216, 0x780d3969
+0,        266,        266,        1,     9216, 0x780d3969
+0,        267,        267,        1,     9216, 0x780d3969
+0,        268,        268,        1,     9216, 0x780d3969
+0,        269,        269,        1,     9216, 0x780d3969
+0,        270,        270,        1,     9216, 0x780d3969
+0,        271,        271,        1,     9216, 0x780d3969
+0,        272,        272,        1,     9216, 0x780d3969
+0,        273,        273,        1,     9216, 0x780d3969
+0,        274,        274,        1,     9216, 0x780d3969
+0,        275,        275,        1,     9216, 0x780d3969
+0,        276,        276,        1,     9216, 0x780d3969
+0,        277,        277,        1,     9216, 0x780d3969
+0,        278,        278,        1,     9216, 0x780d3969
+0,        279,        279,        1,     9216, 0x780d3969
+0,        280,        280,        1,     9216, 0x780d3969
+0,        281,        281,        1,     9216, 0x780d3969
+0,        282,        282,        1,     9216, 0x780d3969
+0,        283,        283,        1,     9216, 0x780d3969
+0,        284,        284,        1,     9216, 0x780d3969
+0,        285,        285,        1,     9216, 0x780d3969
+0,        286,        286,        1,     9216, 0x780d3969
+0,        287,        287,        1,     9216, 0x780d3969
+0,        288,        288,        1,     9216, 0x780d3969
+0,        289,        289,        1,     9216, 0x780d3969
+0,        290,        290,        1,     9216, 0x780d3969
+0,        291,        291,        1,     9216, 0x780d3969
+0,        292,        292,        1,     9216, 0x780d3969
+0,        293,        293,        1,     9216, 0x780d3969
+0,        294,        294,        1,     9216, 0x780d3969
+0,        295,        295,        1,     9216, 0x780d3969
+0,        296,        296,        1,     9216, 0x780d3969
+0,        297,        297,        1,     9216, 0x780d3969
+0,        298,        298,        1,     9216, 0x780d3969
+0,        299,        299,        1,     9216, 0x780d3969
+0,        300,        300,        1,     9216, 0x780d3969
+0,        301,        301,        1,     9216, 0x780d3969
+0,        302,        302,        1,     9216, 0x780d3969
+0,        303,        303,        1,     9216, 0x780d3969
+0,        304,        304,        1,     9216, 0x780d3969
+0,        305,        305,        1,     9216, 0x780d3969
+0,        306,        306,        1,     9216, 0x780d3969
+0,        307,        307,        1,     9216, 0x780d3969
+0,        308,        308,        1,     9216, 0x780d3969
+0,        309,        309,        1,     9216, 0x780d3969
+0,        310,        310,        1,     9216, 0x780d3969
+0,        311,        311,        1,     9216, 0x780d3969
+0,        312,        312,        1,     9216, 0x780d3969
+0,        313,        313,        1,     9216, 0x780d3969
+0,        314,        314,        1,     9216, 0xc72e034e