Browse code

Merge remote-tracking branch 'qatar/master'

* qatar/master:
fate: Add FATE tests for the Ut Video encoder
lavc: add Ut Video encoder
mpegvideo_enc: remove stray duplicate line from 7f9aaa4
swscale: x86: fix #endif comments in rgb2rgb template file
avconv: mark more options as expert.
avconv: split printing "main options" into global and per-file.
avconv: refactor help printing.

Conflicts:
Changelog
ffmpeg_opt.c
ffserver.c
libavcodec/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2012/08/21 00:15:15
Showing 28 changed files
... ...
@@ -51,6 +51,7 @@ version next:
51 51
 - framestep filter
52 52
 - ffmpeg -shortest option is now per-output file
53 53
 - volume measurement filter
54
+- Ut Video encoder
54 55
 
55 56
 
56 57
 version 0.11:
... ...
@@ -142,7 +142,7 @@ int64_t parse_time_or_die(const char *context, const char *timestr,
142 142
 }
143 143
 
144 144
 void show_help_options(const OptionDef *options, const char *msg, int req_flags,
145
-                       int rej_flags)
145
+                       int rej_flags, int alt_flags)
146 146
 {
147 147
     const OptionDef *po;
148 148
     int first;
... ...
@@ -152,6 +152,7 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags,
152 152
         char buf[64];
153 153
 
154 154
         if (((po->flags & req_flags) != req_flags) ||
155
+            (alt_flags && !(po->flags & alt_flags)) ||
155 156
             (po->flags & rej_flags))
156 157
             continue;
157 158
 
... ...
@@ -178,9 +178,10 @@ typedef struct {
178 178
  * @param msg title of this group. Only printed if at least one option matches.
179 179
  * @param req_flags print only options which have all those flags set.
180 180
  * @param rej_flags don't print options which have any of those flags set.
181
+ * @param alt_flags print only options that have at least one of those flags set
181 182
  */
182 183
 void show_help_options(const OptionDef *options, const char *msg, int req_flags,
183
-                       int rej_flags);
184
+                       int rej_flags, int alt_flags);
184 185
 
185 186
 /**
186 187
  * Show help for all options with given flags in class and all its
... ...
@@ -666,7 +666,7 @@ following image formats are supported:
666 666
     @tab encoding supported through external library libtheora
667 667
 @item Tiertex Limited SEQ video  @tab     @tab  X
668 668
     @tab Codec used in DOS CD-ROM FlashBack game.
669
-@item Ut Video               @tab     @tab  X
669
+@item Ut Video               @tab  X  @tab  X
670 670
 @item v210 QuickTime uncompressed 4:2:2 10-bit     @tab  X  @tab  X
671 671
 @item v308 QuickTime uncompressed 4:4:4            @tab  X  @tab  X
672 672
 @item v408 QuickTime uncompressed 4:4:4:4          @tab  X  @tab  X
... ...
@@ -2141,32 +2141,68 @@ static int opt_filter_complex(const char *opt, const char *arg)
2141 2141
 
2142 2142
 void show_help_default(const char *opt, const char *arg)
2143 2143
 {
2144
-    int flags = AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_ENCODING_PARAM;
2144
+    /* per-file options have at least one of those set */
2145
+    const int per_file = OPT_SPEC | OPT_OFFSET | OPT_FUNC2;
2146
+    int show_advanced = 0, show_avoptions = 0;
2147
+
2148
+    if (opt) {
2149
+        if (!strcmp(opt, "long"))
2150
+            show_advanced = 1;
2151
+        else if (!strcmp(opt, "full"))
2152
+            show_advanced = show_avoptions = 1;
2153
+        else
2154
+            av_log(NULL, AV_LOG_ERROR, "Unknown help option '%s'.\n", opt);
2155
+    }
2145 2156
 
2146 2157
     show_usage();
2158
+
2159
+    printf("Getting help:\n"
2160
+           "    -h      -- print basic options\n"
2161
+           "    -h long -- print more options\n"
2162
+           "    -h full -- print all options (including all format and codec specific options, very long)\n"
2163
+           "    See man %s for detailed description of the options.\n"
2164
+           "\n", program_name);
2165
+
2147 2166
     show_help_options(options, "Print help / information / capabilities:",
2148
-                      OPT_EXIT, 0);
2149
-    show_help_options(options, "Main options:",
2150
-                      0, OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE |
2151
-                      OPT_EXIT);
2152
-    show_help_options(options, "Advanced options:",
2153
-                      OPT_EXPERT, OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE);
2167
+                      OPT_EXIT, 0, 0);
2168
+
2169
+    show_help_options(options, "Global options (affect whole program "
2170
+                      "instead of just one file:",
2171
+                      0, per_file | OPT_EXIT | OPT_EXPERT, 0);
2172
+    if (show_advanced)
2173
+        show_help_options(options, "Advanced global options:", OPT_EXPERT,
2174
+                          per_file | OPT_EXIT, 0);
2175
+
2176
+    show_help_options(options, "Per-file main options:", 0,
2177
+                      OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE |
2178
+                      OPT_EXIT, per_file);
2179
+    if (show_advanced)
2180
+        show_help_options(options, "Advanced per-file options:",
2181
+                          OPT_EXPERT, OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE, per_file);
2182
+
2154 2183
     show_help_options(options, "Video options:",
2155
-                      OPT_VIDEO, OPT_EXPERT | OPT_AUDIO);
2156
-    show_help_options(options, "Advanced Video options:",
2157
-                      OPT_EXPERT | OPT_VIDEO, OPT_AUDIO);
2184
+                      OPT_VIDEO, OPT_EXPERT | OPT_AUDIO, 0);
2185
+    if (show_advanced)
2186
+        show_help_options(options, "Advanced Video options:",
2187
+                          OPT_EXPERT | OPT_VIDEO, OPT_AUDIO, 0);
2188
+
2158 2189
     show_help_options(options, "Audio options:",
2159
-                      OPT_AUDIO, OPT_EXPERT | OPT_VIDEO);
2160
-    show_help_options(options, "Advanced Audio options:",
2161
-                      OPT_EXPERT | OPT_AUDIO, OPT_VIDEO);
2190
+                      OPT_AUDIO, OPT_EXPERT | OPT_VIDEO, 0);
2191
+    if (show_advanced)
2192
+        show_help_options(options, "Advanced Audio options:",
2193
+                          OPT_EXPERT | OPT_AUDIO, OPT_VIDEO, 0);
2162 2194
     show_help_options(options, "Subtitle options:",
2163
-                      OPT_SUBTITLE, 0);
2195
+                      OPT_SUBTITLE, 0, 0);
2164 2196
     printf("\n");
2165
-    show_help_children(avcodec_get_class(), flags);
2166
-    show_help_children(avformat_get_class(), flags);
2167
-    show_help_children(sws_get_class(), flags);
2168
-    show_help_children(swr_get_class(), AV_OPT_FLAG_AUDIO_PARAM);
2169
-    show_help_children(avfilter_get_class(), AV_OPT_FLAG_FILTERING_PARAM);
2197
+
2198
+    if (show_avoptions) {
2199
+        int flags = AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_ENCODING_PARAM;
2200
+        show_help_children(avcodec_get_class(), flags);
2201
+        show_help_children(avformat_get_class(), flags);
2202
+        show_help_children(sws_get_class(), flags);
2203
+        show_help_children(swr_get_class(), AV_OPT_FLAG_AUDIO_PARAM);
2204
+        show_help_children(avfilter_get_class(), AV_OPT_FLAG_FILTERING_PARAM);
2205
+    }
2170 2206
 }
2171 2207
 
2172 2208
 void show_usage(void)
... ...
@@ -2229,15 +2265,15 @@ const OptionDef options[] = {
2229 2229
         "set the limit file size in bytes", "limit_size" },
2230 2230
     { "ss",             HAS_ARG | OPT_TIME | OPT_OFFSET,             { .off = OFFSET(start_time) },
2231 2231
         "set the start time offset", "time_off" },
2232
-    { "itsoffset",      HAS_ARG | OPT_TIME | OPT_OFFSET,             { .off = OFFSET(input_ts_offset) },
2232
+    { "itsoffset",      HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_EXPERT,{ .off = OFFSET(input_ts_offset) },
2233 2233
         "set the input ts offset", "time_off" },
2234
-    { "itsscale",       HAS_ARG | OPT_DOUBLE | OPT_SPEC,             { .off = OFFSET(ts_scale) },
2234
+    { "itsscale",       HAS_ARG | OPT_DOUBLE | OPT_SPEC | OPT_EXPERT,{ .off = OFFSET(ts_scale) },
2235 2235
         "set the input ts scale", "scale" },
2236 2236
     { "timestamp",      HAS_ARG | OPT_FUNC2,                         { .func2_arg = opt_recording_timestamp },
2237 2237
         "set the recording timestamp ('now' to set the current time)", "time" },
2238 2238
     { "metadata",       HAS_ARG | OPT_STRING | OPT_SPEC,             { .off = OFFSET(metadata) },
2239 2239
         "add metadata", "string=string" },
2240
-    { "dframes",        HAS_ARG | OPT_FUNC2,                         { .func2_arg = opt_data_frames },
2240
+    { "dframes",        HAS_ARG | OPT_FUNC2 | OPT_EXPERT,            { .func2_arg = opt_data_frames },
2241 2241
         "set the number of data frames to record", "number" },
2242 2242
     { "benchmark",      OPT_BOOL | OPT_EXPERT,                       { &do_benchmark },
2243 2243
         "add timings for benchmarking" },
... ...
@@ -2247,7 +2283,7 @@ const OptionDef options[] = {
2247 2247
       "write program-readable progress information", "url" },
2248 2248
     { "stdin",          OPT_BOOL | OPT_EXPERT,                       { &stdin_interaction },
2249 2249
       "enable or disable interaction on standard input" },
2250
-    { "timelimit",      HAS_ARG,                                     { .func_arg = opt_timelimit },
2250
+    { "timelimit",      HAS_ARG | OPT_EXPERT,                        { .func_arg = opt_timelimit },
2251 2251
         "set max runtime in seconds", "limit" },
2252 2252
     { "dump",           OPT_BOOL | OPT_EXPERT,                       { &do_pkt_dump },
2253 2253
         "dump each input packet" },
... ...
@@ -2274,13 +2310,13 @@ const OptionDef options[] = {
2274 2274
         "timestamp discontinuity delta threshold", "threshold" },
2275 2275
     { "dts_error_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT,       { &dts_error_threshold },
2276 2276
         "timestamp error delta threshold", "threshold" },
2277
-    { "xerror",         OPT_BOOL,                                    { &exit_on_error },
2277
+    { "xerror",         OPT_BOOL | OPT_EXPERT,                       { &exit_on_error },
2278 2278
         "exit on error", "error" },
2279 2279
     { "copyinkf",       OPT_BOOL | OPT_EXPERT | OPT_SPEC,            { .off = OFFSET(copy_initial_nonkeyframes) },
2280 2280
         "copy initial non-keyframes" },
2281 2281
     { "frames",         OPT_INT64 | HAS_ARG | OPT_SPEC,              { .off = OFFSET(max_frames) },
2282 2282
         "set the number of frames to record", "number" },
2283
-    { "tag",            OPT_STRING | HAS_ARG | OPT_SPEC,             { .off = OFFSET(codec_tags) },
2283
+    { "tag",            OPT_STRING | HAS_ARG | OPT_SPEC | OPT_EXPERT,{ .off = OFFSET(codec_tags) },
2284 2284
         "force codec tag/fourcc", "fourcc/tag" },
2285 2285
     { "q",              HAS_ARG | OPT_EXPERT | OPT_DOUBLE | OPT_SPEC,{ .off = OFFSET(qscale) },
2286 2286
         "use fixed quality scale (VBR)", "q" },
... ...
@@ -2294,9 +2330,9 @@ const OptionDef options[] = {
2294 2294
         "create a complex filtergraph", "graph_description" },
2295 2295
     { "stats",          OPT_BOOL,                                    { &print_stats },
2296 2296
         "print progress report during encoding", },
2297
-    { "attach",         HAS_ARG | OPT_FUNC2,                         { .func2_arg = opt_attach },
2297
+    { "attach",         HAS_ARG | OPT_FUNC2 | OPT_EXPERT,            { .func2_arg = opt_attach },
2298 2298
         "add an attachment to the output file", "filename" },
2299
-    { "dump_attachment", HAS_ARG | OPT_STRING | OPT_SPEC,            { .off = OFFSET(dump_attachment) },
2299
+    { "dump_attachment", HAS_ARG | OPT_STRING | OPT_SPEC |OPT_EXPERT,{ .off = OFFSET(dump_attachment) },
2300 2300
         "extract an attachment into a file", "filename" },
2301 2301
     { "debug_ts",       OPT_BOOL | OPT_EXPERT,                       { &debug_ts },
2302 2302
         "print timestamp debugging info" },
... ...
@@ -2342,9 +2378,9 @@ const OptionDef options[] = {
2342 2342
         "rate control override for specific intervals", "override" },
2343 2343
     { "vcodec",       OPT_VIDEO | HAS_ARG  | OPT_FUNC2,                          { .func2_arg = opt_video_codec },
2344 2344
         "force video codec ('copy' to copy stream)", "codec" },
2345
-    { "sameq",        OPT_VIDEO | OPT_BOOL,                                      { &same_quant },
2345
+    { "sameq",        OPT_VIDEO | OPT_BOOL | OPT_EXPERT ,                        { &same_quant },
2346 2346
         "use same quantizer as source (implies VBR)" },
2347
-    { "same_quant",   OPT_VIDEO | OPT_BOOL ,                                     { &same_quant },
2347
+    { "same_quant",   OPT_VIDEO | OPT_BOOL | OPT_EXPERT,                         { &same_quant },
2348 2348
         "use same quantizer as source (implies VBR)" },
2349 2349
     { "timecode",     OPT_VIDEO | HAS_ARG | OPT_FUNC2,                           { .func2_arg = opt_timecode },
2350 2350
         "set initial TimeCode value.", "hh:mm:ss[:;.]ff" },
... ...
@@ -2431,7 +2467,7 @@ const OptionDef options[] = {
2431 2431
     { "muxpreload", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET, { .off = OFFSET(mux_preload) },
2432 2432
         "set the initial demux-decode delay", "seconds" },
2433 2433
 
2434
-    { "bsf", HAS_ARG | OPT_STRING | OPT_SPEC, { .off = OFFSET(bitstream_filters) },
2434
+    { "bsf", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_EXPERT, { .off = OFFSET(bitstream_filters) },
2435 2435
         "A comma-separated list of bitstream filters", "bitstream_filters" },
2436 2436
     { "absf", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_FUNC2, { .func2_arg = opt_old2new },
2437 2437
         "deprecated", "audio bitstream_filters" },
... ...
@@ -2447,7 +2483,7 @@ const OptionDef options[] = {
2447 2447
     { "fpre", HAS_ARG | OPT_EXPERT| OPT_FUNC2, { .func2_arg = opt_preset },
2448 2448
         "set options from indicated preset file", "filename" },
2449 2449
     /* data codec support */
2450
-    { "dcodec", HAS_ARG | OPT_DATA | OPT_FUNC2, { .func2_arg = opt_data_codec },
2450
+    { "dcodec", HAS_ARG | OPT_DATA | OPT_FUNC2 | OPT_EXPERT, { .func2_arg = opt_data_codec },
2451 2451
         "force data codec ('copy' to copy stream)", "codec" },
2452 2452
     { "dn", OPT_BOOL | OPT_VIDEO | OPT_OFFSET, { .off = OFFSET(data_disable) },
2453 2453
         "disable data" },
... ...
@@ -3025,8 +3025,8 @@ void show_help_default(const char *opt, const char *arg)
3025 3025
 {
3026 3026
     av_log_set_callback(log_callback_help);
3027 3027
     show_usage();
3028
-    show_help_options(options, "Main options:", 0, OPT_EXPERT);
3029
-    show_help_options(options, "Advanced options:", OPT_EXPERT, 0);
3028
+    show_help_options(options, "Main options:", 0, OPT_EXPERT, 0);
3029
+    show_help_options(options, "Advanced options:", OPT_EXPERT, 0, 0);
3030 3030
     printf("\n");
3031 3031
     show_help_children(avcodec_get_class(), AV_OPT_FLAG_DECODING_PARAM);
3032 3032
     show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM);
... ...
@@ -2076,7 +2076,7 @@ void show_help_default(const char *opt, const char *arg)
2076 2076
 {
2077 2077
     av_log_set_callback(log_callback_help);
2078 2078
     show_usage();
2079
-    show_help_options(options, "Main options:", 0, 0);
2079
+    show_help_options(options, "Main options:", 0, 0, 0);
2080 2080
     printf("\n");
2081 2081
 
2082 2082
     show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM);
... ...
@@ -4650,8 +4650,7 @@ void show_help_default(const char *opt, const char *arg)
4650 4650
     printf("usage: ffserver [options]\n"
4651 4651
            "Hyper fast multi format Audio/Video streaming server\n");
4652 4652
     printf("\n");
4653
-    show_help_options(options, "Main options:", 0, 0);
4654
-    return 0;
4653
+    show_help_options(options, "Main options:", 0, 0, 0);
4655 4654
 }
4656 4655
 
4657 4656
 static const OptionDef options[] = {
... ...
@@ -432,7 +432,8 @@ OBJS-$(CONFIG_TTA_DECODER)             += tta.o
432 432
 OBJS-$(CONFIG_TWINVQ_DECODER)          += twinvq.o celp_math.o
433 433
 OBJS-$(CONFIG_TXD_DECODER)             += txd.o s3tc.o
434 434
 OBJS-$(CONFIG_ULTI_DECODER)            += ulti.o
435
-OBJS-$(CONFIG_UTVIDEO_DECODER)         += utvideodec.o
435
+OBJS-$(CONFIG_UTVIDEO_DECODER)         += utvideodec.o utvideo.o
436
+OBJS-$(CONFIG_UTVIDEO_ENCODER)         += utvideoenc.o utvideo.o
436 437
 OBJS-$(CONFIG_V210_DECODER)            += v210dec.o
437 438
 OBJS-$(CONFIG_V210_ENCODER)            += v210enc.o
438 439
 OBJS-$(CONFIG_V308_DECODER)            += v308dec.o
... ...
@@ -229,7 +229,7 @@ void avcodec_register_all(void)
229 229
     REGISTER_DECODER (TSCC2, tscc2);
230 230
     REGISTER_DECODER (TXD, txd);
231 231
     REGISTER_DECODER (ULTI, ulti);
232
-    REGISTER_DECODER (UTVIDEO, utvideo);
232
+    REGISTER_ENCDEC  (UTVIDEO, utvideo);
233 233
     REGISTER_ENCDEC  (V210,  v210);
234 234
     REGISTER_DECODER (V210X, v210x);
235 235
     REGISTER_ENCDEC  (V308, v308);
236 236
new file mode 100644
... ...
@@ -0,0 +1,39 @@
0
+/*
1
+ * Common Ut Video code
2
+ * Copyright (c) 2011 Konstantin Shishkov
3
+ *
4
+ * This file is part of FFmpeg.
5
+ *
6
+ * FFmpeg is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * FFmpeg is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with FFmpeg; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
21
+/**
22
+ * @file
23
+ * Common Ut Video code
24
+ */
25
+
26
+#include "utvideo.h"
27
+
28
+const int ff_ut_pred_order[5] = {
29
+    PRED_LEFT, PRED_MEDIAN, PRED_MEDIAN, PRED_NONE, PRED_GRADIENT
30
+};
31
+
32
+const int ff_ut_rgb_order[4]  = { 1, 2, 0, 3 }; // G, B, R, A
33
+
34
+int ff_ut_huff_cmp_len(const void *a, const void *b)
35
+{
36
+    const HuffEntry *aa = a, *bb = b;
37
+    return (aa->len - bb->len)*256 + aa->sym - bb->sym;
38
+}
0 39
new file mode 100644
... ...
@@ -0,0 +1,91 @@
0
+/*
1
+ * Common Ut Video header
2
+ * Copyright (c) 2011 Konstantin Shishkov
3
+ *
4
+ * This file is part of FFmpeg.
5
+ *
6
+ * FFmpeg is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * FFmpeg is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with FFmpeg; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
21
+#ifndef AVCODEC_UTVIDEO_H
22
+#define AVCODEC_UTVIDEO_H
23
+
24
+/**
25
+ * @file
26
+ * Common Ut Video header
27
+ */
28
+
29
+#include "libavutil/common.h"
30
+#include "avcodec.h"
31
+#include "dsputil.h"
32
+
33
+enum {
34
+    PRED_NONE = 0,
35
+    PRED_LEFT,
36
+    PRED_GRADIENT,
37
+    PRED_MEDIAN,
38
+};
39
+
40
+enum {
41
+    COMP_NONE = 0,
42
+    COMP_HUFF,
43
+};
44
+
45
+/*
46
+ * "Original format" markers.
47
+ * Based on values gotten from the official VFW encoder.
48
+ * They are not used during decoding, but they do have
49
+ * an informative role on seeing what was input
50
+ * to the encoder.
51
+ */
52
+enum {
53
+    UTVIDEO_RGB  = MKTAG(0x00, 0x00, 0x01, 0x18),
54
+    UTVIDEO_RGBA = MKTAG(0x00, 0x00, 0x02, 0x18),
55
+    UTVIDEO_420  = MKTAG('Y', 'V', '1', '2'),
56
+    UTVIDEO_422  = MKTAG('Y', 'U', 'Y', '2'),
57
+};
58
+
59
+/* Mapping of libavcodec prediction modes to Ut Video's */
60
+extern const int ff_ut_pred_order[5];
61
+
62
+/* Order of RGB(A) planes in Ut Video */
63
+extern const int ff_ut_rgb_order[4];
64
+
65
+typedef struct UtvideoContext {
66
+    AVCodecContext *avctx;
67
+    AVFrame        pic;
68
+    DSPContext     dsp;
69
+
70
+    uint32_t frame_info_size, flags, frame_info;
71
+    int      planes;
72
+    int      slices;
73
+    int      compression;
74
+    int      interlaced;
75
+    int      frame_pred;
76
+
77
+    uint8_t *slice_bits, *slice_buffer;
78
+    int      slice_bits_size;
79
+} UtvideoContext;
80
+
81
+typedef struct HuffEntry {
82
+    uint8_t  sym;
83
+    uint8_t  len;
84
+    uint32_t code;
85
+} HuffEntry;
86
+
87
+/* Compare huffman tree nodes */
88
+int ff_ut_huff_cmp_len(const void *a, const void *b);
89
+
90
+#endif /* AVCODEC_UTVIDEO_H */
... ...
@@ -32,40 +32,7 @@
32 32
 #include "get_bits.h"
33 33
 #include "dsputil.h"
34 34
 #include "thread.h"
35
-
36
-enum {
37
-    PRED_NONE = 0,
38
-    PRED_LEFT,
39
-    PRED_GRADIENT,
40
-    PRED_MEDIAN,
41
-};
42
-
43
-typedef struct UtvideoContext {
44
-    AVCodecContext *avctx;
45
-    AVFrame pic;
46
-    DSPContext dsp;
47
-
48
-    uint32_t frame_info_size, flags, frame_info;
49
-    int planes;
50
-    int slices;
51
-    int compression;
52
-    int interlaced;
53
-    int frame_pred;
54
-
55
-    uint8_t *slice_bits;
56
-    int slice_bits_size;
57
-} UtvideoContext;
58
-
59
-typedef struct HuffEntry {
60
-    uint8_t sym;
61
-    uint8_t len;
62
-} HuffEntry;
63
-
64
-static int huff_cmp(const void *a, const void *b)
65
-{
66
-    const HuffEntry *aa = a, *bb = b;
67
-    return (aa->len - bb->len)*256 + aa->sym - bb->sym;
68
-}
35
+#include "utvideo.h"
69 36
 
70 37
 static int build_huff(const uint8_t *src, VLC *vlc, int *fsym)
71 38
 {
... ...
@@ -82,7 +49,7 @@ static int build_huff(const uint8_t *src, VLC *vlc, int *fsym)
82 82
         he[i].sym = i;
83 83
         he[i].len = *src++;
84 84
     }
85
-    qsort(he, 256, sizeof(*he), huff_cmp);
85
+    qsort(he, 256, sizeof(*he), ff_ut_huff_cmp_len);
86 86
 
87 87
     if (!he[0].len) {
88 88
         *fsym = he[0].sym;
... ...
@@ -216,8 +183,6 @@ fail:
216 216
     return AVERROR_INVALIDDATA;
217 217
 }
218 218
 
219
-static const int rgb_order[4] = { 1, 2, 0, 3 };
220
-
221 219
 static void restore_rgb_planes(uint8_t *src, int step, int stride, int width,
222 220
                                int height)
223 221
 {
... ...
@@ -432,20 +397,22 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
432 432
     case PIX_FMT_RGB24:
433 433
     case PIX_FMT_RGBA:
434 434
         for (i = 0; i < c->planes; i++) {
435
-            ret = decode_plane(c, i, c->pic.data[0] + rgb_order[i], c->planes,
436
-                               c->pic.linesize[0], avctx->width, avctx->height,
437
-                               plane_start[i], c->frame_pred == PRED_LEFT);
435
+            ret = decode_plane(c, i, c->pic.data[0] + ff_ut_rgb_order[i],
436
+                               c->planes, c->pic.linesize[0], avctx->width,
437
+                               avctx->height, plane_start[i],
438
+                               c->frame_pred == PRED_LEFT);
438 439
             if (ret)
439 440
                 return ret;
440 441
             if (c->frame_pred == PRED_MEDIAN) {
441 442
                 if (!c->interlaced) {
442
-                    restore_median(c->pic.data[0] + rgb_order[i], c->planes,
443
-                                   c->pic.linesize[0], avctx->width,
443
+                    restore_median(c->pic.data[0] + ff_ut_rgb_order[i],
444
+                                   c->planes, c->pic.linesize[0], avctx->width,
444 445
                                    avctx->height, c->slices, 0);
445 446
                 } else {
446
-                    restore_median_il(c->pic.data[0] + rgb_order[i], c->planes,
447
-                                      c->pic.linesize[0], avctx->width,
448
-                                      avctx->height, c->slices, 0);
447
+                    restore_median_il(c->pic.data[0] + ff_ut_rgb_order[i],
448
+                                      c->planes, c->pic.linesize[0],
449
+                                      avctx->width, avctx->height, c->slices,
450
+                                      0);
449 451
                 }
450 452
             }
451 453
         }
452 454
new file mode 100644
... ...
@@ -0,0 +1,735 @@
0
+/*
1
+ * Ut Video encoder
2
+ * Copyright (c) 2012 Jan Ekström
3
+ *
4
+ * This file is part of FFmpeg.
5
+ *
6
+ * FFmpeg is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * FFmpeg is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with FFmpeg; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
21
+/**
22
+ * @file
23
+ * Ut Video encoder
24
+ */
25
+
26
+#include "libavutil/intreadwrite.h"
27
+#include "avcodec.h"
28
+#include "internal.h"
29
+#include "bytestream.h"
30
+#include "put_bits.h"
31
+#include "dsputil.h"
32
+#include "mathops.h"
33
+#include "utvideo.h"
34
+
35
+/* Compare huffentry symbols */
36
+static int huff_cmp_sym(const void *a, const void *b)
37
+{
38
+    const HuffEntry *aa = a, *bb = b;
39
+    return aa->sym - bb->sym;
40
+}
41
+
42
+static av_cold int utvideo_encode_close(AVCodecContext *avctx)
43
+{
44
+    UtvideoContext *c = avctx->priv_data;
45
+
46
+    av_freep(&avctx->coded_frame);
47
+    av_freep(&c->slice_bits);
48
+    av_freep(&c->slice_buffer);
49
+
50
+    return 0;
51
+}
52
+
53
+static av_cold int utvideo_encode_init(AVCodecContext *avctx)
54
+{
55
+    UtvideoContext *c = avctx->priv_data;
56
+
57
+    uint32_t original_format;
58
+
59
+    c->avctx           = avctx;
60
+    c->frame_info_size = 4;
61
+
62
+    switch (avctx->pix_fmt) {
63
+    case PIX_FMT_RGB24:
64
+        c->planes        = 3;
65
+        avctx->codec_tag = MKTAG('U', 'L', 'R', 'G');
66
+        original_format  = UTVIDEO_RGB;
67
+        break;
68
+    case PIX_FMT_RGBA:
69
+        c->planes        = 4;
70
+        avctx->codec_tag = MKTAG('U', 'L', 'R', 'A');
71
+        original_format  = UTVIDEO_RGBA;
72
+        break;
73
+    case PIX_FMT_YUV420P:
74
+        if (avctx->width & 1 || avctx->height & 1) {
75
+            av_log(avctx, AV_LOG_ERROR,
76
+                   "4:2:0 video requires even width and height.\n");
77
+            return AVERROR_INVALIDDATA;
78
+        }
79
+        c->planes        = 3;
80
+        avctx->codec_tag = MKTAG('U', 'L', 'Y', '0');
81
+        original_format  = UTVIDEO_420;
82
+        break;
83
+    case PIX_FMT_YUV422P:
84
+        if (avctx->width & 1) {
85
+            av_log(avctx, AV_LOG_ERROR,
86
+                   "4:2:2 video requires even width.\n");
87
+            return AVERROR_INVALIDDATA;
88
+        }
89
+        c->planes        = 3;
90
+        avctx->codec_tag = MKTAG('U', 'L', 'Y', '2');
91
+        original_format  = UTVIDEO_422;
92
+        break;
93
+    default:
94
+        av_log(avctx, AV_LOG_ERROR, "Unknown pixel format: %d\n",
95
+               avctx->pix_fmt);
96
+        return AVERROR_INVALIDDATA;
97
+    }
98
+
99
+    ff_dsputil_init(&c->dsp, avctx);
100
+
101
+    /* Check the prediction method, and error out if unsupported */
102
+    if (avctx->prediction_method < 0 || avctx->prediction_method > 4) {
103
+        av_log(avctx, AV_LOG_WARNING,
104
+               "Prediction method %d is not supported in Ut Video.\n",
105
+               avctx->prediction_method);
106
+        return AVERROR_OPTION_NOT_FOUND;
107
+    }
108
+
109
+    if (avctx->prediction_method == FF_PRED_PLANE) {
110
+        av_log(avctx, AV_LOG_ERROR,
111
+               "Plane prediction is not supported in Ut Video.\n");
112
+        return AVERROR_OPTION_NOT_FOUND;
113
+    }
114
+
115
+    /* Convert from libavcodec prediction type to Ut Video's */
116
+    c->frame_pred = ff_ut_pred_order[avctx->prediction_method];
117
+
118
+    if (c->frame_pred == PRED_GRADIENT) {
119
+        av_log(avctx, AV_LOG_ERROR, "Gradient prediction is not supported.\n");
120
+        return AVERROR_OPTION_NOT_FOUND;
121
+    }
122
+
123
+    avctx->coded_frame = avcodec_alloc_frame();
124
+
125
+    if (!avctx->coded_frame) {
126
+        av_log(avctx, AV_LOG_ERROR, "Could not allocate frame.\n");
127
+        utvideo_encode_close(avctx);
128
+        return AVERROR(ENOMEM);
129
+    }
130
+
131
+    /* extradata size is 4 * 32bit */
132
+    avctx->extradata_size = 16;
133
+
134
+    avctx->extradata = av_mallocz(avctx->extradata_size +
135
+                                  FF_INPUT_BUFFER_PADDING_SIZE);
136
+
137
+    if (!avctx->extradata) {
138
+        av_log(avctx, AV_LOG_ERROR, "Could not allocate extradata.\n");
139
+        utvideo_encode_close(avctx);
140
+        return AVERROR(ENOMEM);
141
+    }
142
+
143
+    c->slice_buffer = av_malloc(avctx->width * avctx->height +
144
+                                FF_INPUT_BUFFER_PADDING_SIZE);
145
+
146
+    if (!c->slice_buffer) {
147
+        av_log(avctx, AV_LOG_ERROR, "Cannot allocate temporary buffer 1.\n");
148
+        utvideo_encode_close(avctx);
149
+        return AVERROR(ENOMEM);
150
+    }
151
+
152
+    /*
153
+     * Set the version of the encoder.
154
+     * Last byte is "implementation ID", which is
155
+     * obtained from the creator of the format.
156
+     * Libavcodec has been assigned with the ID 0xF0.
157
+     */
158
+    AV_WB32(avctx->extradata, MKTAG(1, 0, 0, 0xF0));
159
+
160
+    /*
161
+     * Set the "original format"
162
+     * Not used for anything during decoding.
163
+     */
164
+    AV_WL32(avctx->extradata + 4, original_format);
165
+
166
+    /* Write 4 as the 'frame info size' */
167
+    AV_WL32(avctx->extradata + 8, c->frame_info_size);
168
+
169
+    /*
170
+     * Set how many slices are going to be used.
171
+     * Set one slice for now.
172
+     */
173
+    c->slices = 1;
174
+
175
+    /* Set compression mode */
176
+    c->compression = COMP_HUFF;
177
+
178
+    /*
179
+     * Set the encoding flags:
180
+     * - Slice count minus 1
181
+     * - Interlaced encoding mode flag, set to zero for now.
182
+     * - Compression mode (none/huff)
183
+     * And write the flags.
184
+     */
185
+    c->flags  = (c->slices - 1) << 24;
186
+    c->flags |= 0 << 11; // bit field to signal interlaced encoding mode
187
+    c->flags |= c->compression;
188
+
189
+    AV_WL32(avctx->extradata + 12, c->flags);
190
+
191
+    return 0;
192
+}
193
+
194
+static void mangle_rgb_planes(uint8_t *src, int step, int stride, int width,
195
+                              int height)
196
+{
197
+    int i, j;
198
+    uint8_t r, g, b;
199
+
200
+    for (j = 0; j < height; j++) {
201
+        for (i = 0; i < width * step; i += step) {
202
+            r = src[i];
203
+            g = src[i + 1];
204
+            b = src[i + 2];
205
+
206
+            src[i]     = r - g + 0x80;
207
+            src[i + 2] = b - g + 0x80;
208
+        }
209
+        src += stride;
210
+    }
211
+}
212
+
213
+/* Write data to a plane, no prediction applied */
214
+static void write_plane(uint8_t *src, uint8_t *dst, int step, int stride,
215
+                        int width, int height)
216
+{
217
+    int i, j;
218
+
219
+    for (j = 0; j < height; j++) {
220
+        for (i = 0; i < width * step; i += step)
221
+            *dst++ = src[i];
222
+
223
+        src += stride;
224
+    }
225
+}
226
+
227
+/* Write data to a plane with left prediction */
228
+static void left_predict(uint8_t *src, uint8_t *dst, int step, int stride,
229
+                         int width, int height)
230
+{
231
+    int i, j;
232
+    uint8_t prev;
233
+
234
+    prev = 0x80; /* Set the initial value */
235
+    for (j = 0; j < height; j++) {
236
+        for (i = 0; i < width * step; i += step) {
237
+            *dst++ = src[i] - prev;
238
+            prev   = src[i];
239
+        }
240
+        src += stride;
241
+    }
242
+}
243
+
244
+/* Write data to a plane with median prediction */
245
+static void median_predict(uint8_t *src, uint8_t *dst, int step, int stride,
246
+                           int width, int height)
247
+{
248
+    int i, j;
249
+    int A, B, C;
250
+    uint8_t prev;
251
+
252
+    /* First line uses left neighbour prediction */
253
+    prev = 0x80; /* Set the initial value */
254
+    for (i = 0; i < width * step; i += step) {
255
+        *dst++ = src[i] - prev;
256
+        prev   = src[i];
257
+    }
258
+
259
+    if (height == 1)
260
+        return;
261
+
262
+    src += stride;
263
+
264
+    /*
265
+     * Second line uses top prediction for the first sample,
266
+     * and median for the rest.
267
+     */
268
+    C      = src[-stride];
269
+    *dst++ = src[0] - C;
270
+    A      = src[0];
271
+    for (i = step; i < width * step; i += step) {
272
+        B       = src[i - stride];
273
+        *dst++  = src[i] - mid_pred(A, B, (A + B - C) & 0xFF);
274
+        C       = B;
275
+        A       = src[i];
276
+    }
277
+
278
+    src += stride;
279
+
280
+    /* Rest of the coded part uses median prediction */
281
+    for (j = 2; j < height; j++) {
282
+        for (i = 0; i < width * step; i += step) {
283
+            B       = src[i - stride];
284
+            *dst++  = src[i] - mid_pred(A, B, (A + B - C) & 0xFF);
285
+            C       = B;
286
+            A       = src[i];
287
+        }
288
+        src += stride;
289
+    }
290
+}
291
+
292
+/* Count the usage of values in a plane */
293
+static void count_usage(uint8_t *src, int width,
294
+                        int height, uint32_t *counts)
295
+{
296
+    int i, j;
297
+
298
+    for (j = 0; j < height; j++) {
299
+        for (i = 0; i < width; i++) {
300
+            counts[src[i]]++;
301
+        }
302
+        src += width;
303
+    }
304
+}
305
+
306
+static uint32_t add_weights(uint32_t w1, uint32_t w2)
307
+{
308
+    uint32_t max = (w1 & 0xFF) > (w2 & 0xFF) ? (w1 & 0xFF) : (w2 & 0xFF);
309
+
310
+    return ((w1 & 0xFFFFFF00) + (w2 & 0xFFFFFF00)) | (1 + max);
311
+}
312
+
313
+static void up_heap(uint32_t val, uint32_t *heap, uint32_t *weights)
314
+{
315
+    uint32_t initial_val = heap[val];
316
+
317
+    while (weights[initial_val] < weights[heap[val >> 1]]) {
318
+        heap[val] = heap[val >> 1];
319
+        val     >>= 1;
320
+    }
321
+
322
+    heap[val] = initial_val;
323
+}
324
+
325
+static void down_heap(uint32_t nr_heap, uint32_t *heap, uint32_t *weights)
326
+{
327
+    uint32_t val = 1;
328
+    uint32_t val2;
329
+    uint32_t initial_val = heap[val];
330
+
331
+    while (1) {
332
+        val2 = val << 1;
333
+
334
+        if (val2 > nr_heap)
335
+            break;
336
+
337
+        if (val2 < nr_heap && weights[heap[val2 + 1]] < weights[heap[val2]])
338
+            val2++;
339
+
340
+        if (weights[initial_val] < weights[heap[val2]])
341
+            break;
342
+
343
+        heap[val] = heap[val2];
344
+
345
+        val = val2;
346
+    }
347
+
348
+    heap[val] = initial_val;
349
+}
350
+
351
+/* Calculate the huffman code lengths from value counts */
352
+static void calculate_code_lengths(uint8_t *lengths, uint32_t *counts)
353
+{
354
+    uint32_t nr_nodes, nr_heap, node1, node2;
355
+    int      i, j;
356
+    int32_t  k;
357
+
358
+    /* Heap and node entries start from 1 */
359
+    uint32_t weights[512];
360
+    uint32_t heap[512];
361
+    int32_t  parents[512];
362
+
363
+    /* Set initial weights */
364
+    for (i = 0; i < 256; i++)
365
+        weights[i + 1] = (counts[i] ? counts[i] : 1) << 8;
366
+
367
+    nr_nodes = 256;
368
+    nr_heap  = 0;
369
+
370
+    heap[0]    = 0;
371
+    weights[0] = 0;
372
+    parents[0] = -2;
373
+
374
+    /* Create initial nodes */
375
+    for (i = 1; i <= 256; i++) {
376
+        parents[i] = -1;
377
+
378
+        heap[++nr_heap] = i;
379
+        up_heap(nr_heap, heap, weights);
380
+    }
381
+
382
+    /* Build the tree */
383
+    while (nr_heap > 1) {
384
+        node1   = heap[1];
385
+        heap[1] = heap[nr_heap--];
386
+
387
+        down_heap(nr_heap, heap, weights);
388
+
389
+        node2   = heap[1];
390
+        heap[1] = heap[nr_heap--];
391
+
392
+        down_heap(nr_heap, heap, weights);
393
+
394
+        nr_nodes++;
395
+
396
+        parents[node1]    = parents[node2] = nr_nodes;
397
+        weights[nr_nodes] = add_weights(weights[node1], weights[node2]);
398
+        parents[nr_nodes] = -1;
399
+
400
+        heap[++nr_heap] = nr_nodes;
401
+
402
+        up_heap(nr_heap, heap, weights);
403
+    }
404
+
405
+    /* Generate lengths */
406
+    for (i = 1; i <= 256; i++) {
407
+        j = 0;
408
+        k = i;
409
+
410
+        while (parents[k] >= 0) {
411
+            k = parents[k];
412
+            j++;
413
+        }
414
+
415
+        lengths[i - 1] = j;
416
+    }
417
+}
418
+
419
+/* Calculate the actual huffman codes from the code lengths */
420
+static void calculate_codes(HuffEntry *he)
421
+{
422
+    int last, i;
423
+    uint32_t code;
424
+
425
+    qsort(he, 256, sizeof(*he), ff_ut_huff_cmp_len);
426
+
427
+    last = 255;
428
+    while (he[last].len == 255 && last)
429
+        last--;
430
+
431
+    code = 1;
432
+    for (i = last; i >= 0; i--) {
433
+        he[i].code  = code >> (32 - he[i].len);
434
+        code       += 0x80000000u >> (he[i].len - 1);
435
+    }
436
+
437
+    qsort(he, 256, sizeof(*he), huff_cmp_sym);
438
+}
439
+
440
+/* Write huffman bit codes to a memory block */
441
+static int write_huff_codes(uint8_t *src, uint8_t *dst, int dst_size,
442
+                            int width, int height, HuffEntry *he)
443
+{
444
+    PutBitContext pb;
445
+    int i, j;
446
+    int count;
447
+
448
+    init_put_bits(&pb, dst, dst_size);
449
+
450
+    /* Write the codes */
451
+    for (j = 0; j < height; j++) {
452
+        for (i = 0; i < width; i++)
453
+            put_bits(&pb, he[src[i]].len, he[src[i]].code);
454
+
455
+        src += width;
456
+    }
457
+
458
+    /* Pad output to a 32bit boundary */
459
+    count = put_bits_count(&pb) & 0x1F;
460
+
461
+    if (count)
462
+        put_bits(&pb, 32 - count, 0);
463
+
464
+    /* Get the amount of bits written */
465
+    count = put_bits_count(&pb);
466
+
467
+    /* Flush the rest with zeroes */
468
+    flush_put_bits(&pb);
469
+
470
+    return count;
471
+}
472
+
473
+static int encode_plane(AVCodecContext *avctx, uint8_t *src,
474
+                        uint8_t *dst, int step, int stride,
475
+                        int width, int height, PutByteContext *pb)
476
+{
477
+    UtvideoContext *c        = avctx->priv_data;
478
+    uint8_t  lengths[256];
479
+    uint32_t counts[256]     = { 0 };
480
+
481
+    HuffEntry he[256];
482
+
483
+    uint32_t offset = 0, slice_len = 0;
484
+    int      i, sstart, send = 0;
485
+    int      symbol;
486
+
487
+    /* Do prediction / make planes */
488
+    switch (c->frame_pred) {
489
+    case PRED_NONE:
490
+        for (i = 0; i < c->slices; i++) {
491
+            sstart = send;
492
+            send   = height * (i + 1) / c->slices;
493
+            write_plane(src + sstart * stride, dst + sstart * width,
494
+                        step, stride, width, send - sstart);
495
+        }
496
+        break;
497
+    case PRED_LEFT:
498
+        for (i = 0; i < c->slices; i++) {
499
+            sstart = send;
500
+            send   = height * (i + 1) / c->slices;
501
+            left_predict(src + sstart * stride, dst + sstart * width,
502
+                         step, stride, width, send - sstart);
503
+        }
504
+        break;
505
+    case PRED_MEDIAN:
506
+        for (i = 0; i < c->slices; i++) {
507
+            sstart = send;
508
+            send   = height * (i + 1) / c->slices;
509
+            median_predict(src + sstart * stride, dst + sstart * width,
510
+                           step, stride, width, send - sstart);
511
+        }
512
+        break;
513
+    default:
514
+        av_log(avctx, AV_LOG_ERROR, "Unknown prediction mode: %d\n",
515
+               c->frame_pred);
516
+        return AVERROR_OPTION_NOT_FOUND;
517
+    }
518
+
519
+    /* Count the usage of values */
520
+    count_usage(dst, width, height, counts);
521
+
522
+    /* Check for a special case where only one symbol was used */
523
+    for (symbol = 0; symbol < 256; symbol++) {
524
+        /* If non-zero count is found, see if it matches width * height */
525
+        if (counts[symbol]) {
526
+            /* Special case if only one symbol was used */
527
+            if (counts[symbol] == width * height) {
528
+                /*
529
+                 * Write a zero for the single symbol
530
+                 * used in the plane, else 0xFF.
531
+                 */
532
+                for (i = 0; i < 256; i++) {
533
+                    if (i == symbol)
534
+                        bytestream2_put_byte(pb, 0);
535
+                    else
536
+                        bytestream2_put_byte(pb, 0xFF);
537
+                }
538
+
539
+                /* Write zeroes for lengths */
540
+                for (i = 0; i < c->slices; i++)
541
+                    bytestream2_put_le32(pb, 0);
542
+
543
+                /* And that's all for that plane folks */
544
+                return 0;
545
+            }
546
+            break;
547
+        }
548
+    }
549
+
550
+    /* Calculate huffman lengths */
551
+    calculate_code_lengths(lengths, counts);
552
+
553
+    /*
554
+     * Write the plane's header into the output packet:
555
+     * - huffman code lengths (256 bytes)
556
+     * - slice end offsets (gotten from the slice lengths)
557
+     */
558
+    for (i = 0; i < 256; i++) {
559
+        bytestream2_put_byte(pb, lengths[i]);
560
+
561
+        he[i].len = lengths[i];
562
+        he[i].sym = i;
563
+    }
564
+
565
+    /* Calculate the huffman codes themselves */
566
+    calculate_codes(he);
567
+
568
+    send = 0;
569
+    for (i = 0; i < c->slices; i++) {
570
+        sstart  = send;
571
+        send    = height * (i + 1) / c->slices;
572
+
573
+        /*
574
+         * Write the huffman codes to a buffer,
575
+         * get the offset in bits and convert to bytes.
576
+         */
577
+        offset += write_huff_codes(dst + sstart * width, c->slice_bits,
578
+                                   width * (send - sstart), width,
579
+                                   send - sstart, he) >> 3;
580
+
581
+        slice_len = offset - slice_len;
582
+
583
+        /* Byteswap the written huffman codes */
584
+        c->dsp.bswap_buf((uint32_t *) c->slice_bits,
585
+                         (uint32_t *) c->slice_bits,
586
+                         slice_len >> 2);
587
+
588
+        /* Write the offset to the stream */
589
+        bytestream2_put_le32(pb, offset);
590
+
591
+        /* Seek to the data part of the packet */
592
+        bytestream2_seek_p(pb, 4 * (c->slices - i - 1) +
593
+                           offset - slice_len, SEEK_CUR);
594
+
595
+        /* Write the slices' data into the output packet */
596
+        bytestream2_put_buffer(pb, c->slice_bits, slice_len);
597
+
598
+        /* Seek back to the slice offsets */
599
+        bytestream2_seek_p(pb, -4 * (c->slices - i - 1) - offset,
600
+                           SEEK_CUR);
601
+
602
+        slice_len = offset;
603
+    }
604
+
605
+    /* And at the end seek to the end of written slice(s) */
606
+    bytestream2_seek_p(pb, offset, SEEK_CUR);
607
+
608
+    return 0;
609
+}
610
+
611
+static int utvideo_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
612
+                                const AVFrame *pic, int *got_packet)
613
+{
614
+    UtvideoContext *c = avctx->priv_data;
615
+    PutByteContext pb;
616
+
617
+    uint32_t frame_info;
618
+
619
+    uint8_t *dst;
620
+
621
+    int width = avctx->width, height = avctx->height;
622
+    int i, ret = 0;
623
+
624
+    /* Allocate a new packet if needed, and set it to the pointer dst */
625
+    ret = ff_alloc_packet(pkt, (256 + 4 * c->slices + width * height) *
626
+                          c->planes + 4);
627
+
628
+    if (ret < 0) {
629
+        av_log(avctx, AV_LOG_ERROR,
630
+               "Error allocating the output packet, or the provided packet "
631
+               "was too small.\n");
632
+        return ret;
633
+    }
634
+
635
+    dst = pkt->data;
636
+
637
+    bytestream2_init_writer(&pb, dst, pkt->size);
638
+
639
+    av_fast_malloc(&c->slice_bits, &c->slice_bits_size,
640
+                   width * height + FF_INPUT_BUFFER_PADDING_SIZE);
641
+
642
+    if (!c->slice_bits) {
643
+        av_log(avctx, AV_LOG_ERROR, "Cannot allocate temporary buffer 2.\n");
644
+        return AVERROR(ENOMEM);
645
+    }
646
+
647
+    /* In case of RGB, mangle the planes to Ut Video's format */
648
+    if (avctx->pix_fmt == PIX_FMT_RGBA || avctx->pix_fmt == PIX_FMT_RGB24)
649
+        mangle_rgb_planes(pic->data[0], c->planes, pic->linesize[0], width,
650
+                          height);
651
+
652
+    /* Deal with the planes */
653
+    switch (avctx->pix_fmt) {
654
+    case PIX_FMT_RGB24:
655
+    case PIX_FMT_RGBA:
656
+        for (i = 0; i < c->planes; i++) {
657
+            ret = encode_plane(avctx, pic->data[0] + ff_ut_rgb_order[i],
658
+                               c->slice_buffer, c->planes, pic->linesize[0],
659
+                               width, height, &pb);
660
+
661
+            if (ret) {
662
+                av_log(avctx, AV_LOG_ERROR, "Error encoding plane %d.\n", i);
663
+                return ret;
664
+            }
665
+        }
666
+        break;
667
+    case PIX_FMT_YUV422P:
668
+        for (i = 0; i < c->planes; i++) {
669
+            ret = encode_plane(avctx, pic->data[i], c->slice_buffer, 1,
670
+                               pic->linesize[i], width >> !!i, height, &pb);
671
+
672
+            if (ret) {
673
+                av_log(avctx, AV_LOG_ERROR, "Error encoding plane %d.\n", i);
674
+                return ret;
675
+            }
676
+        }
677
+        break;
678
+    case PIX_FMT_YUV420P:
679
+        for (i = 0; i < c->planes; i++) {
680
+            ret = encode_plane(avctx, pic->data[i], c->slice_buffer, 1,
681
+                               pic->linesize[i], width >> !!i, height >> !!i,
682
+                               &pb);
683
+
684
+            if (ret) {
685
+                av_log(avctx, AV_LOG_ERROR, "Error encoding plane %d.\n", i);
686
+                return ret;
687
+            }
688
+        }
689
+        break;
690
+    default:
691
+        av_log(avctx, AV_LOG_ERROR, "Unknown pixel format: %d\n",
692
+               avctx->pix_fmt);
693
+        return AVERROR_INVALIDDATA;
694
+    }
695
+
696
+    /*
697
+     * Write frame information (LE 32bit unsigned)
698
+     * into the output packet.
699
+     * Contains the prediction method.
700
+     */
701
+    frame_info = c->frame_pred << 8;
702
+    bytestream2_put_le32(&pb, frame_info);
703
+
704
+    /*
705
+     * At least currently Ut Video is IDR only.
706
+     * Set flags accordingly.
707
+     */
708
+    avctx->coded_frame->reference = 0;
709
+    avctx->coded_frame->key_frame = 1;
710
+    avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
711
+
712
+    pkt->size   = bytestream2_tell_p(&pb);
713
+    pkt->flags |= AV_PKT_FLAG_KEY;
714
+
715
+    /* Packet should be done */
716
+    *got_packet = 1;
717
+
718
+    return 0;
719
+}
720
+
721
+AVCodec ff_utvideo_encoder = {
722
+    .name           = "utvideo",
723
+    .type           = AVMEDIA_TYPE_VIDEO,
724
+    .id             = CODEC_ID_UTVIDEO,
725
+    .priv_data_size = sizeof(UtvideoContext),
726
+    .init           = utvideo_encode_init,
727
+    .encode2        = utvideo_encode_frame,
728
+    .close          = utvideo_encode_close,
729
+    .pix_fmts       = (const enum PixelFormat[]) {
730
+                          PIX_FMT_RGB24, PIX_FMT_RGBA, PIX_FMT_YUV422P,
731
+                          PIX_FMT_YUV420P, PIX_FMT_NONE
732
+                      },
733
+    .long_name      = NULL_IF_CONFIG_SMALL("Ut Video"),
734
+};
... ...
@@ -27,7 +27,7 @@
27 27
  */
28 28
 
29 29
 #define LIBAVCODEC_VERSION_MAJOR 54
30
-#define LIBAVCODEC_VERSION_MINOR 53
30
+#define LIBAVCODEC_VERSION_MINOR 54
31 31
 #define LIBAVCODEC_VERSION_MICRO 100
32 32
 
33 33
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
... ...
@@ -24,3 +24,45 @@ fate-utvideo_yuv422_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_
24 24
 
25 25
 FATE_SAMPLES_AVCONV += $(FATE_UTVIDEO)
26 26
 fate-utvideo: $(FATE_UTVIDEO)
27
+
28
+fate-utvideoenc%: CMD = framemd5 -f image2 -vcodec pgmyuv -i $(TARGET_PATH)/tests/vsynth1/%02d.pgm -vcodec utvideo -f avi ${OPTS}
29
+fate-utvideoenc%: tests/vsynth1/00.pgm
30
+
31
+FATE_UTVIDEOENC += fate-utvideoenc_rgba_none
32
+fate-utvideoenc_rgba_none: OPTS = -pix_fmt rgba -pred 3
33
+
34
+FATE_UTVIDEOENC += fate-utvideoenc_rgba_left
35
+fate-utvideoenc_rgba_left: OPTS = -pix_fmt rgba -pred left
36
+
37
+FATE_UTVIDEOENC += fate-utvideoenc_rgba_median
38
+fate-utvideoenc_rgba_median: OPTS = -pix_fmt rgba -pred median
39
+
40
+FATE_UTVIDEOENC += fate-utvideoenc_rgb_none
41
+fate-utvideoenc_rgb_none: OPTS = -pix_fmt rgb24 -pred 3
42
+
43
+FATE_UTVIDEOENC += fate-utvideoenc_rgb_left
44
+fate-utvideoenc_rgb_left: OPTS = -pix_fmt rgb24 -pred left
45
+
46
+FATE_UTVIDEOENC += fate-utvideoenc_rgb_median
47
+fate-utvideoenc_rgb_median: OPTS = -pix_fmt rgb24 -pred median
48
+
49
+FATE_UTVIDEOENC += fate-utvideoenc_yuv420_none
50
+fate-utvideoenc_yuv420_none: OPTS = -pix_fmt yuv420p -pred 3
51
+
52
+FATE_UTVIDEOENC += fate-utvideoenc_yuv420_left
53
+fate-utvideoenc_yuv420_left: OPTS = -pix_fmt yuv420p -pred left
54
+
55
+FATE_UTVIDEOENC += fate-utvideoenc_yuv420_median
56
+fate-utvideoenc_yuv420_median: OPTS = -pix_fmt yuv420p -pred median
57
+
58
+FATE_UTVIDEOENC += fate-utvideoenc_yuv422_none
59
+fate-utvideoenc_yuv422_none: OPTS = -pix_fmt yuv422p -pred 3
60
+
61
+FATE_UTVIDEOENC += fate-utvideoenc_yuv422_left
62
+fate-utvideoenc_yuv422_left: OPTS = -pix_fmt yuv422p -pred left
63
+
64
+FATE_UTVIDEOENC += fate-utvideoenc_yuv422_median
65
+fate-utvideoenc_yuv422_median: OPTS = -pix_fmt yuv422p -pred median
66
+
67
+FATE_AVCONV += $(FATE_UTVIDEOENC)
68
+fate-utvideoenc: $(FATE_UTVIDEOENC)
27 69
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,   168240, 116019db2e5350536a51e8d7a609c2b9
2
+0,          1,          1,        1,   167868, 0700499b0f8b9b09601b969caa2c2efd
3
+0,          2,          2,        1,   169216, 890e18b99ccca7601d1f68efd19e906b
4
+0,          3,          3,        1,   168156, b9bf194312e492f1cf3ee624e08bb30a
5
+0,          4,          4,        1,   167680, 53383c3fc77f6e35b58525ab2440fe85
6
+0,          5,          5,        1,   168516, 8c7150e8246b8c9a2f1985a0f80d68a7
7
+0,          6,          6,        1,   167712, d46508dad0cf7cd3f7e1aca50a16537b
8
+0,          7,          7,        1,   168172, 1b2643b67d0dddc04e65ff1e751b11ba
9
+0,          8,          8,        1,   167388, 0104ea69082aac2190a96bbe7971eac7
10
+0,          9,          9,        1,   168300, 6768cdc8383c4abdee474edddaab452b
11
+0,         10,         10,        1,   167960, ef3e8ed5dfc2dbdae9ac818b0c9964f7
12
+0,         11,         11,        1,   168024, 98d0fd2d82c43cabc4be25a304aa3e3a
13
+0,         12,         12,        1,   166460, db5cf5154a710972d2f2468cf1e5694c
14
+0,         13,         13,        1,   167284, 7caf2ab0d10c138a06846680145e18de
15
+0,         14,         14,        1,   168788, f7c071cc22bc822cd780df2ae761c98f
16
+0,         15,         15,        1,   168312, defc3b454e98c362e155e63765e5e7fe
17
+0,         16,         16,        1,   167888, 37713f91a4d342fab759a390eb0e5858
18
+0,         17,         17,        1,   167428, 56c9e1e039ec4ca3bad163c5f7356398
19
+0,         18,         18,        1,   166792, a67cc85635ff5c706c37273c8f6ace48
20
+0,         19,         19,        1,   167220, 797aa3302fa9b865e28ac517beff2fe7
21
+0,         20,         20,        1,   166612, 160d49cb2b549972ed15165221392fe8
22
+0,         21,         21,        1,   166676, fcd0bdcae5b009f34074b56ab566d92f
23
+0,         22,         22,        1,   167792, cdc6496a8ca7e41c8f23e56a2f995a07
24
+0,         23,         23,        1,   168040, 0c56322c9cde9e76f3a6a732fdb861bc
25
+0,         24,         24,        1,   168656, ed627dd70d9f1335c844ee7a62db29a0
26
+0,         25,         25,        1,   168456, b3282f8f1792206c4fed9101213032da
27
+0,         26,         26,        1,   168120, 43b3094cfa9e5985fa447bf25e0a8bcc
28
+0,         27,         27,        1,   167480, c1a58fd31844b0fa99a323921c4c3269
29
+0,         28,         28,        1,   165320, b0f33fddd18a2a74177721e8d1cb13e3
30
+0,         29,         29,        1,   165104, 2413e9a95b02a64629cd7ce6d4de799b
31
+0,         30,         30,        1,   166604, b17539db5a3f394632f9afadcaeaca38
32
+0,         31,         31,        1,   167500, 178dd023eee970d729089e0172659c27
33
+0,         32,         32,        1,   167264, ff5afb31aff707ded3c472044f685ddc
34
+0,         33,         33,        1,   169008, 99edb6139d09310a3fc686e76f982ae9
35
+0,         34,         34,        1,   168108, 66a41bba03235e2a501520198a415a7a
36
+0,         35,         35,        1,   168016, 028d708a5fcd6e708a3ae471052f5f00
37
+0,         36,         36,        1,   166984, 585c78a2e01493581dfbb395db7be582
38
+0,         37,         37,        1,   167388, 4ae14a7cb1016a19ff3bfc067797e774
39
+0,         38,         38,        1,   165388, fa0f0cc6c5efcdea4c15033ff104aee1
40
+0,         39,         39,        1,   165524, 868c476a1a007be410b05ba24f9d3efc
41
+0,         40,         40,        1,   165784, 4bfbcdcd82bb04c9aaf0a8f192b67d52
42
+0,         41,         41,        1,   166404, 09ff4d32a36dd63b035e2b430b790687
43
+0,         42,         42,        1,   166872, 3ef565aac161a5d9eb91b74496669a68
44
+0,         43,         43,        1,   166772, 1d7e9b7115408887a564bff985e92da3
45
+0,         44,         44,        1,   166588, 48e3e7c6b5f98e206f3837ef163d26ab
46
+0,         45,         45,        1,   164396, ff338e650a3475185f03842d7a691680
47
+0,         46,         46,        1,   163504, 21cba98fb1c03ffc149e582a4e70404c
48
+0,         47,         47,        1,   164248, f92c93800bff6486f09e170bead7f470
49
+0,         48,         48,        1,   164444, dc04c0e3b86bf42363046a2a56c76c82
50
+0,         49,         49,        1,   163844, 48007251ab2dd2d0228ac9095b190718
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,   149240, 7a580af923f79d740391481f44080fb8
2
+0,          1,          1,        1,   148992, 5083a5e7c7ba433a157441aeb93cec33
3
+0,          2,          2,        1,   150648, 05657dc59cf5f9c0b1eb4ec875000cb8
4
+0,          3,          3,        1,   149716, 8a7742db11d0d35f5b575423099b5bd7
5
+0,          4,          4,        1,   149272, f437090e4782d65f65b06eb1d47c9aa0
6
+0,          5,          5,        1,   150044, d8d00cf8ae06b6ca8d30a89e7c9666f8
7
+0,          6,          6,        1,   149532, 4abc60d6ea18bffe28151e0f4549aa95
8
+0,          7,          7,        1,   149316, a12ddb15795b63b7bf1ce8a66fa1815e
9
+0,          8,          8,        1,   149516, 3752007da5c2c1963314d35e2d580783
10
+0,          9,          9,        1,   149520, 419534098fa161671528cc77e307cf79
11
+0,         10,         10,        1,   149444, 383a3b79634d6aeecfc7eb0a5a5c9b7b
12
+0,         11,         11,        1,   149164, 5a5901882e8b9aa5a6300b7d786c2b16
13
+0,         12,         12,        1,   147996, fe9fb5d4cd97c7ad7f11c87b9f75b0a9
14
+0,         13,         13,        1,   149152, 83e0c36884b91263d2d235fab9a3b3e7
15
+0,         14,         14,        1,   149640, 366bdff8c41cb2f5a90810f719661bcc
16
+0,         15,         15,        1,   149600, e72f5f3e18b7a98443094d6e34d5286c
17
+0,         16,         16,        1,   148916, a94a62b5647365d13081a6c3398b127d
18
+0,         17,         17,        1,   149520, fdbc007fb7443b5bfd388d273413d20b
19
+0,         18,         18,        1,   148468, bc4c7b5324fe5658c15e8540dbc7130a
20
+0,         19,         19,        1,   148388, e9caa4e18c0bffb07039427d0a98798d
21
+0,         20,         20,        1,   147772, 3eb6bde758e13296e61911d6f574a49f
22
+0,         21,         21,        1,   148128, 64cc6d5c819d10e725c30fe69ef040ae
23
+0,         22,         22,        1,   148200, d5b8a93061a70e55b8b751d3c1a4ac5c
24
+0,         23,         23,        1,   149312, ef912e5a3640992dd2948037535b0341
25
+0,         24,         24,        1,   149244, 8df2d35148b9d934f79566cf6371af89
26
+0,         25,         25,        1,   149040, 27f1c2a77ae36fa23bd36ecf4df67fb8
27
+0,         26,         26,        1,   149020, 995370b34bd96cd5004ba5c4d449fd3f
28
+0,         27,         27,        1,   148308, b0a7cd8ee1db8fd0d1324450386de11c
29
+0,         28,         28,        1,   148016, 6d211a6b4e790e9c46757053782e6713
30
+0,         29,         29,        1,   147324, 730619aa336408d3d5694eb8e3ea2d71
31
+0,         30,         30,        1,   148104, 34c53deccc3be58bdc4cd9c0e3f19918
32
+0,         31,         31,        1,   149004, 710a4724ffac1457b8437f94c8e97b8b
33
+0,         32,         32,        1,   148452, be7c947371e8a434233eb7eaeef95c8d
34
+0,         33,         33,        1,   149076, 694fc1872869e16aaf176473f2094c52
35
+0,         34,         34,        1,   148952, f35b66ac7f42cbaf849a41536306cb85
36
+0,         35,         35,        1,   149012, 3f5d904d5a8b3d169f8c87f21b712ef6
37
+0,         36,         36,        1,   148464, 363df43764cb27a2d2a16e9246bf2c76
38
+0,         37,         37,        1,   148968, 2e08d0c96fdc99b091ad20c1aed208b6
39
+0,         38,         38,        1,   147744, 15412763aec2d25f9a23de4fa3cf60dc
40
+0,         39,         39,        1,   148124, f76679ddeaf18af0ef9563c7b7d86636
41
+0,         40,         40,        1,   147800, 3195234ce043d883252fbe7a01dbe86c
42
+0,         41,         41,        1,   148528, dd4b892d143ebd326452f5504d23d794
43
+0,         42,         42,        1,   147752, eb8c442bcc34a8a38e5101c1e00615c9
44
+0,         43,         43,        1,   147832, d834c5e4e0a1ab0a31c13eb7ac40fbc1
45
+0,         44,         44,        1,   148000, 9761129bd0122132d2154a56c2ceec62
46
+0,         45,         45,        1,   147344, 9b76ab62f501f0714076d9f94bb4374a
47
+0,         46,         46,        1,   146744, 184298b63c13730635f347eecdb506dd
48
+0,         47,         47,        1,   145980, ef4f03747a2a76016fc66df7a32a57b8
49
+0,         48,         48,        1,   146228, e2618fe6c95722d63cbce7ae5021ed16
50
+0,         49,         49,        1,   145756, 9f9187896e840d163ad955c1a37756fe
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,   302912, d2964d8013869388b92b546f105a7541
2
+0,          1,          1,        1,   302880, a06917f2dd5905034b78d80b4702ade9
3
+0,          2,          2,        1,   302740, b8af48307700460aed09e61ff43297d8
4
+0,          3,          3,        1,   302784, d8bec7604718716daf04814fb889064d
5
+0,          4,          4,        1,   302824, d1f2f9055165254003868dcde305c423
6
+0,          5,          5,        1,   302796, c18722063e9cf19ee8cdcb69266c722a
7
+0,          6,          6,        1,   302796, cf00264e1e5f43890b5be16dc2aa0a75
8
+0,          7,          7,        1,   302860, d9b305b43c36ed06fa347e04daa26772
9
+0,          8,          8,        1,   302892, f69c6b0c027ac5f3d7e9e56609b36559
10
+0,          9,          9,        1,   302896, f81634542eb893a8150edfd91168d91e
11
+0,         10,         10,        1,   302776, 91509d83dc2c9308d9e29ed2b3c49b44
12
+0,         11,         11,        1,   302792, 7109c49d3c65cdc9afd8f0f3917dc36f
13
+0,         12,         12,        1,   302908, db307334fe92965b4500fb7f67ce4ffd
14
+0,         13,         13,        1,   302784, d18a2017145423cd7f5880cb44e34c4b
15
+0,         14,         14,        1,   302668, 1b2362477600ad99fdcca3bc2167be9e
16
+0,         15,         15,        1,   302696, cf38dc4d728a291f6206ee0dc4dec00c
17
+0,         16,         16,        1,   302788, d1d7743274cef21e137d9aa512ca1edc
18
+0,         17,         17,        1,   302840, 89d46fec602e9ebe4cae55961da71f4c
19
+0,         18,         18,        1,   302928, 46e55d9667f21cd14184bad89de32971
20
+0,         19,         19,        1,   302984, 8f25e47871bace8b39a2709f49cef11d
21
+0,         20,         20,        1,   302936, 6dff8cb7bb9fe294fcc79a713a983fb1
22
+0,         21,         21,        1,   302980, 26191c78d0e2901404776791397c4f83
23
+0,         22,         22,        1,   302996, 9f414291a8ea4537ac991675034db64b
24
+0,         23,         23,        1,   302912, d274f2535d109f9b8601f175fcd858cb
25
+0,         24,         24,        1,   302964, 1d70b563670a33267ae2f6644e1c8e95
26
+0,         25,         25,        1,   303028, 9d14b635403c286ca9d60fa700e30888
27
+0,         26,         26,        1,   302988, 8a3a45138a29d38ac70f1fb9f3147c1a
28
+0,         27,         27,        1,   303056, 2378954ac18fb9b01feb937b76c08a55
29
+0,         28,         28,        1,   302996, 675d4b6b235c374da450cf00e240185b
30
+0,         29,         29,        1,   303072, 77a7205787f1e7cca59dd239f6c0591a
31
+0,         30,         30,        1,   303084, 551c987cb8a574f999577a9e630a5df4
32
+0,         31,         31,        1,   303024, 73451fc3927d329fe407def293b5467d
33
+0,         32,         32,        1,   302972, 03c69d8fdebeb8c3ba31e99142e68144
34
+0,         33,         33,        1,   302904, 5949ab8ff47e72933e4668cf46a76d95
35
+0,         34,         34,        1,   302828, a9197dd2e0496fce0e8de9950466dc6e
36
+0,         35,         35,        1,   302972, 9c8c24df0e0196453f7db3182561879a
37
+0,         36,         36,        1,   303052, 849f0f23b6d2e6af74bff2a45b5d8a63
38
+0,         37,         37,        1,   303028, 16acb86039a38dbfac48e2a04a48d9ea
39
+0,         38,         38,        1,   303088, eb5336a28c2b99dd6e4e9f90a5fb5d96
40
+0,         39,         39,        1,   303048, 5a637b3e6b7b3c4b7aa58f4ffd8c5e29
41
+0,         40,         40,        1,   303120, f31ef0195ba9c70c5e6dc84ed4e9928a
42
+0,         41,         41,        1,   303056, 3f73ef08146c697fcec3aa16805aac92
43
+0,         42,         42,        1,   303092, 89e2ac83290eef0f589d67e3adad2d30
44
+0,         43,         43,        1,   303140, cde3a48e309c3ca6a3843d2d5aaade79
45
+0,         44,         44,        1,   303116, 5456c19ccc38237a09986c962350ef60
46
+0,         45,         45,        1,   303156, 419e78d98541dfd1a9d29a04cf985cf9
47
+0,         46,         46,        1,   303148, 9b7a7559370798cfae2ccb1731cd89c0
48
+0,         47,         47,        1,   303196, d9590fdf48bc3be1a4956fb5da3584dd
49
+0,         48,         48,        1,   303256, e6c90aa1753fc7d6b04cfc7e92b53af1
50
+0,         49,         49,        1,   303228, 941f240dc62777aba1792f36b70e1f48
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,   181176, da7b045edf219bced5b152791b10c87f
2
+0,          1,          1,        1,   180804, b06bd1fe1a00a21efe0df3eabb909c9f
3
+0,          2,          2,        1,   182152, 75e86b780b70de0510be70278b8005d7
4
+0,          3,          3,        1,   181092, 70beeae6c87daac962fa67a5ef72f250
5
+0,          4,          4,        1,   180616, b0b8fda4db6828360d67556c8d90ea4f
6
+0,          5,          5,        1,   181452, 434daeeac59b17aaa3717ae9e5e5a3d7
7
+0,          6,          6,        1,   180648, c70e591fc050a7d8b88efed67a78c119
8
+0,          7,          7,        1,   181108, a84cd2efe629a710bf8f2118686ec8e3
9
+0,          8,          8,        1,   180324, 9e1559a606140bbad9d268d1453e26f8
10
+0,          9,          9,        1,   181236, 8daa9a96816335c58b88223d8c54f4a0
11
+0,         10,         10,        1,   180896, 5566aaf2bfb0a5f8601abb55496b0373
12
+0,         11,         11,        1,   180960, 67eb48372ea714bfb6b962029fa67328
13
+0,         12,         12,        1,   179396, 49bc20f86bd85dddea8085238ca3221a
14
+0,         13,         13,        1,   180220, aa783168cf3753dcc68d90155505081e
15
+0,         14,         14,        1,   181724, cef5a732a3308f7803d36d06e22f2490
16
+0,         15,         15,        1,   181248, a5bd0e1d9ea5130b35d084929fcb3f1d
17
+0,         16,         16,        1,   180824, 7ea8991f802ed2db13f12478b8445d96
18
+0,         17,         17,        1,   180364, f9065f42a52f4485347dfe667101bf3c
19
+0,         18,         18,        1,   179728, e88bf6901809ff965b76dad488a6dced
20
+0,         19,         19,        1,   180156, f054de2239e20e776663de033608e0c0
21
+0,         20,         20,        1,   179548, a328018fc852bb3f8a0a64b30d051d02
22
+0,         21,         21,        1,   179612, b865fd5fcbe5b6d7ca3e111048ecc3b2
23
+0,         22,         22,        1,   180728, 8a0a4c6933f8b6323426272fb64722de
24
+0,         23,         23,        1,   180976, c4a788e3c7b81070013934df31299208
25
+0,         24,         24,        1,   181592, 9fab2972676d67f86ec7b319ffb78e59
26
+0,         25,         25,        1,   181392, 7d762db7b2651f259d32a882a499c156
27
+0,         26,         26,        1,   181056, 1620dc2804ca0d9a48097db7f91bf6bc
28
+0,         27,         27,        1,   180416, 62dcb666136de841db99096e7c5fadb0
29
+0,         28,         28,        1,   178256, 27b01db3cf22c2a982b73861d3eb6add
30
+0,         29,         29,        1,   178040, ef78cd2d2091c03e90ab3feae0b2adcf
31
+0,         30,         30,        1,   179540, f026cc6577c8fd8ec685a45b88b31b62
32
+0,         31,         31,        1,   180436, af692865fb34b1418b756e794a9c1c3b
33
+0,         32,         32,        1,   180200, e65b58ef8e13e67a4c0c45086d299818
34
+0,         33,         33,        1,   181944, 6eae7d0bf76bf06da71186671901e698
35
+0,         34,         34,        1,   181044, 740dadcf236ca0af236c09d29b312940
36
+0,         35,         35,        1,   180952, 5badcbb17e97be7b54fa1e9e49f677ed
37
+0,         36,         36,        1,   179920, 8827a40f0c1e0b04f6085a7146955e2f
38
+0,         37,         37,        1,   180324, 9d42e2532a48c4972cb71ac541c3ea57
39
+0,         38,         38,        1,   178324, 31db217d6e574bf83279288f0b36a628
40
+0,         39,         39,        1,   178460, 8fdc5e7be532e05ddff2e10064113882
41
+0,         40,         40,        1,   178720, 28fdeaf450edd61a5a0f0dbc75aefe99
42
+0,         41,         41,        1,   179340, 2988ec8ce759703ef975c55a22ed3cd4
43
+0,         42,         42,        1,   179808, e27ed3b49dd8c3ef98e3526d9d691b65
44
+0,         43,         43,        1,   179708, 14415299804aa63cb7b262af6869a371
45
+0,         44,         44,        1,   179524, bb75948719d5af9e48543fa0c932f746
46
+0,         45,         45,        1,   177332, b0984e1db78dcc3d44a010444d87cf78
47
+0,         46,         46,        1,   176440, bd57710508310a95ad41cd056b715e12
48
+0,         47,         47,        1,   177184, f81326c0bce9ca0efe7edae7659d0e8b
49
+0,         48,         48,        1,   177380, edf7f2fd74be9992edda43ea87e524b7
50
+0,         49,         49,        1,   176780, 8902e18670264eec47294ffde934fcb9
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,   162176, 56d4b5bfb2f08741c34ebb18dc5baf13
2
+0,          1,          1,        1,   161928, ac877a6e1afeb6813e5b79110dd5b847
3
+0,          2,          2,        1,   163584, 0559b537142474bdebc6fa2af9cca544
4
+0,          3,          3,        1,   162652, 3c36b59df75490a091035dfd6ebcbe01
5
+0,          4,          4,        1,   162208, d411c2aacdbdb828dae6bcd522a8b5d3
6
+0,          5,          5,        1,   162980, 658724afc8be5ceff75cb308a99267cb
7
+0,          6,          6,        1,   162468, 9dcb4ed413892aae0f3490d9baca4ddd
8
+0,          7,          7,        1,   162252, 2bc2f2fa252036ddf8241a0f1956ea8c
9
+0,          8,          8,        1,   162452, 4d41518201cb1295aad71df4fb1fedb9
10
+0,          9,          9,        1,   162456, 6811e63d77b8e842c13fba38afd65017
11
+0,         10,         10,        1,   162380, 710437537764369906cdf1858aea9e70
12
+0,         11,         11,        1,   162100, 60d1d475a78e1222a3f116db88d6dc8c
13
+0,         12,         12,        1,   160932, d9b8588ab35792e70c51354faea611cc
14
+0,         13,         13,        1,   162088, 3d88ee1f80ae7877afc5c142758a9346
15
+0,         14,         14,        1,   162576, e3357aea30458fb86c05d2a9cb5f3c8e
16
+0,         15,         15,        1,   162536, 117a4eae0ed02bb6ae32d23e591a3ae4
17
+0,         16,         16,        1,   161852, fa14269ae83e546dbbfa40f1aaf82bc8
18
+0,         17,         17,        1,   162456, 8c40b4e6507f7af04b1cae3848d6cfcc
19
+0,         18,         18,        1,   161404, 7211261a35fef4fae67b160eac1eb259
20
+0,         19,         19,        1,   161324, cd634211ef67871bd6860ec005ac0118
21
+0,         20,         20,        1,   160708, 8b65a6f7459670dd8ba5fb01b1344065
22
+0,         21,         21,        1,   161064, 85203e969ec6e8081c7cea4bb65de1cf
23
+0,         22,         22,        1,   161136, 296f3621d6b7f630768e5d7437629c42
24
+0,         23,         23,        1,   162248, ce43a1896160c289bbe5d56dafeeebc7
25
+0,         24,         24,        1,   162180, 0411ba4d9bdb8ea145a38214cab93aff
26
+0,         25,         25,        1,   161976, e6bb765a977e81afff62aab1a1a2ca2f
27
+0,         26,         26,        1,   161956, 8528eee65853c2e7298eb9e3c6ca9fa2
28
+0,         27,         27,        1,   161244, 332fa087a6ceceb610f3895ca5d81e4c
29
+0,         28,         28,        1,   160952, 4f3b0b92e63bdd0fd3f102e968e6f432
30
+0,         29,         29,        1,   160260, dd2de3bce5b80161547e33a748ce6b6a
31
+0,         30,         30,        1,   161040, 1306d4826a20d22810f19579e93d0f63
32
+0,         31,         31,        1,   161940, 1724203fd332573e778624d61c3251b0
33
+0,         32,         32,        1,   161388, da336f3865edf7e54ae14ca6d01de859
34
+0,         33,         33,        1,   162012, 2a04855ce96edec00e1860722e0f23a2
35
+0,         34,         34,        1,   161888, 4e525c0ff2ddfe1dd74f655037c52f39
36
+0,         35,         35,        1,   161948, 4a4723b617c8b142a3d9a1b30bf0c99c
37
+0,         36,         36,        1,   161400, a8250f7d6da6e7eb91c5b042679737e2
38
+0,         37,         37,        1,   161904, 15f4274bbaaa517865d0e212a03ee5fa
39
+0,         38,         38,        1,   160680, f7ee2864aa4c1c555fe0176b1b886294
40
+0,         39,         39,        1,   161060, 0f9eb1b9a798fe070d5d5b1587106e12
41
+0,         40,         40,        1,   160736, 988f20899af28deb7187cb89268fac7a
42
+0,         41,         41,        1,   161464, c279f41499a76c4548200859a3990d8b
43
+0,         42,         42,        1,   160688, 6d730f0c2a195845050af864af9f6bf1
44
+0,         43,         43,        1,   160768, ae1a3ad132c3ad269ca156d4948df74e
45
+0,         44,         44,        1,   160936, 32d6264955012575fad51675ef40b72b
46
+0,         45,         45,        1,   160280, aabff2df269f802b05d07c2bdcd7deae
47
+0,         46,         46,        1,   159680, 57f2bf1bca662fd2652dc9a04b883295
48
+0,         47,         47,        1,   158916, 5dfd2f6a29c73972d7f7431bc4e7f099
49
+0,         48,         48,        1,   159164, 1eeee6293474fc26cefad5cb2174d088
50
+0,         49,         49,        1,   158692, 56cee1ab036ccdfc9de75475d31fc221
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,   303172, abd9a3e31bc4b3c4103eb95e21dd74e6
2
+0,          1,          1,        1,   303140, 29e62ca01ba6520da8c35442ddfa7bec
3
+0,          2,          2,        1,   303000, 03bc2de7e91ef1e929c4032a1469465f
4
+0,          3,          3,        1,   303044, d7316b5074897ceb5861de482006ec07
5
+0,          4,          4,        1,   303084, 8a29268305ef904301658ec2664241c7
6
+0,          5,          5,        1,   303056, 975dd2ac1e4b6dcd2a909889bac98604
7
+0,          6,          6,        1,   303056, b3ccb6e7a35e44616dc246b747edcb23
8
+0,          7,          7,        1,   303120, 593e11ab37e42cf285f9a13bf671b60e
9
+0,          8,          8,        1,   303152, 542aeb683f988532116f29fb3cc0a41c
10
+0,          9,          9,        1,   303156, f42a3e67219288391cdd131c12c2da87
11
+0,         10,         10,        1,   303036, a37840b759223d8d7e18902fb6073247
12
+0,         11,         11,        1,   303052, bbb27328a3d8949923daaa0b5ed28b3d
13
+0,         12,         12,        1,   303168, 522b1e74feb75bd7c4a71e5d85a3fda2
14
+0,         13,         13,        1,   303044, 961add62cf8853b41d281164344716be
15
+0,         14,         14,        1,   302928, 01b5005db00eb6dde2d8231e797ab40d
16
+0,         15,         15,        1,   302956, 6d448f007b545f370d2dffff0fb57e00
17
+0,         16,         16,        1,   303048, 942ec6895f66b5f08ee6cdc5604641ad
18
+0,         17,         17,        1,   303100, d83c9630bedd853cac07e26b6f99f77d
19
+0,         18,         18,        1,   303188, 6b9a7a78b71e64ed9a6c33a844387db4
20
+0,         19,         19,        1,   303244, bfa627071fd9be90f752d44a933aa89b
21
+0,         20,         20,        1,   303196, b1ec566949ac10d73bc16b3025cbeae4
22
+0,         21,         21,        1,   303240, d63e8b323bcff8a00cf7cbe99dc35a7f
23
+0,         22,         22,        1,   303256, 75fd6c994639c9e135d5030f31d8b21d
24
+0,         23,         23,        1,   303172, ac0e8390b59c639daba597c1b61fd6cb
25
+0,         24,         24,        1,   303224, 507bbfb7401ad63ddf318ef152615873
26
+0,         25,         25,        1,   303288, 5f223867377e295e954407632ccddcbb
27
+0,         26,         26,        1,   303248, 14c1be3751f3e05894e286e870f9d8ce
28
+0,         27,         27,        1,   303316, 9d924c4c4603ac5d9c2659f13cbcf928
29
+0,         28,         28,        1,   303256, c05f5d99182899aefb57e914e336e0ba
30
+0,         29,         29,        1,   303332, 41a65ae85522875f582de0487b0afab0
31
+0,         30,         30,        1,   303344, 749dc30e61b9d5a179c3513b5e6ca052
32
+0,         31,         31,        1,   303284, 958be38d742fb0c5fce50a50bcbe91e2
33
+0,         32,         32,        1,   303232, df178e2c1819c832d9a468e22f0d6bed
34
+0,         33,         33,        1,   303164, db6061112448b9b29c84e9c045561dde
35
+0,         34,         34,        1,   303088, c3e0f93fd01155c0d4671a24ba82e4c3
36
+0,         35,         35,        1,   303232, 5b2254a77fbbd0066fcacf1593c92f8f
37
+0,         36,         36,        1,   303312, ed9c65e2d573a7491b964d8cd160df9c
38
+0,         37,         37,        1,   303288, 9cf8fa422d4fc4e458cab411614c4e47
39
+0,         38,         38,        1,   303348, 9e00fe9b2003d28d97c3c766d6eaf6b6
40
+0,         39,         39,        1,   303308, 4abeab3a986bcaa2cdc6a3898fb7aea0
41
+0,         40,         40,        1,   303380, 4fefa9101b72a398a411348a5ac0f398
42
+0,         41,         41,        1,   303316, cbc28418d47be7ac8f7d3922cfd382a9
43
+0,         42,         42,        1,   303352, e365776166badae59207351c5302c4ee
44
+0,         43,         43,        1,   303400, 7d207922a9ff4a64c9fc08d32d53541e
45
+0,         44,         44,        1,   303376, fa84592162246745c77a528301f30532
46
+0,         45,         45,        1,   303416, 29013e5e5ef8a0f5de63f8946386eeed
47
+0,         46,         46,        1,   303408, e56901bf9b5559ba91105fe6f388ea41
48
+0,         47,         47,        1,   303456, 12958be8a6f6beadd9b94db6d4295b6c
49
+0,         48,         48,        1,   303516, bf8175a090ee88158f26a3eaff0ae79c
50
+0,         49,         49,        1,   303488, 964be87620c228652924bfd68faa25d9
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,    59820, db20782033a18141a292da3f1a1c1782
2
+0,          1,          1,        1,    60040, c2f90e3de0c305ab8aac2530e3cd0e41
3
+0,          2,          2,        1,    61072, 97b0337a4185ef9d8e2533649860ad9a
4
+0,          3,          3,        1,    59680, 876d24900ef83e7958c9a1e54c82f330
5
+0,          4,          4,        1,    58620, 7732915d2a50f38951d46e36dcd49236
6
+0,          5,          5,        1,    60276, 343ef35f003da592451cab1ffbf158aa
7
+0,          6,          6,        1,    60504, 6823f1ef02f27719bb602911aa8caab5
8
+0,          7,          7,        1,    59916, 5f9ce306dc27d84d1af6d378b385c715
9
+0,          8,          8,        1,    60104, bac83cb16811318ad602ff391fdc94c7
10
+0,          9,          9,        1,    60352, bbd85ee4ccaad1b30b74d9edd1916291
11
+0,         10,         10,        1,    60324, 950230449f907a0615139fe2e1033a47
12
+0,         11,         11,        1,    60312, 8ba4355ecf4d738524bd331b98e87af7
13
+0,         12,         12,        1,    59196, 1efcac9ee097b0e027cc4e9d9d61037c
14
+0,         13,         13,        1,    59684, 9815ca06f7a99fb648f8f2856441517f
15
+0,         14,         14,        1,    61028, e4d684a1106cf78cd19ed87bd7ff7bab
16
+0,         15,         15,        1,    61116, 60f20615fb500d1baf9b1d07aa0f62f4
17
+0,         16,         16,        1,    60096, 35bc9f5e7f8a34c4221840f556d99df8
18
+0,         17,         17,        1,    59900, c8f756e698eeff9b55d83319f96865ce
19
+0,         18,         18,        1,    59424, 3ac4bb99ded21039ec65b1959c27347e
20
+0,         19,         19,        1,    59100, ff576160ae91bd8466f6d33b5750cce9
21
+0,         20,         20,        1,    58768, 86ed0e0c1a0f23ee6f3beabd0cc5691d
22
+0,         21,         21,        1,    58604, c0674d3c5973ff503e736a984326b42d
23
+0,         22,         22,        1,    58984, ec47ecc40d18b5e5216572db7aca4399
24
+0,         23,         23,        1,    59724, 119c234e452012e4475d09698e859dbc
25
+0,         24,         24,        1,    60688, 6720b72beefcdaa5355a68b763b8c7ca
26
+0,         25,         25,        1,    59768, 2dc4e643f97f9123842836df17a165ce
27
+0,         26,         26,        1,    59116, 3660544cdd5c0424578aa2cf6edc93d5
28
+0,         27,         27,        1,    58776, 465d3d35793fd088644746fc2b941a3c
29
+0,         28,         28,        1,    56948, c452face29e359c118cb206b8a99330e
30
+0,         29,         29,        1,    56984, d8c15040ca27d8cbf5e0f4a9464de289
31
+0,         30,         30,        1,    58172, 930839ebaa292a9f3348da3ba58a8c1f
32
+0,         31,         31,        1,    59008, bb9d062bf494bc1d4a0056dd8790bb25
33
+0,         32,         32,        1,    59568, e3f0f969063c614f7fefbc0269c4c029
34
+0,         33,         33,        1,    61276, f2e98cab7a320a9748c943910d0eda1d
35
+0,         34,         34,        1,    60056, 6875b10061cb1c303a18f186d65247ed
36
+0,         35,         35,        1,    59272, ad3f45ed83560479904c6395f857c95b
37
+0,         36,         36,        1,    58592, eca4f8faa40a737f56f6e492d98845c1
38
+0,         37,         37,        1,    58764, fa68a3723ba5b965532768b41dc73b60
39
+0,         38,         38,        1,    58300, 741a2ae174d721e3f3c0d13e54132095
40
+0,         39,         39,        1,    58260, 3546ddc2620a4c9fa415c0252a5eb9a4
41
+0,         40,         40,        1,    57324, f11c6053a5448e9b4830ef4fe833e5de
42
+0,         41,         41,        1,    58988, 6ae00a0b48f5ecdafcfd958684a21bcb
43
+0,         42,         42,        1,    58828, 6239ee212ca7decde8ad4cb304f0f786
44
+0,         43,         43,        1,    58736, 279226528c101b94f4e458151e7f5383
45
+0,         44,         44,        1,    58160, 2e8427fd4f232a7798488dfbbbc93db0
46
+0,         45,         45,        1,    56796, fab0929df1bfa6d4f09d962defaa58e7
47
+0,         46,         46,        1,    55932, 71da16ee5673bdbc5b69f01da23725d3
48
+0,         47,         47,        1,    56368, 20a7d362adb0f920f792106d034630fe
49
+0,         48,         48,        1,    56424, ba44ca273348efefafb5e73df81e26e9
50
+0,         49,         49,        1,    55508, e6df309da7552a2676e82f1f4644a694
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,    62916, e8443c85edaa534618869eb50a54d8ee
2
+0,          1,          1,        1,    62856, 0b9504992a19ffbe5a1f12d823a15f0f
3
+0,          2,          2,        1,    64112, 609f1d6cfd57fc87565f3078c48c06f0
4
+0,          3,          3,        1,    62748, e57217dc1de96a6c9494ceea126e71a1
5
+0,          4,          4,        1,    61696, d3bba27c92b9cc4503274dffdcb7de3e
6
+0,          5,          5,        1,    63320, f84c26950c6aa2a29af17a923723ea18
7
+0,          6,          6,        1,    63556, 2f2b60577616ea085b77b0154b8eb935
8
+0,          7,          7,        1,    62812, c2cd5836f6ea3bcbf5affdfb623e1aab
9
+0,          8,          8,        1,    63204, 010dd4c0a5681507f96502abfe1a8b55
10
+0,          9,          9,        1,    63516, 69b945a7afd1efad7c473c1113f66c5f
11
+0,         10,         10,        1,    63356, 05c2acb737b75e96d757fbd4270d9109
12
+0,         11,         11,        1,    63364, f63b1184912c6f25fce3f5fd166fc90c
13
+0,         12,         12,        1,    62416, 3bb6161920400a4535188103e5ee9b64
14
+0,         13,         13,        1,    62980, 6482cec5429083c3759588a2d81c2dc8
15
+0,         14,         14,        1,    63964, 8567a41bc0e6a6acef2c5b9991a370da
16
+0,         15,         15,        1,    64044, a80fc046d821bb7d3b1d0732b5528a0d
17
+0,         16,         16,        1,    62976, 623d43978c0255d7ad94dbbb08911c74
18
+0,         17,         17,        1,    63084, 1459781283da8935125776f157db1fc9
19
+0,         18,         18,        1,    62436, e9c751f7690590affd7e85775fe21fca
20
+0,         19,         19,        1,    62168, 948822a3568448032d2d0742031c6a33
21
+0,         20,         20,        1,    61724, 724e7f5384f8a9c7a03cba49abc1bef1
22
+0,         21,         21,        1,    61736, 3b0a781f947af472439852fd70d7e235
23
+0,         22,         22,        1,    62000, 0e41647e42cecc7644a42e3d96f34cfb
24
+0,         23,         23,        1,    62848, 1fc1813e6b44d573f3327533c161a262
25
+0,         24,         24,        1,    63504, 96c17ee6abc37fa6db608716d02b8ac7
26
+0,         25,         25,        1,    62732, 2cbeaaddd16d4686a3abdfaba7309107
27
+0,         26,         26,        1,    62288, b7263b7119853aee434290fb3cd30a16
28
+0,         27,         27,        1,    61788, e915b09f59360c1ffb92c2b80499e020
29
+0,         28,         28,        1,    60272, 0aab9182c5fb047344bdae541fb1befb
30
+0,         29,         29,        1,    60268, bc1bf979670850c37ab31e329dd909a6
31
+0,         30,         30,        1,    61268, 74a62d3c1363ea38d2a8687ac39a4112
32
+0,         31,         31,        1,    62264, 5b689d5835044b1582f664c1a3c3f336
33
+0,         32,         32,        1,    62668, 10638908ec2b59e0b75168ed7cce4141
34
+0,         33,         33,        1,    63864, 78bac64552f0a2450fc87fe8153a6774
35
+0,         34,         34,        1,    63032, befb82196b484ec3bb9d0eb57beb3c42
36
+0,         35,         35,        1,    62512, aea5110ce91111c9ce93865a82134125
37
+0,         36,         36,        1,    61772, 2744a404a3448db9db6214c688b4ed9f
38
+0,         37,         37,        1,    62044, c712fbf903d575fd4adc926470f99799
39
+0,         38,         38,        1,    61780, 97664d4ecf4492e0b8aa3ca025730158
40
+0,         39,         39,        1,    61724, 4b89a0cb4f99398e412eb4c4b8268fad
41
+0,         40,         40,        1,    60560, db2de1312d493917ebd805972a0d0086
42
+0,         41,         41,        1,    62284, b85ab454e9599ca9b52fc4e3ad2faaec
43
+0,         42,         42,        1,    61864, ae717317d753d6334d317abff4c51491
44
+0,         43,         43,        1,    61728, 70d6c4c68a112fde735195c5177123c8
45
+0,         44,         44,        1,    61252, 14b9a9e1686a1787991dfd40ed871184
46
+0,         45,         45,        1,    60224, ad1094331e5b2c27381e4e1781baa85c
47
+0,         46,         46,        1,    59416, a7b2ef933eaf0c8706bcf1f1f06dc01e
48
+0,         47,         47,        1,    59656, 89ff0f1c3ded6aa335f9c3ee66dead8e
49
+0,         48,         48,        1,    59616, 5fc6c44004562ed74b536374059a8bdd
50
+0,         49,         49,        1,    58836, feb32d803459a18e487f87c02ec1bf5c
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,   144516, 8b4c8d3ae74da0306cbb7c6709f16ec5
2
+0,          1,          1,        1,   144504, 041bcfd819fec93241baa2797e2c97c2
3
+0,          2,          2,        1,   144384, 9a3efab6db020060e877bcd68f6153b5
4
+0,          3,          3,        1,   144428, d650148e1b29eaf2ada94bad59214b06
5
+0,          4,          4,        1,   144596, 8a070f1c074181d3ebc8ff93d8218c91
6
+0,          5,          5,        1,   144456, d53157d4f6d4c97452061b05e9bd4589
7
+0,          6,          6,        1,   144424, fc15bb77ea351dcb8790f6a228d9a899
8
+0,          7,          7,        1,   144416, 36d9f2deea7d96c8c694a0464fbfb6f6
9
+0,          8,          8,        1,   144328, 07850891af07fd9491b7d4957309c59a
10
+0,          9,          9,        1,   144328, 98ec846ba6a928f1f8feaceffdc2ca47
11
+0,         10,         10,        1,   144252, eecbc81aeef72a557681fff3ade0e1ea
12
+0,         11,         11,        1,   144176, 716f45f97fbbee271c756b51c1442a04
13
+0,         12,         12,        1,   144460, 4b53f968b67f0a3fcc751551685dc616
14
+0,         13,         13,        1,   144320, a0989eba4abc67fc3f97286b5ebb6b6f
15
+0,         14,         14,        1,   144256, b565b531adde9de04ac8dd18441f4b10
16
+0,         15,         15,        1,   144240, 93866939e1799cc7a638e684d583c3fc
17
+0,         16,         16,        1,   144320, 6289947dfb7c1c56f7f38c293325b08d
18
+0,         17,         17,        1,   144360, d348dba72b01e64687d9772c6e408f16
19
+0,         18,         18,        1,   144356, a7285a69d3351c0ff37fc4e052e4445e
20
+0,         19,         19,        1,   144368, 6fc446cf8455acec4422dc87c9c3fd9a
21
+0,         20,         20,        1,   144388, 54d73f606e23d78675cf505a2e877e2f
22
+0,         21,         21,        1,   144424, 2d55f4fc58a611608c814bf624671103
23
+0,         22,         22,        1,   144352, ccd87aa111216071adba2ac6867e5a70
24
+0,         23,         23,        1,   144384, 5a159db181501aafac455eb6ec37645b
25
+0,         24,         24,        1,   144384, 0cd8523c88838fb4e59200d324206fc5
26
+0,         25,         25,        1,   144328, 7a537ae88e6b91ee637415fc1bdfdfb3
27
+0,         26,         26,        1,   144416, 2beb77ab1ec30d463442ba1b0b995a22
28
+0,         27,         27,        1,   144524, 032209c413e2906cea0ac1f229e731b0
29
+0,         28,         28,        1,   144680, 370581756f4df5ecb7127d9bad3f219d
30
+0,         29,         29,        1,   144656, b43f514332e63452f08cfcecca2c2820
31
+0,         30,         30,        1,   144500, 8debbbdf18df1a82161356f93aa5da22
32
+0,         31,         31,        1,   144504, 04b1d817b10d4529d0108311e131a395
33
+0,         32,         32,        1,   144380, f64c22d9b822b2b7744ed17dc93c0fea
34
+0,         33,         33,        1,   144176, b7fe2a1d51921876dc3294a28a8b73f4
35
+0,         34,         34,        1,   144188, bdbaf871cf4f0f9762d487719bd5d70d
36
+0,         35,         35,        1,   144356, b90c993423632180fcc924fb687a6e2b
37
+0,         36,         36,        1,   144556, 2d88e31846cdb41ab346dd94fc473854
38
+0,         37,         37,        1,   144524, 95b4f8749ee5dbeda91c0e650b13c250
39
+0,         38,         38,        1,   144540, c34b4aa099ec50f3f10d52670a8e3d2e
40
+0,         39,         39,        1,   144460, a4f79bdebaed29910d148293c6909766
41
+0,         40,         40,        1,   144540, c359072ba35fb124eb6da7a74e7d746b
42
+0,         41,         41,        1,   144356, 6c759d3621208fe60018d0bac631fbe3
43
+0,         42,         42,        1,   144340, 421a7417934af7f46c121c45b7ee9d28
44
+0,         43,         43,        1,   144436, 7954efe1687e9d823018aef879ac5958
45
+0,         44,         44,        1,   144488, 338bfdc6ac006a086c19ba256226d4f8
46
+0,         45,         45,        1,   144604, ff31f6f7706968bb150c98fd17ce59ac
47
+0,         46,         46,        1,   144600, a532db975d958b0b17406b3e7cae78a5
48
+0,         47,         47,        1,   144520, b1c007e9f754c2ddf039f3d4767cdcb1
49
+0,         48,         48,        1,   144472, a03290fb08b8b054f18fee2209f5bd13
50
+0,         49,         49,        1,   144508, 7d9eda64f4fc11c95dcd63a1130cb5ab
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,    93168, 083b68ac10646d425382cd3aed5d0ef0
2
+0,          1,          1,        1,    93400, f8d2b0fed320270c980140d187d01a25
3
+0,          2,          2,        1,    94536, f66ff5cccd63a468feb84aa22dae1c7c
4
+0,          3,          3,        1,    92928, 255ea0d934558adc2e2637bddb1284cf
5
+0,          4,          4,        1,    91800, 864d823c5885003e72f41a869c74d769
6
+0,          5,          5,        1,    93468, c6bfb70c03a7cfb4ec09acf2d7ec4f91
7
+0,          6,          6,        1,    93460, 6a5834ca48a2707e456d8c9c67b2cebb
8
+0,          7,          7,        1,    93132, 2c3968dc6af9917bee1846e1c85c5e99
9
+0,          8,          8,        1,    93252, a6739a7d07fd86f135c79e271da1789c
10
+0,          9,          9,        1,    93580, 8b587ed5fc102e2a0fff55674b1ada23
11
+0,         10,         10,        1,    93548, 4a87d1f0f5a1c3047aa77fc6d10cb6d1
12
+0,         11,         11,        1,    93520, 520bfaebdf5d972dae3671626374bed4
13
+0,         12,         12,        1,    92168, cc7c57ef93047aa13cf3fc5872564563
14
+0,         13,         13,        1,    92860, 8851d9930079a406d9cba89ce00a7feb
15
+0,         14,         14,        1,    94380, 2eb1d9ef63a0e74487f36f3e97bdf291
16
+0,         15,         15,        1,    94392, 2c9e589c3ccece6541193b7e61bf28d9
17
+0,         16,         16,        1,    93360, e138b833f6af0d0e189e8c3879af4cdd
18
+0,         17,         17,        1,    93108, 597e4c457845667e553c96b02acc40c3
19
+0,         18,         18,        1,    92568, 1623855c558e4b779bada7149adcb752
20
+0,         19,         19,        1,    92232, 78666f67c9b6eeff682f5ebf2e2b5145
21
+0,         20,         20,        1,    91696, aba549ebc0337df1aa5708cde9c4650d
22
+0,         21,         21,        1,    91688, cc7b65f321a50e117168b0be6a2c4a0f
23
+0,         22,         22,        1,    92164, 29b235028ca0bf6d9b752069529e2105
24
+0,         23,         23,        1,    92812, a23ca4b1b02965afc8cddf4b6022e9c1
25
+0,         24,         24,        1,    93960, afc0e5e4d45f9af68555cfff9e7f2e5d
26
+0,         25,         25,        1,    92892, 16d1afc5c8aa8b3b55e52e91e5baed53
27
+0,         26,         26,        1,    92248, a4dd3afd173d419eaec5f9632e64da0f
28
+0,         27,         27,        1,    91864, 614063fe03b92352d05d746dcabbbd10
29
+0,         28,         28,        1,    89756, 5a963cfeabc03d1409533bf2e5dd700b
30
+0,         29,         29,        1,    89812, f4fea21c34be3e85ba0790ef1e992214
31
+0,         30,         30,        1,    91184, 7aaad112ebb7fa15612fa63c8b313f80
32
+0,         31,         31,        1,    92076, de3c4aefe9c84b73b9c9494c09a0b22c
33
+0,         32,         32,        1,    92532, 4f445ee8eeaf323a9ff012a05ca1d3e2
34
+0,         33,         33,        1,    94572, 00cd8ab5abe5faa6cf59e54f3871a242
35
+0,         34,         34,        1,    93368, a303dd519e8ff023f488e4e2ee33e256
36
+0,         35,         35,        1,    92420, efce365314ac4d9e40959de0fc6fc01b
37
+0,         36,         36,        1,    91696, bb00659a54d8ded77615403962765238
38
+0,         37,         37,        1,    91912, b0e97a8ef2c73cd3d3b6a2d0bf08a1df
39
+0,         38,         38,        1,    91080, ff5e3be417b46de0bd9af03fb0ac7429
40
+0,         39,         39,        1,    91124, 9bca613b7f5a6543b63ad15c2198c037
41
+0,         40,         40,        1,    90188, 89b0ca054eead42930b946f7199b4fba
42
+0,         41,         41,        1,    91888, eda5dc80817de04c2528872e773bf3a9
43
+0,         42,         42,        1,    91832, eaea94320b6a85179a63b6330663d439
44
+0,         43,         43,        1,    91760, 412fca7fd02727857d4440cec3d4c0df
45
+0,         44,         44,        1,    91108, 9718c1bf512ee2be617bbc526211e8e0
46
+0,         45,         45,        1,    89544, b225acdf63a0183d00cd1f04ec0e49c9
47
+0,         46,         46,        1,    88544, 4ed88cdc92c56f872e5e696fb4da6f0d
48
+0,         47,         47,        1,    88960, 8b907526f25008a30e5c333867a21f54
49
+0,         48,         48,        1,    89068, 3bc4c3f7cb75befba57895b6c9e1d64e
50
+0,         49,         49,        1,    88012, 90132fa682959e1e3a1484b174cb2041
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,    90796, f90f29632eceac669132286385798866
2
+0,          1,          1,        1,    90652, 62890a83da5b9226ff197a0508d0db21
3
+0,          2,          2,        1,    91856, 815baaed2e42f9bf201f0b4630f265b9
4
+0,          3,          3,        1,    90572, 5e94b63fea1cb60f32f66a23ea97ea4d
5
+0,          4,          4,        1,    89580, ec8d444349c59dfbafd57095d0cab03a
6
+0,          5,          5,        1,    91148, 51be2db33b11859938c3162b02d2b183
7
+0,          6,          6,        1,    91212, 32df9c063904005a6c5a3a91b2e57b0d
8
+0,          7,          7,        1,    90376, 9959a40ad11a0a7e6f98a3bb2e1842cd
9
+0,          8,          8,        1,    90856, d03fa2bf67361ae27167ca61e0fa37da
10
+0,          9,          9,        1,    91356, ea2b8edf132d0492d6241f655a291a0c
11
+0,         10,         10,        1,    91032, 6204ddfa158037ee362920176597d85e
12
+0,         11,         11,        1,    91004, d210d0cc04e423e59fac9aaaf9bf01bd
13
+0,         12,         12,        1,    90096, 615dbf6c64f6165902a25970d226feb8
14
+0,         13,         13,        1,    90832, 66858d96fdb0dc8d89f1902591ccc886
15
+0,         14,         14,        1,    91688, 34a7ad1554020c4c78319803b41281d9
16
+0,         15,         15,        1,    91796, fd7cb3faaab8ca700dd0854915f72bb0
17
+0,         16,         16,        1,    90836, 983958df5d66c85194c2e2e7b27cf91b
18
+0,         17,         17,        1,    90848, 09d8051c04533059768b75967509c752
19
+0,         18,         18,        1,    90088, cf3fb73f2382063aa76bcdbe00739a9f
20
+0,         19,         19,        1,    89892, e6c2ec30ea12db29eedd649aa9a62476
21
+0,         20,         20,        1,    89304, 19603c655f5445bd4dadd4b88e482096
22
+0,         21,         21,        1,    89560, 0e842bf72ce795b37dcd588874913d2b
23
+0,         22,         22,        1,    89604, 83320a47a9882645aee67e8d343aee07
24
+0,         23,         23,        1,    90684, c45b3a01ab736a363f4771a277d3bf37
25
+0,         24,         24,        1,    91224, dbaf3f033273748bba13bc3332f399d5
26
+0,         25,         25,        1,    90480, de5b49620f1242f24250721dab315f71
27
+0,         26,         26,        1,    89988, a0d8ff14f468c5281c7bb80524743cbc
28
+0,         27,         27,        1,    89636, 68ca298fa61d18c963c0b9610dfb48bf
29
+0,         28,         28,        1,    88168, 22128400447fe0fcc9f067e1430e462e
30
+0,         29,         29,        1,    88188, 0816840bbd1b2857e99973a69e65c26a
31
+0,         30,         30,        1,    89068, bcf924eea0f45a9eeb01a886a154d969
32
+0,         31,         31,        1,    90104, 1b19dd4e4ed22e56b707f63f559174c6
33
+0,         32,         32,        1,    90344, 0142df8c6dfb99108622e8e7c8ebfd6d
34
+0,         33,         33,        1,    91348, 031e49bf9dc9e2c9ac6a86ab5bdba307
35
+0,         34,         34,        1,    90740, 5d4428cb9a61a57bfa724e0aea500db1
36
+0,         35,         35,        1,    90204, ad8a5494a7145e13aa3eb811f0af5843
37
+0,         36,         36,        1,    89708, 2421d07a9ed208f993d92c7d1f9c3fac
38
+0,         37,         37,        1,    90036, c4edb940ea1f10b716100fde23a5cb08
39
+0,         38,         38,        1,    89560, f6ba26af186ee1c7189603e6335281a8
40
+0,         39,         39,        1,    89464, aa77758a59ab9a7a3952dd9456040a5d
41
+0,         40,         40,        1,    88380, 78cd903ba608c770aeec39f13bd44896
42
+0,         41,         41,        1,    89872, 21e9e482d36a30bbff9ad897a2bda3f4
43
+0,         42,         42,        1,    89504, 9149a892a42e065079d614fba1e367c8
44
+0,         43,         43,        1,    89408, b5ed6ff8f7682a71ca2ca2bca5b1dbc0
45
+0,         44,         44,        1,    88916, 712d9669ad046b3993371cfb618c934e
46
+0,         45,         45,        1,    87948, 47c9bfa99221085efffe30e7b335beaa
47
+0,         46,         46,        1,    87284, 821cc4427f2649322950116caad44e96
48
+0,         47,         47,        1,    87424, 0d072e86818957bc3c40ffeb090dbcd8
49
+0,         48,         48,        1,    87296, 05bfe7d720b225ffc6b09a4ddf6ffa36
50
+0,         49,         49,        1,    86416, 85df53da921ba046d8e1d07349819236
0 51
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,   191788, ff02a91e03b0a94b37af9ea51ab68242
2
+0,          1,          1,        1,   191808, 655052bb397edc4391f1eb650dc47871
3
+0,          2,          2,        1,   191652, fa6238888b811ede6e9c9f62e70dd0f7
4
+0,          3,          3,        1,   191680, 54d54092523e7930aa4a8f9368512281
5
+0,          4,          4,        1,   191964, 5ef03667afca82f49916ae83e195882a
6
+0,          5,          5,        1,   191748, dac12c404963c2e0ae5b48a7fdf73e77
7
+0,          6,          6,        1,   191708, 040941871e8c877f187bcf6bf4ced7e9
8
+0,          7,          7,        1,   191676, 9743925e523417ebb8bc67398db998bb
9
+0,          8,          8,        1,   191564, 1ed1955e9917b449820910a7f0b32ccf
10
+0,          9,          9,        1,   191548, d5c4c8105156760a0ec6fe301ecdf21c
11
+0,         10,         10,        1,   191456, dbc73bc7e39f40fc270bf679f581d4dd
12
+0,         11,         11,        1,   191276, a824fb35c5ae1373cc7bf21b07cc8c76
13
+0,         12,         12,        1,   191688, bdb5ef586ef4ff64c4f4bde0ce0bfc51
14
+0,         13,         13,        1,   191412, 1639afbba6e6b5781355377e450cf8b4
15
+0,         14,         14,        1,   191408, 086b3cef987cc05cde1ab4e65a08eaa0
16
+0,         15,         15,        1,   191404, 72ba9aa193eb87d7ac7631abc1a57926
17
+0,         16,         16,        1,   191488, 20b5d383654a24966ae8cef0bb9797d9
18
+0,         17,         17,        1,   191568, 73a64fc6f24d33dc66c3f250bb2bb780
19
+0,         18,         18,        1,   191592, c53abd778e04e5c7872cc683f14d1573
20
+0,         19,         19,        1,   191604, 49a74ad438ecf106c5f463293b2b244c
21
+0,         20,         20,        1,   191588, 73424c3524c45610276116f947acf453
22
+0,         21,         21,        1,   191648, 931d156f5077fafc3d3de5992924bf04
23
+0,         22,         22,        1,   191536, 07e2afbbb3089ebe578606190c13d1d9
24
+0,         23,         23,        1,   191584, c4612e5016957be04efde7ed617ef366
25
+0,         24,         24,        1,   191636, dc050ed93382112e04c70671527a30f5
26
+0,         25,         25,        1,   191512, 185b3fce35bd0daec1863a867924e0af
27
+0,         26,         26,        1,   191632, 3943a51c9b74627cfb957ed48e2f05c9
28
+0,         27,         27,        1,   191796, 0b9f806f55ee7a4e3da57d020f55a506
29
+0,         28,         28,        1,   192012, 682a5ccd7ceabd0b78e082db56d0cdea
30
+0,         29,         29,        1,   191952, 125f8574ea41e351197a5ea19fdef534
31
+0,         30,         30,        1,   191724, 37a0f598b5499d8f87bc59e3533ae865
32
+0,         31,         31,        1,   191780, 4af30d848aae71f6b771772650f19855
33
+0,         32,         32,        1,   191624, 253d25de282366630257cc475bc25406
34
+0,         33,         33,        1,   191392, 00e0e8f4e9e957b11d8cd06c808564c3
35
+0,         34,         34,        1,   191328, a920f74d3c03b861156509dc1056bb15
36
+0,         35,         35,        1,   191532, bd46443a91845d421a1d602884c2752f
37
+0,         36,         36,        1,   191844, b1e04afa26a9bee13fc7cc2736987d8e
38
+0,         37,         37,        1,   191824, 611a706a43ad910e90bf8fd3818ca987
39
+0,         38,         38,        1,   191800, a810b661c6be0257df68252b36f7cf3d
40
+0,         39,         39,        1,   191692, 4560e8f9db047066e5140d59f408c82c
41
+0,         40,         40,        1,   191804, 1ba3a85b5a3f4ca503aa2ef4ae3a7b79
42
+0,         41,         41,        1,   191540, e739afb686e4d0d7ae2817ecc5fba584
43
+0,         42,         42,        1,   191536, fbb2e21954ff43b603c932ca03dd71d0
44
+0,         43,         43,        1,   191680, ee91c6758842419248ed5ecbdbdfaf89
45
+0,         44,         44,        1,   191784, 8137a4fd101c279d62ab23ef08bc763a
46
+0,         45,         45,        1,   191936, 838ee8574f632222c45866841749cd9c
47
+0,         46,         46,        1,   191912, 80f414eca8c544d09acac6696314a74b
48
+0,         47,         47,        1,   191772, 5e457f447e765b2f13e8e9a9af359ec8
49
+0,         48,         48,        1,   191704, 501ce8349316c6ab1c3100eecb31b551
50
+0,         49,         49,        1,   191720, 3999f5d44150a6e44cf4fe55a3d146e0