Browse code

Merge remote-tracking branch 'qatar/master'

* qatar/master: (26 commits)
fate: use diff -b in oneline comparison
Add missing version bumps and APIchanges/Changelog entries.
lavfi: move buffer management function to a separate file.
lavfi: move formats-related functions from default.c to formats.c
lavfi: move video-related functions to a separate file.
fate: make smjpeg a demux test
fate: separate sierra-vmd audio and video tests
fate: separate smacker audio and video tests
libmp3lame: set supported channel layouts.
avconv: automatically insert asyncts when -async is used.
avconv: add support for audio filters.
lavfi: add asyncts filter.
lavfi: add aformat filter
lavfi: add an audio buffer sink.
lavfi: add an audio buffer source.
buffersrc: add av_buffersrc_write_frame().
buffersrc: fix invalid read in uninit if the fifo hasn't been allocated
lavfi: rename vsrc_buffer.c to buffersrc.c
avfiltergraph: reindent
lavfi: add channel layout/sample rate negotiation.
...

Conflicts:
Changelog
doc/APIchanges
doc/filters.texi
ffmpeg.c
ffprobe.c
libavcodec/libmp3lame.c
libavfilter/Makefile
libavfilter/af_aformat.c
libavfilter/allfilters.c
libavfilter/avfilter.c
libavfilter/avfilter.h
libavfilter/avfiltergraph.c
libavfilter/buffersrc.c
libavfilter/defaults.c
libavfilter/formats.c
libavfilter/src_buffer.c
libavfilter/version.h
libavfilter/vf_yadif.c
libavfilter/vsrc_buffer.c
libavfilter/vsrc_buffer.h
libavutil/avutil.h
tests/fate/audio.mak
tests/fate/demux.mak
tests/fate/video.mak

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

Michael Niedermayer authored on 2012/05/16 09:27:31
Showing 53 changed files
... ...
@@ -30,6 +30,7 @@ version next:
30 30
 - MicroDVD decoder
31 31
 - Avid Meridien (AVUI) decoder
32 32
 - accept + prefix to -pix_fmt option to disable automatic conversions.
33
+- audio filters support in libavfilter and avconv
33 34
 
34 35
 
35 36
 version 0.10:
... ...
@@ -27,13 +27,30 @@ API changes, most recent first:
27 27
 2012-03-26 - a67d9cf - lavfi 2.66.100
28 28
   Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions.
29 29
 
30
-2012-xx-xx - xxxxxxx - lavc 54.13.1
30
+2012-05-15 - lavfi 2.17.0
31
+  Add support for audio filters
32
+  ac71230/a2cd9be - add video/audio buffer sink in a new installed
33
+                    header buffersink.h
34
+  720c6b7 - add av_buffersrc_write_frame(), deprecate
35
+            av_vsrc_buffer_add_frame()
36
+  ab16504 - add avfilter_copy_buf_props()
37
+  9453c9e - add extended_data to AVFilterBuffer
38
+  1b8c927 - add avfilter_get_audio_buffer_ref_from_arrays()
39
+
40
+2012-05-09 - lavu 51.30.0 - samplefmt.h
41
+  142e740 - add av_samples_copy()
42
+  6d7f617 - add av_samples_set_silence()
43
+
44
+2012-05-09 - a5117a2 - lavc 54.13.1
31 45
   For audio formats with fixed frame size, the last frame
32 46
   no longer needs to be padded with silence, libavcodec
33 47
   will handle this internally (effectively all encoders
34 48
   behave as if they had CODEC_CAP_SMALL_LAST_FRAME set).
35 49
 
36
-2012-xx-xx - xxxxxxx - lavr 0.0.1
50
+2012-05-07 - 828bd08 - lavc 54.13.0 - avcodec.h
51
+  Add sample_rate and channel_layout fields to AVFrame.
52
+
53
+2012-05-01 - 4010d72 - lavr 0.0.1
37 54
   Change AV_MIX_COEFF_TYPE_Q6 to AV_MIX_COEFF_TYPE_Q8.
38 55
 
39 56
 2012-04-25 - 3527a73 - lavu 51.29.0 - cpu.h
... ...
@@ -499,6 +499,11 @@ Set the audio codec. This is an alias for @code{-codec:a}.
499 499
 @item -sample_fmt[:@var{stream_specifier}] @var{sample_fmt} (@emph{output,per-stream})
500 500
 Set the audio sample format. Use @code{-sample_fmts} to get a list
501 501
 of supported sample formats.
502
+@item -af @var{filter_graph} (@emph{output})
503
+@var{filter_graph} is a description of the filter graph to apply to
504
+the input audio.
505
+Use the option "-filters" to show all the available filters (including
506
+also sources and sinks).  This is an alias for @code{-filter:a}.
502 507
 @end table
503 508
 
504 509
 @section Advanced Audio options:
... ...
@@ -781,6 +786,7 @@ Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps
781 781
 the parameter is the maximum samples per second by which the audio is changed.
782 782
 -async 1 is a special case where only the start of the audio stream is corrected
783 783
 without any later correction.
784
+This option has been deprecated. Use the @code{asyncts} audio filter instead.
784 785
 @item -copyts
785 786
 Copy timestamps from input to output.
786 787
 @item -copytb @var{mode}
... ...
@@ -211,6 +211,32 @@ amovie=input.mkv:si=5 [a5];
211 211
 [x3][a5] amerge" -c:a pcm_s16le output.mkv
212 212
 @end example
213 213
 
214
+@section aformat
215
+
216
+Convert the input audio to one of the specified formats. The framework will
217
+negotiate the most appropriate format to minimize conversions.
218
+
219
+The filter accepts the following named parameters:
220
+@table @option
221
+
222
+@item sample_fmts
223
+A comma-separated list of requested sample formats.
224
+
225
+@item sample_rates
226
+A comma-separated list of requested sample rates.
227
+
228
+@item channel_layouts
229
+A comma-separated list of requested channel layouts.
230
+
231
+@end table
232
+
233
+If a parameter is omitted, all values are allowed.
234
+
235
+For example to force the output to either unsigned 8-bit or signed 16-bit stereo:
236
+@example
237
+aformat=sample_fmts\=u8\,s16:channel_layouts\=stereo
238
+@end example
239
+
214 240
 @section anull
215 241
 
216 242
 Pass the audio source unchanged to the output.
... ...
@@ -502,6 +528,25 @@ volume=-12dB
502 502
 @end example
503 503
 @end itemize
504 504
 
505
+@section asyncts
506
+Synchronize audio data with timestamps by squeezing/stretching it and/or
507
+dropping samples/adding silence when needed.
508
+
509
+The filter accepts the following named parameters:
510
+@table @option
511
+
512
+@item compensate
513
+Enable stretching/squeezing the data to make it match the timestamps.
514
+
515
+@item min_delta
516
+Minimum difference between timestamps and audio data (in seconds) to trigger
517
+adding/dropping samples.
518
+
519
+@item max_comp
520
+Maximum compensation in samples per second.
521
+
522
+@end table
523
+
505 524
 @section resample
506 525
 Convert the audio sample format, sample rate and channel layout. This filter is
507 526
 not meant to be used directly.
... ...
@@ -721,6 +766,33 @@ anullsrc=r=48000:cl=4
721 721
 anullsrc=r=48000:cl=mono
722 722
 @end example
723 723
 
724
+@section abuffer
725
+Buffer audio frames, and make them available to the filter chain.
726
+
727
+This source is not intended to be part of user-supplied graph descriptions but
728
+for insertion by calling programs through the interface defined in
729
+@file{libavfilter/buffersrc.h}.
730
+
731
+It accepts the following named parameters:
732
+@table @option
733
+
734
+@item time_base
735
+Timebase which will be used for timestamps of submitted frames. It must be
736
+either a floating-point number or in @var{numerator}/@var{denominator} form.
737
+
738
+@item sample_rate
739
+Audio sample rate.
740
+
741
+@item sample_fmt
742
+Name of the sample format, as returned by @code{av_get_sample_fmt_name()}.
743
+
744
+@item channel_layout
745
+Channel layout of the audio data, in the form that can be accepted by
746
+@code{av_get_channel_layout()}.
747
+@end table
748
+
749
+All the parameters need to be explicitly defined.
750
+
724 751
 @c man end AUDIO SOURCES
725 752
 
726 753
 @chapter Audio Sinks
... ...
@@ -745,6 +817,13 @@ Null audio sink, do absolutely nothing with the input audio. It is
745 745
 mainly useful as a template and to be employed in analysis / debugging
746 746
 tools.
747 747
 
748
+@section abuffersink
749
+This sink is intended for programmatic use. Frames that arrive on this sink can
750
+be retrieved by the calling program using the interface defined in
751
+@file{libavfilter/buffersink.h}.
752
+
753
+This filter accepts no parameters.
754
+
748 755
 @c man end AUDIO SINKS
749 756
 
750 757
 @chapter Video Filters
... ...
@@ -1549,6 +1549,19 @@ static int open_input_file(AVFormatContext **fmt_ctx_ptr, const char *filename)
1549 1549
     return 0;
1550 1550
 }
1551 1551
 
1552
+static void close_input_file(AVFormatContext **ctx_ptr)
1553
+{
1554
+    int i;
1555
+    AVFormatContext *fmt_ctx = *ctx_ptr;
1556
+
1557
+    /* close decoder for each stream */
1558
+    for (i = 0; i < fmt_ctx->nb_streams; i++)
1559
+        if (fmt_ctx->streams[i]->codec->codec_id != CODEC_ID_NONE)
1560
+            avcodec_close(fmt_ctx->streams[i]->codec);
1561
+
1562
+    avformat_close_input(ctx_ptr);
1563
+}
1564
+
1552 1565
 #define PRINT_CHAPTER(name) do {                                        \
1553 1566
     if (do_show_ ## name) {                                             \
1554 1567
         writer_print_chapter_header(wctx, #name);                       \
... ...
@@ -1586,10 +1599,7 @@ static int probe_file(WriterContext *wctx, const char *filename)
1586 1586
         }
1587 1587
         PRINT_CHAPTER(streams);
1588 1588
         PRINT_CHAPTER(format);
1589
-        for (i = 0; i < fmt_ctx->nb_streams; i++)
1590
-            if (fmt_ctx->streams[i]->codec->codec_id != CODEC_ID_NONE)
1591
-                avcodec_close(fmt_ctx->streams[i]->codec);
1592
-        avformat_close_input(&fmt_ctx);
1589
+        close_input_file(&fmt_ctx);
1593 1590
         av_freep(&nb_streams_frames);
1594 1591
         av_freep(&nb_streams_packets);
1595 1592
     }
... ...
@@ -1803,6 +1813,10 @@ int main(int argc, char **argv)
1803 1803
 
1804 1804
 end:
1805 1805
     av_freep(&print_format);
1806
+
1807
+    uninit_opts();
1808
+    av_dict_free(&fmt_entries_to_show);
1809
+
1806 1810
     avformat_network_deinit();
1807 1811
 
1808 1812
     return ret;
... ...
@@ -26,6 +26,7 @@
26 26
 
27 27
 #include <lame/lame.h>
28 28
 
29
+#include "libavutil/audioconvert.h"
29 30
 #include "libavutil/intreadwrite.h"
30 31
 #include "libavutil/log.h"
31 32
 #include "libavutil/opt.h"
... ...
@@ -76,13 +77,7 @@ static av_cold int mp3lame_encode_init(AVCodecContext *avctx)
76 76
     if ((s->gfp = lame_init()) == NULL)
77 77
         return AVERROR(ENOMEM);
78 78
 
79
-    /* channels */
80
-    if (avctx->channels > 2) {
81
-        av_log(avctx, AV_LOG_ERROR,
82
-               "Invalid number of channels %d, must be <= 2\n", avctx->channels);
83
-        ret =  AVERROR(EINVAL);
84
-        goto error;
85
-    }
79
+
86 80
     lame_set_num_channels(s->gfp, avctx->channels);
87 81
     lame_set_mode(s->gfp, avctx->channels > 1 ? JOINT_STEREO : MONO);
88 82
 
... ...
@@ -308,6 +303,8 @@ AVCodec ff_libmp3lame_encoder = {
308 308
                                                              AV_SAMPLE_FMT_S16,
309 309
                                                              AV_SAMPLE_FMT_NONE },
310 310
     .supported_samplerates = libmp3lame_sample_rates,
311
+    .channel_layouts       = (const uint64_t[]) { AV_CH_LAYOUT_MONO,
312
+                                                  AV_CH_LAYOUT_STEREO },
311 313
     .long_name             = NULL_IF_CONFIG_SMALL("libmp3lame MP3 (MPEG audio layer 3)"),
312 314
     .priv_class            = &libmp3lame_class,
313 315
     .defaults              = libmp3lame_defaults,
... ...
@@ -2,6 +2,7 @@ include $(SUBDIR)../config.mak
2 2
 
3 3
 NAME = avfilter
4 4
 FFLIBS = avutil swscale
5
+FFLIBS-$(CONFIG_ASYNCTS_FILTER) += avresample
5 6
 FFLIBS-$(CONFIG_RESAMPLE_FILTER) += avresample
6 7
 
7 8
 FFLIBS-$(CONFIG_ACONVERT_FILTER)             += swresample
... ...
@@ -25,6 +26,7 @@ OBJS = allfilters.o                                                     \
25 25
        audio.o                                                          \
26 26
        avfilter.o                                                       \
27 27
        avfiltergraph.o                                                  \
28
+       buffer.o                                                         \
28 29
        buffersink.o                                                     \
29 30
        defaults.o                                                       \
30 31
        drawutils.o                                                      \
... ...
@@ -34,6 +36,8 @@ OBJS = allfilters.o                                                     \
34 34
        src_buffer.o                                                     \
35 35
        transform.o                                                      \
36 36
        vf_scale.o                                                       \
37
+       video.o                                                          \
38
+
37 39
 
38 40
 OBJS-$(CONFIG_AVCODEC)                       += avcodec.o
39 41
 OBJS-$(CONFIG_AVFORMAT)                      += lavfutils.o
... ...
@@ -47,6 +51,7 @@ OBJS-$(CONFIG_ARESAMPLE_FILTER)              += af_aresample.o
47 47
 OBJS-$(CONFIG_ASHOWINFO_FILTER)              += af_ashowinfo.o
48 48
 OBJS-$(CONFIG_ASPLIT_FILTER)                 += af_asplit.o
49 49
 OBJS-$(CONFIG_ASTREAMSYNC_FILTER)            += af_astreamsync.o
50
+OBJS-$(CONFIG_ASYNCTS_FILTER)                += af_asyncts.o
50 51
 OBJS-$(CONFIG_EARWAX_FILTER)                 += af_earwax.o
51 52
 OBJS-$(CONFIG_PAN_FILTER)                    += af_pan.o
52 53
 OBJS-$(CONFIG_RESAMPLE_FILTER)               += af_resample.o
... ...
@@ -74,6 +74,7 @@ static int query_formats(AVFilterContext *ctx)
74 74
     AVFilterLink *inlink  = ctx->inputs[0];
75 75
     AVFilterLink *outlink = ctx->outputs[0];
76 76
     int out_packing = av_sample_fmt_is_planar(aconvert->out_sample_fmt);
77
+    AVFilterChannelLayouts *layouts;
77 78
 
78 79
     avfilter_formats_ref(avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO),
79 80
                          &inlink->out_formats);
... ...
@@ -85,15 +86,15 @@ static int query_formats(AVFilterContext *ctx)
85 85
         avfilter_formats_ref(avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO),
86 86
                              &outlink->in_formats);
87 87
 
88
-    avfilter_formats_ref(avfilter_make_all_channel_layouts(),
89
-                         &inlink->out_chlayouts);
88
+    ff_channel_layouts_ref(ff_all_channel_layouts(),
89
+                         &inlink->out_channel_layouts);
90 90
     if (aconvert->out_chlayout != 0) {
91
-        formats = NULL;
92
-        avfilter_add_format(&formats, aconvert->out_chlayout);
93
-        avfilter_formats_ref(formats, &outlink->in_chlayouts);
91
+        layouts = NULL;
92
+        ff_add_channel_layout(&layouts, aconvert->out_chlayout);
93
+        ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts);
94 94
     } else
95
-        avfilter_formats_ref(avfilter_make_all_channel_layouts(),
96
-                             &outlink->in_chlayouts);
95
+        ff_channel_layouts_ref(ff_all_channel_layouts(),
96
+                             &outlink->in_channel_layouts);
97 97
 
98 98
     avfilter_formats_ref(avfilter_make_all_packing_formats(),
99 99
                          &inlink->out_packing);
... ...
@@ -25,72 +25,110 @@
25 25
 
26 26
 #include "libavutil/audioconvert.h"
27 27
 #include "libavutil/avstring.h"
28
-#include "avfilter.h"
28
+#include "libavutil/opt.h"
29
+
29 30
 #include "audio.h"
31
+#include "avfilter.h"
32
+#include "formats.h"
30 33
 #include "internal.h"
31 34
 
32
-typedef struct {
33
-    AVFilterFormats *formats, *chlayouts, *packing;
35
+typedef struct AFormatContext {
36
+    const AVClass   *class;
37
+
38
+    AVFilterFormats *formats;
39
+    AVFilterFormats *sample_rates;
40
+    AVFilterChannelLayouts *channel_layouts;
41
+
42
+    char *formats_str;
43
+    char *sample_rates_str;
44
+    char *channel_layouts_str;
34 45
 } AFormatContext;
35 46
 
47
+#define OFFSET(x) offsetof(AFormatContext, x)
48
+#define A AV_OPT_FLAG_AUDIO_PARAM
49
+static const AVOption options[] = {
50
+    { "sample_fmts",     "A comma-separated list of sample formats.",  OFFSET(formats_str),         AV_OPT_TYPE_STRING, .flags = A },
51
+    { "sample_rates",    "A comma-separated list of sample rates.",    OFFSET(sample_rates_str),    AV_OPT_TYPE_STRING, .flags = A },
52
+    { "channel_layouts", "A comma-separated list of channel layouts.", OFFSET(channel_layouts_str), AV_OPT_TYPE_STRING, .flags = A },
53
+    { NULL },
54
+};
55
+
56
+static const AVClass aformat_class = {
57
+    .class_name = "aformat filter",
58
+    .item_name  = av_default_item_name,
59
+    .option     = options,
60
+    .version    = LIBAVUTIL_VERSION_INT,
61
+};
62
+
63
+#define PARSE_FORMATS(str, type, list, add_to_list, get_fmt, none, desc)    \
64
+do {                                                                        \
65
+    char *next, *cur = str;                                                 \
66
+    while (cur) {                                                           \
67
+        type fmt;                                                           \
68
+        next = strchr(cur, ',');                                            \
69
+        if (next)                                                           \
70
+            *next++ = 0;                                                    \
71
+                                                                            \
72
+        if ((fmt = get_fmt(cur)) == none) {                                 \
73
+            av_log(ctx, AV_LOG_ERROR, "Error parsing " desc ": %s.\n", cur);\
74
+            ret = AVERROR(EINVAL);                                          \
75
+            goto fail;                                                      \
76
+        }                                                                   \
77
+        add_to_list(&list, fmt);                                            \
78
+                                                                            \
79
+        cur = next;                                                         \
80
+    }                                                                       \
81
+} while (0)
82
+
83
+static int get_sample_rate(const char *samplerate)
84
+{
85
+    int ret = strtol(samplerate, NULL, 0);
86
+    return FFMAX(ret, 0);
87
+}
88
+
36 89
 static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
37 90
 {
38
-    AFormatContext * const aformat = ctx->priv;
39
-    char *fmts_str = NULL, *fmt_str, *ptr = NULL;
40
-    int64_t fmt;
91
+    AFormatContext *s = ctx->priv;
41 92
     int ret;
42 93
 
43
-    if (!args)
44
-        goto arg_fail;
45
-
46
-#define ADD_FORMATS(all_formats, fmt_name, fmt_type, fmts_list) do {    \
47
-    fmts_str = av_get_token(&args, ":");                                \
48
-    if (!fmts_str || !*fmts_str)                                        \
49
-        goto arg_fail;                                                  \
50
-    if (!strcmp(fmts_str, "all")) {                                     \
51
-        aformat->fmts_list = all_formats;                               \
52
-    } else {                                                            \
53
-        for (fmt_str = fmts_str;                                        \
54
-             fmt_str = av_strtok(fmt_str, ",", &ptr); fmt_str = NULL) { \
55
-            if ((ret = ff_parse_##fmt_name((fmt_type *)&fmt,            \
56
-                                           fmt_str, ctx)) < 0) {        \
57
-                av_freep(&fmts_str);                                    \
58
-                return ret;                                             \
59
-            }                                                           \
60
-            avfilter_add_format(&aformat->fmts_list, fmt);              \
61
-        }                                                               \
62
-    }                                                                   \
63
-    av_freep(&fmts_str);                                                \
64
-    if (*args)                                                          \
65
-        args++;                                                         \
66
-} while (0)
94
+    if (!args) {
95
+        av_log(ctx, AV_LOG_ERROR, "No parameters supplied.\n");
96
+        return AVERROR(EINVAL);
97
+    }
67 98
 
68
-    ADD_FORMATS(avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO), sample_format, int, formats);
69
-    ADD_FORMATS(avfilter_make_all_channel_layouts(), channel_layout, int64_t, chlayouts);
70
-    ADD_FORMATS(avfilter_make_all_packing_formats(), packing_format, int, packing);
99
+    s->class = &aformat_class;
100
+    av_opt_set_defaults(s);
71 101
 
72
-    return 0;
102
+    if ((ret = av_set_options_string(s, args, "=", ":")) < 0) {
103
+        av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args);
104
+        return ret;
105
+    }
73 106
 
74
-arg_fail:
75
-    av_log(ctx, AV_LOG_ERROR, "Invalid arguments, they must be of the form "
76
-                              "sample_fmts:channel_layouts:packing_fmts\n");
77
-    av_freep(&fmts_str);
78
-    return AVERROR(EINVAL);
107
+    PARSE_FORMATS(s->formats_str, enum AVSampleFormat, s->formats,
108
+                  avfilter_add_format, av_get_sample_fmt, AV_SAMPLE_FMT_NONE, "sample format");
109
+    PARSE_FORMATS(s->sample_rates_str, int, s->sample_rates, avfilter_add_format,
110
+                  get_sample_rate, 0, "sample rate");
111
+    PARSE_FORMATS(s->channel_layouts_str, uint64_t, s->channel_layouts,
112
+                  ff_add_channel_layout, av_get_channel_layout, 0,
113
+                  "channel layout");
114
+
115
+fail:
116
+    av_opt_free(s);
117
+    return ret;
79 118
 }
80 119
 
81 120
 static int query_formats(AVFilterContext *ctx)
82 121
 {
83
-    AFormatContext * const aformat = ctx->priv;
122
+    AFormatContext *s = ctx->priv;
84 123
 
85
-    avfilter_set_common_sample_formats (ctx, aformat->formats);
86
-    avfilter_set_common_channel_layouts(ctx, aformat->chlayouts);
87
-    avfilter_set_common_packing_formats(ctx, aformat->packing);
88
-    return 0;
89
-}
124
+    avfilter_set_common_formats(ctx, s->formats ? s->formats :
125
+                                                  avfilter_all_formats(AVMEDIA_TYPE_AUDIO));
126
+    ff_set_common_samplerates(ctx, s->sample_rates ? s->sample_rates :
127
+                                                     ff_all_samplerates());
128
+    ff_set_common_channel_layouts(ctx, s->channel_layouts ? s->channel_layouts :
129
+                                                            ff_all_channel_layouts());
90 130
 
91
-static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref)
92
-{
93
-    ff_filter_samples(inlink->dst->outputs[0], insamplesref);
131
+    return 0;
94 132
 }
95 133
 
96 134
 AVFilter avfilter_af_aformat = {
... ...
@@ -100,11 +138,11 @@ AVFilter avfilter_af_aformat = {
100 100
     .query_formats = query_formats,
101 101
     .priv_size     = sizeof(AFormatContext),
102 102
 
103
-    .inputs        = (const AVFilterPad[]) {{ .name      = "default",
103
+    .inputs        = (AVFilterPad[]) {{ .name            = "default",
104 104
                                         .type            = AVMEDIA_TYPE_AUDIO,
105
-                                        .filter_samples  = filter_samples},
105
+                                        .filter_samples  = ff_null_filter_samples },
106 106
                                       { .name = NULL}},
107
-    .outputs       = (const AVFilterPad[]) {{ .name      = "default",
107
+    .outputs       = (AVFilterPad[]) {{ .name            = "default",
108 108
                                         .type            = AVMEDIA_TYPE_AUDIO},
109 109
                                       { .name = NULL}},
110 110
 };
... ...
@@ -56,17 +56,18 @@ static int query_formats(AVFilterContext *ctx)
56 56
     int64_t inlayout[2], outlayout;
57 57
     const int packing_fmts[] = { AVFILTER_PACKED, -1 };
58 58
     AVFilterFormats *formats;
59
+    AVFilterChannelLayouts *layouts;
59 60
     int i;
60 61
 
61 62
     for (i = 0; i < 2; i++) {
62
-        if (!ctx->inputs[i]->in_chlayouts ||
63
-            !ctx->inputs[i]->in_chlayouts->format_count) {
63
+        if (!ctx->inputs[i]->in_channel_layouts ||
64
+            !ctx->inputs[i]->in_channel_layouts->nb_channel_layouts) {
64 65
             av_log(ctx, AV_LOG_ERROR,
65 66
                    "No channel layout for input %d\n", i + 1);
66 67
             return AVERROR(EINVAL);
67 68
         }
68
-        inlayout[i] = ctx->inputs[i]->in_chlayouts->formats[0];
69
-        if (ctx->inputs[i]->in_chlayouts->format_count > 1) {
69
+        inlayout[i] = ctx->inputs[i]->in_channel_layouts->channel_layouts[0];
70
+        if (ctx->inputs[i]->in_channel_layouts->nb_channel_layouts > 1) {
70 71
             char buf[256];
71 72
             av_get_channel_layout_string(buf, sizeof(buf), 0, inlayout[i]);
72 73
             av_log(ctx, AV_LOG_INFO, "Using \"%s\" for input %d\n", buf, i + 1);
... ...
@@ -101,13 +102,13 @@ static int query_formats(AVFilterContext *ctx)
101 101
     formats = avfilter_make_format_list(packing_fmts);
102 102
     avfilter_set_common_packing_formats(ctx, formats);
103 103
     for (i = 0; i < 2; i++) {
104
-        formats = NULL;
105
-        avfilter_add_format(&formats, inlayout[i]);
106
-        avfilter_formats_ref(formats, &ctx->inputs[i]->out_chlayouts);
104
+        layouts = NULL;
105
+        ff_add_channel_layout(&layouts, inlayout[i]);
106
+        ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts);
107 107
     }
108
-    formats = NULL;
109
-    avfilter_add_format(&formats, outlayout);
110
-    avfilter_formats_ref(formats, &ctx->outputs[0]->in_chlayouts);
108
+    layouts = NULL;
109
+    ff_add_channel_layout(&layouts, outlayout);
110
+    ff_channel_layouts_ref(layouts, &ctx->outputs[0]->in_channel_layouts);
111 111
     return 0;
112 112
 }
113 113
 
... ...
@@ -56,6 +56,42 @@ static av_cold void uninit(AVFilterContext *ctx)
56 56
     swr_free(&aresample->swr);
57 57
 }
58 58
 
59
+static int query_formats(AVFilterContext *ctx)
60
+{
61
+    AResampleContext *aresample = ctx->priv;
62
+
63
+    AVFilterLink *inlink  = ctx->inputs[0];
64
+    AVFilterLink *outlink = ctx->outputs[0];
65
+
66
+    AVFilterFormats        *in_formats      = avfilter_all_formats(AVMEDIA_TYPE_AUDIO);
67
+    AVFilterFormats        *out_formats     = avfilter_all_formats(AVMEDIA_TYPE_AUDIO);
68
+    AVFilterFormats        *in_samplerates  = ff_all_samplerates();
69
+    AVFilterFormats        *out_samplerates;
70
+
71
+
72
+    AVFilterChannelLayouts *in_layouts      = ff_all_channel_layouts();
73
+    AVFilterChannelLayouts *out_layouts     = ff_all_channel_layouts();
74
+
75
+    avfilter_formats_ref(in_formats,  &inlink->out_formats);
76
+    avfilter_formats_ref(out_formats, &outlink->in_formats);
77
+
78
+    avfilter_formats_ref(in_samplerates,  &inlink->out_samplerates);
79
+
80
+    ff_channel_layouts_ref(in_layouts,  &inlink->out_channel_layouts);
81
+    ff_channel_layouts_ref(out_layouts, &outlink->in_channel_layouts);
82
+
83
+    if(aresample->out_rate > 0) {
84
+        int sample_rates[] = { aresample->out_rate, -1 };
85
+        ff_set_common_samplerates(ctx, avfilter_make_format_list(sample_rates));
86
+    } else {
87
+        out_samplerates = ff_all_samplerates();
88
+        avfilter_formats_ref(out_samplerates, &outlink->in_samplerates);
89
+    }
90
+
91
+    return 0;
92
+}
93
+
94
+
59 95
 static int config_output(AVFilterLink *outlink)
60 96
 {
61 97
     int ret;
... ...
@@ -113,6 +149,7 @@ AVFilter avfilter_af_aresample = {
113 113
     .description   = NULL_IF_CONFIG_SMALL("Resample audio data."),
114 114
     .init          = init,
115 115
     .uninit        = uninit,
116
+    .query_formats = query_formats,
116 117
     .priv_size     = sizeof(AResampleContext),
117 118
 
118 119
     .inputs    = (const AVFilterPad[]) {{ .name      = "default",
... ...
@@ -81,6 +81,7 @@ static int query_formats(AVFilterContext *ctx)
81 81
 {
82 82
     int i;
83 83
     AVFilterFormats *formats;
84
+    AVFilterChannelLayouts *layouts;
84 85
 
85 86
     for (i = 0; i < 2; i++) {
86 87
         formats = ctx->inputs[i]->in_formats;
... ...
@@ -89,9 +90,9 @@ static int query_formats(AVFilterContext *ctx)
89 89
         formats = ctx->inputs[i]->in_packing;
90 90
         avfilter_formats_ref(formats, &ctx->inputs[i]->out_packing);
91 91
         avfilter_formats_ref(formats, &ctx->outputs[i]->in_packing);
92
-        formats = ctx->inputs[i]->in_chlayouts;
93
-        avfilter_formats_ref(formats, &ctx->inputs[i]->out_chlayouts);
94
-        avfilter_formats_ref(formats, &ctx->outputs[i]->in_chlayouts);
92
+        layouts = ctx->inputs[i]->in_channel_layouts;
93
+        ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts);
94
+        ff_channel_layouts_ref(layouts, &ctx->outputs[i]->in_channel_layouts);
95 95
     }
96 96
     return 0;
97 97
 }
98 98
new file mode 100644
... ...
@@ -0,0 +1,237 @@
0
+/*
1
+ * This file is part of Libav.
2
+ *
3
+ * Libav is free software; you can redistribute it and/or
4
+ * modify it under the terms of the GNU Lesser General Public
5
+ * License as published by the Free Software Foundation; either
6
+ * version 2.1 of the License, or (at your option) any later version.
7
+ *
8
+ * Libav is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11
+ * Lesser General Public License for more details.
12
+ *
13
+ * You should have received a copy of the GNU Lesser General Public
14
+ * License along with Libav; if not, write to the Free Software
15
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+ */
17
+
18
+#include "libavresample/avresample.h"
19
+#include "libavutil/audio_fifo.h"
20
+#include "libavutil/mathematics.h"
21
+#include "libavutil/opt.h"
22
+#include "libavutil/samplefmt.h"
23
+
24
+#include "audio.h"
25
+#include "avfilter.h"
26
+
27
+typedef struct ASyncContext {
28
+    const AVClass *class;
29
+
30
+    AVAudioResampleContext *avr;
31
+    int64_t pts;            ///< timestamp in samples of the first sample in fifo
32
+    int min_delta;          ///< pad/trim min threshold in samples
33
+
34
+    /* options */
35
+    int resample;
36
+    float min_delta_sec;
37
+    int max_comp;
38
+} ASyncContext;
39
+
40
+#define OFFSET(x) offsetof(ASyncContext, x)
41
+#define A AV_OPT_FLAG_AUDIO_PARAM
42
+static const AVOption options[] = {
43
+    { "compensate", "Stretch/squeeze the data to make it match the timestamps", OFFSET(resample),      AV_OPT_TYPE_INT,   { 0 },   0, 1,       A },
44
+    { "min_delta",  "Minimum difference between timestamps and audio data "
45
+                    "(in seconds) to trigger padding/trimmin the data.",        OFFSET(min_delta_sec), AV_OPT_TYPE_FLOAT, { 0.1 }, 0, INT_MAX, A },
46
+    { "max_comp",   "Maximum compensation in samples per second.",              OFFSET(max_comp),      AV_OPT_TYPE_INT,   { 500 }, 0, INT_MAX, A },
47
+    { NULL },
48
+};
49
+
50
+static const AVClass async_class = {
51
+    .class_name = "asyncts filter",
52
+    .item_name  = av_default_item_name,
53
+    .option     = options,
54
+    .version    = LIBAVUTIL_VERSION_INT,
55
+};
56
+
57
+static int init(AVFilterContext *ctx, const char *args, void *opaque)
58
+{
59
+    ASyncContext *s = ctx->priv;
60
+    int ret;
61
+
62
+    s->class = &async_class;
63
+    av_opt_set_defaults(s);
64
+
65
+    if ((ret = av_set_options_string(s, args, "=", ":")) < 0) {
66
+        av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args);
67
+        return ret;
68
+    }
69
+    av_opt_free(s);
70
+
71
+    s->pts = AV_NOPTS_VALUE;
72
+
73
+    return 0;
74
+}
75
+
76
+static void uninit(AVFilterContext *ctx)
77
+{
78
+    ASyncContext *s = ctx->priv;
79
+
80
+    if (s->avr) {
81
+        avresample_close(s->avr);
82
+        avresample_free(&s->avr);
83
+    }
84
+}
85
+
86
+static int config_props(AVFilterLink *link)
87
+{
88
+    ASyncContext *s = link->src->priv;
89
+    int ret;
90
+
91
+    s->min_delta = s->min_delta_sec * link->sample_rate;
92
+    link->time_base = (AVRational){1, link->sample_rate};
93
+
94
+    s->avr = avresample_alloc_context();
95
+    if (!s->avr)
96
+        return AVERROR(ENOMEM);
97
+
98
+    av_opt_set_int(s->avr,  "in_channel_layout", link->channel_layout, 0);
99
+    av_opt_set_int(s->avr, "out_channel_layout", link->channel_layout, 0);
100
+    av_opt_set_int(s->avr,  "in_sample_fmt",     link->format,         0);
101
+    av_opt_set_int(s->avr, "out_sample_fmt",     link->format,         0);
102
+    av_opt_set_int(s->avr,  "in_sample_rate",    link->sample_rate,    0);
103
+    av_opt_set_int(s->avr, "out_sample_rate",    link->sample_rate,    0);
104
+
105
+    if (s->resample)
106
+        av_opt_set_int(s->avr, "force_resampling", 1, 0);
107
+
108
+    if ((ret = avresample_open(s->avr)) < 0)
109
+        return ret;
110
+
111
+    return 0;
112
+}
113
+
114
+static int request_frame(AVFilterLink *link)
115
+{
116
+    AVFilterContext *ctx = link->src;
117
+    ASyncContext      *s = ctx->priv;
118
+    int ret = avfilter_request_frame(ctx->inputs[0]);
119
+    int nb_samples;
120
+
121
+    /* flush the fifo */
122
+    if (ret == AVERROR_EOF && (nb_samples = avresample_get_delay(s->avr))) {
123
+        AVFilterBufferRef *buf = ff_get_audio_buffer(link, AV_PERM_WRITE,
124
+                                                     nb_samples);
125
+        if (!buf)
126
+            return AVERROR(ENOMEM);
127
+        avresample_convert(s->avr, (void**)buf->extended_data, buf->linesize[0],
128
+                           nb_samples, NULL, 0, 0);
129
+        buf->pts = s->pts;
130
+        ff_filter_samples(link, buf);
131
+        return 0;
132
+    }
133
+
134
+    return ret;
135
+}
136
+
137
+static void write_to_fifo(ASyncContext *s, AVFilterBufferRef *buf)
138
+{
139
+    avresample_convert(s->avr, NULL, 0, 0, (void**)buf->extended_data,
140
+                       buf->linesize[0], buf->audio->nb_samples);
141
+    avfilter_unref_buffer(buf);
142
+}
143
+
144
+/* get amount of data currently buffered, in samples */
145
+static int64_t get_delay(ASyncContext *s)
146
+{
147
+    return avresample_available(s->avr) + avresample_get_delay(s->avr);
148
+}
149
+
150
+static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
151
+{
152
+    AVFilterContext  *ctx = inlink->dst;
153
+    ASyncContext       *s = ctx->priv;
154
+    AVFilterLink *outlink = ctx->outputs[0];
155
+    int nb_channels = av_get_channel_layout_nb_channels(buf->audio->channel_layout);
156
+    int64_t pts = (buf->pts == AV_NOPTS_VALUE) ? buf->pts :
157
+                  av_rescale_q(buf->pts, inlink->time_base, outlink->time_base);
158
+    int out_size;
159
+    int64_t delta;
160
+
161
+    /* buffer data until we get the first timestamp */
162
+    if (s->pts == AV_NOPTS_VALUE) {
163
+        if (pts != AV_NOPTS_VALUE) {
164
+            s->pts = pts - get_delay(s);
165
+        }
166
+        write_to_fifo(s, buf);
167
+        return;
168
+    }
169
+
170
+    /* now wait for the next timestamp */
171
+    if (pts == AV_NOPTS_VALUE) {
172
+        write_to_fifo(s, buf);
173
+        return;
174
+    }
175
+
176
+    /* when we have two timestamps, compute how many samples would we have
177
+     * to add/remove to get proper sync between data and timestamps */
178
+    delta    = pts - s->pts - get_delay(s);
179
+    out_size = avresample_available(s->avr);
180
+
181
+    if (labs(delta) > s->min_delta) {
182
+        av_log(ctx, AV_LOG_VERBOSE, "Discontinuity - %"PRId64" samples.\n", delta);
183
+        out_size += delta;
184
+    } else if (s->resample) {
185
+        int comp = av_clip(delta, -s->max_comp, s->max_comp);
186
+        av_log(ctx, AV_LOG_VERBOSE, "Compensating %d samples per second.\n", comp);
187
+        avresample_set_compensation(s->avr, delta, inlink->sample_rate);
188
+    }
189
+
190
+    if (out_size > 0) {
191
+        AVFilterBufferRef *buf_out = ff_get_audio_buffer(outlink, AV_PERM_WRITE,
192
+                                                         out_size);
193
+        if (!buf_out)
194
+            return;
195
+
196
+        avresample_read(s->avr, (void**)buf_out->extended_data, out_size);
197
+        buf_out->pts = s->pts;
198
+
199
+        if (delta > 0) {
200
+            av_samples_set_silence(buf_out->extended_data, out_size - delta,
201
+                                   delta, nb_channels, buf->format);
202
+        }
203
+        ff_filter_samples(outlink, buf_out);
204
+    } else {
205
+        av_log(ctx, AV_LOG_WARNING, "Non-monotonous timestamps, dropping "
206
+               "whole buffer.\n");
207
+    }
208
+
209
+    /* drain any remaining buffered data */
210
+    avresample_read(s->avr, NULL, avresample_available(s->avr));
211
+
212
+    s->pts = pts - avresample_get_delay(s->avr);
213
+    avresample_convert(s->avr, NULL, 0, 0, (void**)buf->extended_data,
214
+                       buf->linesize[0], buf->audio->nb_samples);
215
+    avfilter_unref_buffer(buf);
216
+}
217
+
218
+AVFilter avfilter_af_asyncts = {
219
+    .name        = "asyncts",
220
+    .description = NULL_IF_CONFIG_SMALL("Sync audio data to timestamps"),
221
+
222
+    .init        = init,
223
+    .uninit      = uninit,
224
+
225
+    .priv_size   = sizeof(ASyncContext),
226
+
227
+    .inputs      = (const AVFilterPad[]) {{ .name           = "default",
228
+                                            .type           = AVMEDIA_TYPE_AUDIO,
229
+                                            .filter_samples = filter_samples },
230
+                                          { NULL }},
231
+    .outputs     = (const AVFilterPad[]) {{ .name           = "default",
232
+                                            .type           = AVMEDIA_TYPE_AUDIO,
233
+                                            .config_props   = config_props,
234
+                                            .request_frame  = request_frame },
235
+                                          { NULL }},
236
+};
... ...
@@ -32,6 +32,7 @@
32 32
 #include "libavutil/audioconvert.h"
33 33
 #include "avfilter.h"
34 34
 #include "audio.h"
35
+#include "formats.h"
35 36
 
36 37
 #define NUMTAPS 64
37 38
 
... ...
@@ -76,15 +77,19 @@ typedef struct {
76 76
 
77 77
 static int query_formats(AVFilterContext *ctx)
78 78
 {
79
+    int sample_rates[] = { 44100, -1 };
80
+
79 81
     AVFilterFormats *formats = NULL;
82
+    AVFilterChannelLayouts *layout = NULL;
83
+
80 84
     avfilter_add_format(&formats, AV_SAMPLE_FMT_S16);
81 85
     avfilter_set_common_sample_formats(ctx, formats);
82
-    formats = NULL;
83
-    avfilter_add_format(&formats, AV_CH_LAYOUT_STEREO);
84
-    avfilter_set_common_channel_layouts(ctx, formats);
86
+    ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO);
87
+    ff_set_common_channel_layouts(ctx, layout);
85 88
     formats = NULL;
86 89
     avfilter_add_format(&formats, AVFILTER_PACKED);
87 90
     avfilter_set_common_packing_formats(ctx, formats);
91
+    ff_set_common_samplerates(ctx, avfilter_make_format_list(sample_rates));
88 92
 
89 93
     return 0;
90 94
 }
... ...
@@ -33,6 +33,7 @@
33 33
 #include "libswresample/swresample.h"
34 34
 #include "audio.h"
35 35
 #include "avfilter.h"
36
+#include "formats.h"
36 37
 
37 38
 #define MAX_CHANNELS 63
38 39
 
... ...
@@ -212,7 +213,7 @@ static int query_formats(AVFilterContext *ctx)
212 212
     PanContext *pan = ctx->priv;
213 213
     AVFilterLink *inlink  = ctx->inputs[0];
214 214
     AVFilterLink *outlink = ctx->outputs[0];
215
-    AVFilterFormats *formats;
215
+    AVFilterChannelLayouts *layouts;
216 216
 
217 217
     pan->pure_gains = are_gains_pure(pan);
218 218
     /* libswr supports any sample and packing formats */
... ...
@@ -220,13 +221,13 @@ static int query_formats(AVFilterContext *ctx)
220 220
     avfilter_set_common_packing_formats(ctx, avfilter_make_all_packing_formats());
221 221
 
222 222
     // inlink supports any channel layout
223
-    formats = avfilter_make_all_channel_layouts();
224
-    avfilter_formats_ref(formats, &inlink->out_chlayouts);
223
+    layouts = ff_all_channel_layouts();
224
+    ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts);
225 225
 
226 226
     // outlink supports only requested output channel layout
227
-    formats = NULL;
228
-    avfilter_add_format(&formats, pan->out_channel_layout);
229
-    avfilter_formats_ref(formats, &outlink->in_chlayouts);
227
+    layouts = NULL;
228
+    ff_add_channel_layout(&layouts, pan->out_channel_layout);
229
+    ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts);
230 230
     return 0;
231 231
 }
232 232
 
... ...
@@ -31,6 +31,7 @@
31 31
 
32 32
 #include "audio.h"
33 33
 #include "avfilter.h"
34
+#include "formats.h"
34 35
 #include "internal.h"
35 36
 
36 37
 typedef struct ResampleContext {
... ...
@@ -56,10 +57,20 @@ static int query_formats(AVFilterContext *ctx)
56 56
 
57 57
     AVFilterFormats        *in_formats      = avfilter_all_formats(AVMEDIA_TYPE_AUDIO);
58 58
     AVFilterFormats        *out_formats     = avfilter_all_formats(AVMEDIA_TYPE_AUDIO);
59
+    AVFilterFormats        *in_samplerates  = ff_all_samplerates();
60
+    AVFilterFormats        *out_samplerates = ff_all_samplerates();
61
+    AVFilterChannelLayouts *in_layouts      = ff_all_channel_layouts();
62
+    AVFilterChannelLayouts *out_layouts     = ff_all_channel_layouts();
59 63
 
60 64
     avfilter_formats_ref(in_formats,  &inlink->out_formats);
61 65
     avfilter_formats_ref(out_formats, &outlink->in_formats);
62 66
 
67
+    avfilter_formats_ref(in_samplerates,  &inlink->out_samplerates);
68
+    avfilter_formats_ref(out_samplerates, &outlink->in_samplerates);
69
+
70
+    ff_channel_layouts_ref(in_layouts,  &inlink->out_channel_layouts);
71
+    ff_channel_layouts_ref(out_layouts, &outlink->in_channel_layouts);
72
+
63 73
     return 0;
64 74
 }
65 75
 
... ...
@@ -26,6 +26,7 @@
26 26
 #include "libavutil/opt.h"
27 27
 #include "libavutil/timestamp.h"
28 28
 #include "audio.h"
29
+#include "formats.h"
29 30
 #include "avfilter.h"
30 31
 
31 32
 typedef struct {
... ...
@@ -130,16 +131,17 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
130 130
 static int query_formats(AVFilterContext *ctx)
131 131
 {
132 132
     AVFilterFormats *formats = NULL;
133
+    AVFilterChannelLayouts *layouts = NULL;
133 134
     enum AVSampleFormat sample_fmts[] = {
134 135
         AV_SAMPLE_FMT_DBL,
135 136
         AV_SAMPLE_FMT_NONE
136 137
     };
137 138
     int packing_fmts[] = { AVFILTER_PACKED, -1 };
138 139
 
139
-    formats = avfilter_make_all_channel_layouts();
140
-    if (!formats)
140
+    layouts = ff_all_channel_layouts();
141
+    if (!layouts)
141 142
         return AVERROR(ENOMEM);
142
-    avfilter_set_common_channel_layouts(ctx, formats);
143
+    ff_set_common_channel_layouts(ctx, layouts);
143 144
 
144 145
     formats = avfilter_make_format_list(sample_fmts);
145 146
     if (!formats)
... ...
@@ -151,6 +153,11 @@ static int query_formats(AVFilterContext *ctx)
151 151
         return AVERROR(ENOMEM);
152 152
     avfilter_set_common_packing_formats(ctx, formats);
153 153
 
154
+    formats = ff_all_samplerates();
155
+    if (!formats)
156
+        return AVERROR(ENOMEM);
157
+    ff_set_common_samplerates(ctx, formats);
158
+
154 159
     return 0;
155 160
 }
156 161
 
... ...
@@ -28,6 +28,7 @@
28 28
 #include "libavutil/eval.h"
29 29
 #include "audio.h"
30 30
 #include "avfilter.h"
31
+#include "formats.h"
31 32
 
32 33
 typedef struct {
33 34
     double volume;
... ...
@@ -81,6 +82,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
81 81
 static int query_formats(AVFilterContext *ctx)
82 82
 {
83 83
     AVFilterFormats *formats = NULL;
84
+    AVFilterChannelLayouts *layouts;
84 85
     enum AVSampleFormat sample_fmts[] = {
85 86
         AV_SAMPLE_FMT_U8,
86 87
         AV_SAMPLE_FMT_S16,
... ...
@@ -91,10 +93,10 @@ static int query_formats(AVFilterContext *ctx)
91 91
     };
92 92
     int packing_fmts[] = { AVFILTER_PACKED, -1 };
93 93
 
94
-    formats = avfilter_make_all_channel_layouts();
95
-    if (!formats)
94
+    layouts = ff_all_channel_layouts();
95
+    if (!layouts)
96 96
         return AVERROR(ENOMEM);
97
-    avfilter_set_common_channel_layouts(ctx, formats);
97
+    ff_set_common_channel_layouts(ctx, layouts);
98 98
 
99 99
     formats = avfilter_make_format_list(sample_fmts);
100 100
     if (!formats)
... ...
@@ -106,6 +108,11 @@ static int query_formats(AVFilterContext *ctx)
106 106
         return AVERROR(ENOMEM);
107 107
     avfilter_set_common_packing_formats(ctx, formats);
108 108
 
109
+    formats = ff_all_samplerates();
110
+    if (!formats)
111
+        return AVERROR(ENOMEM);
112
+    ff_set_common_samplerates(ctx, formats);
113
+
109 114
     return 0;
110 115
 }
111 116
 
... ...
@@ -42,13 +42,13 @@ void avfilter_register_all(void)
42 42
     REGISTER_FILTER (ASHOWINFO,   ashowinfo,   af);
43 43
     REGISTER_FILTER (ASPLIT,      asplit,      af);
44 44
     REGISTER_FILTER (ASTREAMSYNC, astreamsync, af);
45
+    REGISTER_FILTER (ASYNCTS,     asyncts,     af);
45 46
     REGISTER_FILTER (EARWAX,      earwax,      af);
46 47
     REGISTER_FILTER (PAN,         pan,         af);
47 48
     REGISTER_FILTER (SILENCEDETECT, silencedetect, af);
48 49
     REGISTER_FILTER (VOLUME,      volume,      af);
49 50
     REGISTER_FILTER (RESAMPLE,    resample,    af);
50 51
 
51
-    REGISTER_FILTER (ABUFFER,     abuffer,     asrc);
52 52
     REGISTER_FILTER (AEVALSRC,    aevalsrc,    asrc);
53 53
     REGISTER_FILTER (AMOVIE,      amovie,      asrc);
54 54
     REGISTER_FILTER (ANULLSRC,    anullsrc,    asrc);
... ...
@@ -130,10 +130,18 @@ void avfilter_register_all(void)
130 130
         avfilter_register(&avfilter_vsrc_buffer);
131 131
     }
132 132
     {
133
+        extern AVFilter avfilter_asrc_abuffer;
134
+        avfilter_register(&avfilter_asrc_abuffer);
135
+    }
136
+    {
133 137
         extern AVFilter avfilter_vsink_buffer;
134 138
         avfilter_register(&avfilter_vsink_buffer);
135 139
     }
136 140
     {
141
+        extern AVFilter avfilter_asink_abuffer;
142
+        avfilter_register(&avfilter_asink_abuffer);
143
+    }
144
+    {
137 145
         extern AVFilter avfilter_vf_scale;
138 146
         avfilter_register(&avfilter_vf_scale);
139 147
     }
... ...
@@ -190,7 +190,7 @@ static int query_formats(AVFilterContext *ctx)
190 190
     int packing_fmts[] = { AVFILTER_PLANAR, -1 };
191 191
 
192 192
     avfilter_set_common_sample_formats (ctx, avfilter_make_format_list(sample_fmts));
193
-    avfilter_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts));
193
+    ff_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts));
194 194
     avfilter_set_common_packing_formats(ctx, avfilter_make_format_list(packing_fmts));
195 195
 
196 196
     return 0;
... ...
@@ -24,77 +24,6 @@
24 24
 #include "avcodec.h"
25 25
 #include "libavutil/opt.h"
26 26
 
27
-int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src)
28
-{
29
-    dst->pts    = src->pts;
30
-    dst->pos    = src->pkt_pos;
31
-    dst->format = src->format;
32
-
33
-    switch (dst->type) {
34
-    case AVMEDIA_TYPE_VIDEO:
35
-        dst->video->w                   = src->width;
36
-        dst->video->h                   = src->height;
37
-        dst->video->sample_aspect_ratio = src->sample_aspect_ratio;
38
-        dst->video->interlaced          = src->interlaced_frame;
39
-        dst->video->top_field_first     = src->top_field_first;
40
-        dst->video->key_frame           = src->key_frame;
41
-        dst->video->pict_type           = src->pict_type;
42
-        break;
43
-    case AVMEDIA_TYPE_AUDIO:
44
-        dst->audio->sample_rate         = src->sample_rate;
45
-        dst->audio->channel_layout      = src->channel_layout;
46
-        break;
47
-    default:
48
-        return AVERROR(EINVAL);
49
-    }
50
-
51
-    return 0;
52
-}
53
-
54
-int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src)
55
-{
56
-    int planes, nb_channels;
57
-
58
-    memcpy(dst->data, src->data, sizeof(dst->data));
59
-    memcpy(dst->linesize, src->linesize, sizeof(dst->linesize));
60
-
61
-    dst->pts     = src->pts;
62
-    dst->format  = src->format;
63
-
64
-    switch (src->type) {
65
-    case AVMEDIA_TYPE_VIDEO:
66
-        dst->width               = src->video->w;
67
-        dst->height              = src->video->h;
68
-        dst->sample_aspect_ratio = src->video->sample_aspect_ratio;
69
-        dst->interlaced_frame    = src->video->interlaced;
70
-        dst->top_field_first     = src->video->top_field_first;
71
-        dst->key_frame           = src->video->key_frame;
72
-        dst->pict_type           = src->video->pict_type;
73
-        break;
74
-    case AVMEDIA_TYPE_AUDIO:
75
-        nb_channels = av_get_channel_layout_nb_channels(src->audio->channel_layout);
76
-        planes      = av_sample_fmt_is_planar(src->format) ? nb_channels : 1;
77
-
78
-        if (planes > FF_ARRAY_ELEMS(dst->data)) {
79
-            dst->extended_data = av_mallocz(planes * sizeof(*dst->extended_data));
80
-            if (!dst->extended_data)
81
-                return AVERROR(ENOMEM);
82
-            memcpy(dst->extended_data, src->extended_data,
83
-                   planes * sizeof(dst->extended_data));
84
-        } else
85
-            dst->extended_data = dst->data;
86
-
87
-        dst->sample_rate         = src->audio->sample_rate;
88
-        dst->channel_layout      = src->audio->channel_layout;
89
-        dst->nb_samples          = src->audio->nb_samples;
90
-        break;
91
-    default:
92
-        return AVERROR(EINVAL);
93
-    }
94
-
95
-    return 0;
96
-}
97
-
98 27
 AVFilterBufferRef *avfilter_get_video_buffer_ref_from_frame(const AVFrame *frame,
99 28
                                                             int perms)
100 29
 {
... ...
@@ -24,11 +24,11 @@
24 24
 #include "libavutil/pixdesc.h"
25 25
 #include "libavutil/rational.h"
26 26
 #include "libavutil/audioconvert.h"
27
-#include "libavutil/imgutils.h"
28 27
 #include "libavutil/avassert.h"
29 28
 #include "libavutil/avstring.h"
30 29
 
31 30
 #include "avfilter.h"
31
+#include "formats.h"
32 32
 #include "internal.h"
33 33
 
34 34
 unsigned avfilter_version(void) {
... ...
@@ -47,7 +47,7 @@ const char *avfilter_license(void)
47 47
     return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
48 48
 }
49 49
 
50
-static void command_queue_pop(AVFilterContext *filter)
50
+void ff_command_queue_pop(AVFilterContext *filter)
51 51
 {
52 52
     AVFilterCommand *c= filter->command_queue;
53 53
     av_freep(&c->arg);
... ...
@@ -56,133 +56,6 @@ static void command_queue_pop(AVFilterContext *filter)
56 56
     av_free(c);
57 57
 }
58 58
 
59
-AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask)
60
-{
61
-    AVFilterBufferRef *ret = av_malloc(sizeof(AVFilterBufferRef));
62
-    if (!ret)
63
-        return NULL;
64
-    *ret = *ref;
65
-    if (ref->type == AVMEDIA_TYPE_VIDEO) {
66
-        ret->video = av_malloc(sizeof(AVFilterBufferRefVideoProps));
67
-        if (!ret->video) {
68
-            av_free(ret);
69
-            return NULL;
70
-        }
71
-        *ret->video = *ref->video;
72
-        ret->extended_data = ret->data;
73
-    } else if (ref->type == AVMEDIA_TYPE_AUDIO) {
74
-        ret->audio = av_malloc(sizeof(AVFilterBufferRefAudioProps));
75
-        if (!ret->audio) {
76
-            av_free(ret);
77
-            return NULL;
78
-        }
79
-        *ret->audio = *ref->audio;
80
-
81
-        if (ref->extended_data && ref->extended_data != ref->data) {
82
-            int nb_channels = av_get_channel_layout_nb_channels(ref->audio->channel_layout);
83
-            if (!(ret->extended_data = av_malloc(sizeof(*ret->extended_data) *
84
-                                                 nb_channels))) {
85
-                av_freep(&ret->audio);
86
-                av_freep(&ret);
87
-                return NULL;
88
-            }
89
-            memcpy(ret->extended_data, ref->extended_data,
90
-                   sizeof(*ret->extended_data) * nb_channels);
91
-        } else
92
-            ret->extended_data = ret->data;
93
-    }
94
-    ret->perms &= pmask;
95
-    ret->buf->refcount ++;
96
-    return ret;
97
-}
98
-
99
-static void free_pool(AVFilterPool *pool)
100
-{
101
-    int i;
102
-
103
-    av_assert0(pool->refcount > 0);
104
-
105
-    for (i = 0; i < POOL_SIZE; i++) {
106
-        if (pool->pic[i]) {
107
-            AVFilterBufferRef *picref = pool->pic[i];
108
-            /* free buffer: picrefs stored in the pool are not
109
-             * supposed to contain a free callback */
110
-            av_assert0(!picref->buf->refcount);
111
-            av_freep(&picref->buf->data[0]);
112
-            av_freep(&picref->buf);
113
-
114
-            av_freep(&picref->audio);
115
-            av_freep(&picref->video);
116
-            av_freep(&pool->pic[i]);
117
-            pool->count--;
118
-        }
119
-    }
120
-    pool->draining = 1;
121
-
122
-    if (!--pool->refcount) {
123
-        av_assert0(!pool->count);
124
-        av_free(pool);
125
-    }
126
-}
127
-
128
-static void store_in_pool(AVFilterBufferRef *ref)
129
-{
130
-    int i;
131
-    AVFilterPool *pool= ref->buf->priv;
132
-
133
-    av_assert0(ref->buf->data[0]);
134
-    av_assert0(pool->refcount>0);
135
-
136
-    if (pool->count == POOL_SIZE) {
137
-        AVFilterBufferRef *ref1 = pool->pic[0];
138
-        av_freep(&ref1->video);
139
-        av_freep(&ref1->audio);
140
-        av_freep(&ref1->buf->data[0]);
141
-        av_freep(&ref1->buf);
142
-        av_free(ref1);
143
-        memmove(&pool->pic[0], &pool->pic[1], sizeof(void*)*(POOL_SIZE-1));
144
-        pool->count--;
145
-        pool->pic[POOL_SIZE-1] = NULL;
146
-    }
147
-
148
-    for (i = 0; i < POOL_SIZE; i++) {
149
-        if (!pool->pic[i]) {
150
-            pool->pic[i] = ref;
151
-            pool->count++;
152
-            break;
153
-        }
154
-    }
155
-    if (pool->draining) {
156
-        free_pool(pool);
157
-    } else
158
-        --pool->refcount;
159
-}
160
-
161
-void avfilter_unref_buffer(AVFilterBufferRef *ref)
162
-{
163
-    if (!ref)
164
-        return;
165
-    av_assert0(ref->buf->refcount > 0);
166
-    if (!(--ref->buf->refcount)) {
167
-        if (!ref->buf->free) {
168
-            store_in_pool(ref);
169
-            return;
170
-        }
171
-        ref->buf->free(ref->buf);
172
-    }
173
-    if (ref->extended_data != ref->data)
174
-        av_freep(&ref->extended_data);
175
-    av_freep(&ref->video);
176
-    av_freep(&ref->audio);
177
-    av_free(ref);
178
-}
179
-
180
-void avfilter_unref_bufferp(AVFilterBufferRef **ref)
181
-{
182
-    avfilter_unref_buffer(*ref);
183
-    *ref = NULL;
184
-}
185
-
186 59
 void avfilter_insert_pad(unsigned idx, unsigned *count, size_t padidx_off,
187 60
                          AVFilterPad **pads, AVFilterLink ***links,
188 61
                          AVFilterPad *newpad)
... ...
@@ -240,7 +113,7 @@ void avfilter_link_free(AVFilterLink **link)
240 240
         return;
241 241
 
242 242
     if ((*link)->pool)
243
-        free_pool((*link)->pool);
243
+        ff_free_pool((*link)->pool);
244 244
 
245 245
     av_freep(link);
246 246
 }
... ...
@@ -272,12 +145,15 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
272 272
     if (link->out_formats)
273 273
         avfilter_formats_changeref(&link->out_formats,
274 274
                                    &filt->outputs[filt_dstpad_idx]->out_formats);
275
-    if (link->out_chlayouts)
276
-        avfilter_formats_changeref(&link->out_chlayouts,
277
-                                   &filt->outputs[filt_dstpad_idx]->out_chlayouts);
275
+    if (link->out_channel_layouts)
276
+        ff_channel_layouts_changeref(&link->out_channel_layouts,
277
+                                     &filt->outputs[filt_dstpad_idx]->out_channel_layouts);
278 278
     if (link->out_packing)
279 279
         avfilter_formats_changeref(&link->out_packing,
280 280
                                    &filt->outputs[filt_dstpad_idx]->out_packing);
281
+    if (link->out_samplerates)
282
+        avfilter_formats_changeref(&link->out_samplerates,
283
+                                   &filt->outputs[filt_dstpad_idx]->out_samplerates);
281 284
 
282 285
     return 0;
283 286
 }
... ...
@@ -329,6 +205,7 @@ int avfilter_config_links(AVFilterContext *filter)
329 329
                     link->sample_aspect_ratio = inlink ?
330 330
                         inlink->sample_aspect_ratio : (AVRational){1,1};
331 331
 
332
+#if 1
332 333
                 if (inlink) {
333 334
                     if (!link->w)
334 335
                         link->w = inlink->w;
... ...
@@ -359,6 +236,7 @@ int avfilter_config_links(AVFilterContext *filter)
359 359
                     link->time_base = (AVRational) {1, link->sample_rate};
360 360
             }
361 361
 
362
+#endif
362 363
             if ((config_link = link->dstpad->config_props))
363 364
                 if ((ret = config_link(link)) < 0)
364 365
                     return ret;
... ...
@@ -370,47 +248,6 @@ int avfilter_config_links(AVFilterContext *filter)
370 370
     return 0;
371 371
 }
372 372
 
373
-static char *ff_get_ref_perms_string(char *buf, size_t buf_size, int perms)
374
-{
375
-    snprintf(buf, buf_size, "%s%s%s%s%s%s",
376
-             perms & AV_PERM_READ      ? "r" : "",
377
-             perms & AV_PERM_WRITE     ? "w" : "",
378
-             perms & AV_PERM_PRESERVE  ? "p" : "",
379
-             perms & AV_PERM_REUSE     ? "u" : "",
380
-             perms & AV_PERM_REUSE2    ? "U" : "",
381
-             perms & AV_PERM_NEG_LINESIZES ? "n" : "");
382
-    return buf;
383
-}
384
-
385
-static void ff_dlog_ref(void *ctx, AVFilterBufferRef *ref, int end)
386
-{
387
-    av_unused char buf[16];
388
-    av_dlog(ctx,
389
-            "ref[%p buf:%p refcount:%d perms:%s data:%p linesize[%d, %d, %d, %d] pts:%"PRId64" pos:%"PRId64,
390
-            ref, ref->buf, ref->buf->refcount, ff_get_ref_perms_string(buf, sizeof(buf), ref->perms), ref->data[0],
391
-            ref->linesize[0], ref->linesize[1], ref->linesize[2], ref->linesize[3],
392
-            ref->pts, ref->pos);
393
-
394
-    if (ref->video) {
395
-        av_dlog(ctx, " a:%d/%d s:%dx%d i:%c iskey:%d type:%c",
396
-                ref->video->sample_aspect_ratio.num, ref->video->sample_aspect_ratio.den,
397
-                ref->video->w, ref->video->h,
398
-                !ref->video->interlaced     ? 'P' :         /* Progressive  */
399
-                ref->video->top_field_first ? 'T' : 'B',    /* Top / Bottom */
400
-                ref->video->key_frame,
401
-                av_get_picture_type_char(ref->video->pict_type));
402
-    }
403
-    if (ref->audio) {
404
-        av_dlog(ctx, " cl:%"PRId64"d n:%d r:%d p:%d",
405
-                ref->audio->channel_layout,
406
-                ref->audio->nb_samples,
407
-                ref->audio->sample_rate,
408
-                ref->audio->planar);
409
-    }
410
-
411
-    av_dlog(ctx, "]%s", end ? "\n" : "");
412
-}
413
-
414 373
 void ff_dlog_link(void *ctx, AVFilterLink *link, int end)
415 374
 {
416 375
     if (link->type == AVMEDIA_TYPE_VIDEO) {
... ...
@@ -435,71 +272,6 @@ void ff_dlog_link(void *ctx, AVFilterLink *link, int end)
435 435
     }
436 436
 }
437 437
 
438
-AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
439
-{
440
-    AVFilterBufferRef *ret = NULL;
441
-
442
-    av_unused char buf[16];
443
-    FF_DPRINTF_START(NULL, get_video_buffer); ff_dlog_link(NULL, link, 0);
444
-    av_dlog(NULL, " perms:%s w:%d h:%d\n", ff_get_ref_perms_string(buf, sizeof(buf), perms), w, h);
445
-
446
-    if (link->dstpad->get_video_buffer)
447
-        ret = link->dstpad->get_video_buffer(link, perms, w, h);
448
-
449
-    if (!ret)
450
-        ret = avfilter_default_get_video_buffer(link, perms, w, h);
451
-
452
-    if (ret)
453
-        ret->type = AVMEDIA_TYPE_VIDEO;
454
-
455
-    FF_DPRINTF_START(NULL, get_video_buffer); ff_dlog_link(NULL, link, 0); av_dlog(NULL, " returning "); ff_dlog_ref(NULL, ret, 1);
456
-
457
-    return ret;
458
-}
459
-
460
-AVFilterBufferRef *
461
-avfilter_get_video_buffer_ref_from_arrays(uint8_t * const data[4], const int linesize[4], int perms,
462
-                                          int w, int h, enum PixelFormat format)
463
-{
464
-    AVFilterBuffer *pic = av_mallocz(sizeof(AVFilterBuffer));
465
-    AVFilterBufferRef *picref = av_mallocz(sizeof(AVFilterBufferRef));
466
-
467
-    if (!pic || !picref)
468
-        goto fail;
469
-
470
-    picref->buf = pic;
471
-    picref->buf->free = ff_avfilter_default_free_buffer;
472
-    if (!(picref->video = av_mallocz(sizeof(AVFilterBufferRefVideoProps))))
473
-        goto fail;
474
-
475
-    pic->w = picref->video->w = w;
476
-    pic->h = picref->video->h = h;
477
-
478
-    /* make sure the buffer gets read permission or it's useless for output */
479
-    picref->perms = perms | AV_PERM_READ;
480
-
481
-    pic->refcount = 1;
482
-    picref->type = AVMEDIA_TYPE_VIDEO;
483
-    pic->format = picref->format = format;
484
-
485
-    memcpy(pic->data,        data,          4*sizeof(data[0]));
486
-    memcpy(pic->linesize,    linesize,      4*sizeof(linesize[0]));
487
-    memcpy(picref->data,     pic->data,     sizeof(picref->data));
488
-    memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
489
-
490
-    pic->   extended_data = pic->data;
491
-    picref->extended_data = picref->data;
492
-
493
-    return picref;
494
-
495
-fail:
496
-    if (picref && picref->video)
497
-        av_free(picref->video);
498
-    av_free(picref);
499
-    av_free(pic);
500
-    return NULL;
501
-}
502
-
503 438
 int avfilter_request_frame(AVFilterLink *link)
504 439
 {
505 440
     FF_DPRINTF_START(NULL, request_frame); ff_dlog_link(NULL, link, 1);
... ...
@@ -538,107 +310,6 @@ void ff_update_link_current_pts(AVFilterLink *link, int64_t pts)
538 538
         ff_avfilter_graph_update_heap(link->graph, link);
539 539
 }
540 540
 
541
-/* XXX: should we do the duplicating of the picture ref here, instead of
542
- * forcing the source filter to do it? */
543
-void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
544
-{
545
-    void (*start_frame)(AVFilterLink *, AVFilterBufferRef *);
546
-    AVFilterPad *dst = link->dstpad;
547
-    int perms = picref->perms;
548
-    AVFilterCommand *cmd= link->dst->command_queue;
549
-
550
-    FF_DPRINTF_START(NULL, start_frame); ff_dlog_link(NULL, link, 0); av_dlog(NULL, " "); ff_dlog_ref(NULL, picref, 1);
551
-
552
-    if (!(start_frame = dst->start_frame))
553
-        start_frame = avfilter_default_start_frame;
554
-
555
-    if (picref->linesize[0] < 0)
556
-        perms |= AV_PERM_NEG_LINESIZES;
557
-    /* prepare to copy the picture if it has insufficient permissions */
558
-    if ((dst->min_perms & perms) != dst->min_perms || dst->rej_perms & perms) {
559
-        av_log(link->dst, AV_LOG_DEBUG,
560
-                "frame copy needed (have perms %x, need %x, reject %x)\n",
561
-                picref->perms,
562
-                link->dstpad->min_perms, link->dstpad->rej_perms);
563
-
564
-        link->cur_buf = avfilter_get_video_buffer(link, dst->min_perms, link->w, link->h);
565
-        link->src_buf = picref;
566
-        avfilter_copy_buffer_ref_props(link->cur_buf, link->src_buf);
567
-    }
568
-    else
569
-        link->cur_buf = picref;
570
-
571
-    while(cmd && cmd->time <= picref->pts * av_q2d(link->time_base)){
572
-        av_log(link->dst, AV_LOG_DEBUG,
573
-               "Processing command time:%f command:%s arg:%s\n",
574
-               cmd->time, cmd->command, cmd->arg);
575
-        avfilter_process_command(link->dst, cmd->command, cmd->arg, 0, 0, cmd->flags);
576
-        command_queue_pop(link->dst);
577
-        cmd= link->dst->command_queue;
578
-    }
579
-
580
-    start_frame(link, link->cur_buf);
581
-    ff_update_link_current_pts(link, link->cur_buf->pts);
582
-}
583
-
584
-void avfilter_end_frame(AVFilterLink *link)
585
-{
586
-    void (*end_frame)(AVFilterLink *);
587
-
588
-    if (!(end_frame = link->dstpad->end_frame))
589
-        end_frame = avfilter_default_end_frame;
590
-
591
-    end_frame(link);
592
-
593
-    /* unreference the source picture if we're feeding the destination filter
594
-     * a copied version dues to permission issues */
595
-    if (link->src_buf) {
596
-        avfilter_unref_buffer(link->src_buf);
597
-        link->src_buf = NULL;
598
-    }
599
-}
600
-
601
-void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
602
-{
603
-    uint8_t *src[4], *dst[4];
604
-    int i, j, vsub;
605
-    void (*draw_slice)(AVFilterLink *, int, int, int);
606
-
607
-    FF_DPRINTF_START(NULL, draw_slice); ff_dlog_link(NULL, link, 0); av_dlog(NULL, " y:%d h:%d dir:%d\n", y, h, slice_dir);
608
-
609
-    /* copy the slice if needed for permission reasons */
610
-    if (link->src_buf) {
611
-        vsub = av_pix_fmt_descriptors[link->format].log2_chroma_h;
612
-
613
-        for (i = 0; i < 4; i++) {
614
-            if (link->src_buf->data[i]) {
615
-                src[i] = link->src_buf-> data[i] +
616
-                    (y >> (i==1 || i==2 ? vsub : 0)) * link->src_buf-> linesize[i];
617
-                dst[i] = link->cur_buf->data[i] +
618
-                    (y >> (i==1 || i==2 ? vsub : 0)) * link->cur_buf->linesize[i];
619
-            } else
620
-                src[i] = dst[i] = NULL;
621
-        }
622
-
623
-        for (i = 0; i < 4; i++) {
624
-            int planew =
625
-                av_image_get_linesize(link->format, link->cur_buf->video->w, i);
626
-
627
-            if (!src[i]) continue;
628
-
629
-            for (j = 0; j < h >> (i==1 || i==2 ? vsub : 0); j++) {
630
-                memcpy(dst[i], src[i], planew);
631
-                src[i] += link->src_buf->linesize[i];
632
-                dst[i] += link->cur_buf->linesize[i];
633
-            }
634
-        }
635
-    }
636
-
637
-    if (!(draw_slice = link->dstpad->draw_slice))
638
-        draw_slice = avfilter_default_draw_slice;
639
-    draw_slice(link, y, h, slice_dir);
640
-}
641
-
642 541
 int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags)
643 542
 {
644 543
     if(!strcmp(cmd, "ping")){
... ...
@@ -788,6 +459,10 @@ void avfilter_free(AVFilterContext *filter)
788 788
                 link->src->outputs[link->srcpad - link->src->output_pads] = NULL;
789 789
             avfilter_formats_unref(&link->in_formats);
790 790
             avfilter_formats_unref(&link->out_formats);
791
+            avfilter_formats_unref(&link->in_samplerates);
792
+            avfilter_formats_unref(&link->out_samplerates);
793
+            ff_channel_layouts_unref(&link->in_channel_layouts);
794
+            ff_channel_layouts_unref(&link->out_channel_layouts);
791 795
         }
792 796
         avfilter_link_free(&link);
793 797
     }
... ...
@@ -797,6 +472,10 @@ void avfilter_free(AVFilterContext *filter)
797 797
                 link->dst->inputs[link->dstpad - link->dst->input_pads] = NULL;
798 798
             avfilter_formats_unref(&link->in_formats);
799 799
             avfilter_formats_unref(&link->out_formats);
800
+            avfilter_formats_unref(&link->in_samplerates);
801
+            avfilter_formats_unref(&link->out_samplerates);
802
+            ff_channel_layouts_unref(&link->in_channel_layouts);
803
+            ff_channel_layouts_unref(&link->out_channel_layouts);
800 804
         }
801 805
         avfilter_link_free(&link);
802 806
     }
... ...
@@ -808,7 +487,7 @@ void avfilter_free(AVFilterContext *filter)
808 808
     av_freep(&filter->outputs);
809 809
     av_freep(&filter->priv);
810 810
     while(filter->command_queue){
811
-        command_queue_pop(filter);
811
+        ff_command_queue_pop(filter);
812 812
     }
813 813
     av_free(filter);
814 814
 }
... ...
@@ -821,16 +500,3 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
821 821
         ret = filter->filter->init(filter, args, opaque);
822 822
     return ret;
823 823
 }
824
-
825
-void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src)
826
-{
827
-    // copy common properties
828
-    dst->pts             = src->pts;
829
-    dst->pos             = src->pos;
830
-
831
-    switch (src->type) {
832
-    case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break;
833
-    case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break;
834
-    default: break;
835
-    }
836
-}
... ...
@@ -258,8 +258,8 @@ void avfilter_unref_bufferp(AVFilterBufferRef **ref);
258 258
  * pointer to each of the pointers to itself.
259 259
  */
260 260
 typedef struct AVFilterFormats {
261
-    unsigned format_count;      ///< number of formats
262 261
     int64_t *formats;           ///< list of media formats
262
+    unsigned format_count;      ///< number of formats
263 263
 
264 264
     unsigned refcount;          ///< number of references to this list
265 265
     struct AVFilterFormats ***refs; ///< references to this list
... ...
@@ -274,7 +274,6 @@ typedef struct AVFilterFormats {
274 274
  * @return the format list, with no existing references
275 275
  */
276 276
 AVFilterFormats *avfilter_make_format_list(const int *fmts);
277
-AVFilterFormats *avfilter_make_format64_list(const int64_t *fmts);
278 277
 
279 278
 /**
280 279
  * Add fmt to the list of media formats contained in *avff.
... ...
@@ -305,11 +304,6 @@ AVFilterFormats *avfilter_make_all_formats(enum AVMediaType type);
305 305
 extern const int64_t avfilter_all_channel_layouts[];
306 306
 
307 307
 /**
308
- * Return a list of all channel layouts supported by FFmpeg.
309
- */
310
-AVFilterFormats *avfilter_make_all_channel_layouts(void);
311
-
312
-/**
313 308
  * Return a list of all audio packing formats.
314 309
  */
315 310
 AVFilterFormats *avfilter_make_all_packing_formats(void);
... ...
@@ -521,6 +515,7 @@ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link,
521 521
  * formats/layouts. If there are no links hooked to this filter, the list
522 522
  * of formats is freed.
523 523
  */
524
+void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats);
524 525
 void avfilter_set_common_pixel_formats(AVFilterContext *ctx, AVFilterFormats *formats);
525 526
 void avfilter_set_common_sample_formats(AVFilterContext *ctx, AVFilterFormats *formats);
526 527
 void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *formats);
... ...
@@ -674,8 +669,6 @@ struct AVFilterLink {
674 674
     AVFilterFormats *in_formats;
675 675
     AVFilterFormats *out_formats;
676 676
 
677
-    AVFilterFormats *in_chlayouts;
678
-    AVFilterFormats *out_chlayouts;
679 677
     AVFilterFormats *in_packing;
680 678
     AVFilterFormats *out_packing;
681 679
 
... ...
@@ -713,17 +706,26 @@ struct AVFilterLink {
713 713
      */
714 714
     int64_t current_pts;
715 715
 
716
-    /**
717
-     * Private fields
718
-     *
719
-     * The following fields are for internal use only.
720
-     * Their type, offset, number and semantic can change without notice.
716
+    /*****************************************************************
717
+     * All fields below this line are not part of the public API. They
718
+     * may not be used outside of libavfilter and can be changed and
719
+     * removed at will.
720
+     * New public fields should be added right above.
721
+     *****************************************************************
721 722
      */
722
-
723 723
     /**
724 724
      * Index in the age array.
725 725
      */
726 726
     int age_index;
727
+
728
+    /**
729
+     * Lists of channel layouts and sample rates used for automatic
730
+     * negotiation.
731
+     */
732
+    AVFilterFormats  *in_samplerates;
733
+    AVFilterFormats *out_samplerates;
734
+    struct AVFilterChannelLayouts  *in_channel_layouts;
735
+    struct AVFilterChannelLayouts *out_channel_layouts;
727 736
 };
728 737
 
729 738
 /**
... ...
@@ -28,8 +28,10 @@
28 28
 #include "libavutil/pixdesc.h"
29 29
 #include "avfilter.h"
30 30
 #include "avfiltergraph.h"
31
+#include "formats.h"
31 32
 #include "internal.h"
32 33
 
34
+#include "libavutil/audioconvert.h"
33 35
 #include "libavutil/log.h"
34 36
 
35 37
 static const AVClass filtergraph_class = {
... ...
@@ -198,10 +200,10 @@ static int insert_conv_filter(AVFilterGraph *graph, AVFilterLink *link,
198 198
 
199 199
     if (link->type == AVMEDIA_TYPE_AUDIO &&
200 200
          (((link = filt_ctx-> inputs[0]) &&
201
-           (!avfilter_merge_formats(link->in_chlayouts, link->out_chlayouts) ||
201
+           (!ff_merge_channel_layouts(link->in_channel_layouts, link->out_channel_layouts) ||
202 202
             !avfilter_merge_formats(link->in_packing,   link->out_packing))) ||
203 203
          ((link = filt_ctx->outputs[0]) &&
204
-           (!avfilter_merge_formats(link->in_chlayouts, link->out_chlayouts) ||
204
+           (!ff_merge_channel_layouts(link->in_channel_layouts, link->out_channel_layouts) ||
205 205
             !avfilter_merge_formats(link->in_packing,   link->out_packing))))
206 206
        ) {
207 207
         av_log(NULL, AV_LOG_ERROR,
... ...
@@ -217,7 +219,10 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
217 217
 {
218 218
     int i, j, ret;
219 219
     char filt_args[128];
220
-    AVFilterFormats *formats, *chlayouts, *packing;
220
+    AVFilterFormats *formats, *packing;
221
+    AVFilterChannelLayouts *chlayouts;
222
+    AVFilterFormats *samplerates;
223
+    int scaler_count = 0, resampler_count = 0;
221 224
 
222 225
     /* ask all the sub-filters for their supported media formats */
223 226
     for (i = 0; i < graph->filter_count; i++) {
... ...
@@ -233,6 +238,7 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
233 233
 
234 234
         for (j = 0; j < filter->input_count; j++) {
235 235
             AVFilterLink *link = filter->inputs[j];
236
+#if 0
236 237
             if (!link) continue;
237 238
 
238 239
             if (!link->in_formats || !link->out_formats)
... ...
@@ -248,7 +254,7 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
248 248
                     return ret;
249 249
             }
250 250
             else if (link->type == AVMEDIA_TYPE_AUDIO) {
251
-                if (!link->in_chlayouts || !link->out_chlayouts ||
251
+                if (!link->in_channel_layouts || !link->out_channel_layouts ||
252 252
                     !link->in_packing   || !link->out_packing)
253 253
                     return AVERROR(EINVAL);
254 254
 
... ...
@@ -256,11 +262,100 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
256 256
                  * three categories, aconvert will use a common format
257 257
                  * whenever possible. */
258 258
                 formats   = avfilter_merge_formats(link->in_formats,   link->out_formats);
259
-                chlayouts = avfilter_merge_formats(link->in_chlayouts, link->out_chlayouts);
259
+                chlayouts   = ff_merge_channel_layouts(link->in_channel_layouts  , link->out_channel_layouts);
260
+                samplerates = ff_merge_samplerates    (link->in_samplerates, link->out_samplerates);
260 261
                 packing   = avfilter_merge_formats(link->in_packing,   link->out_packing);
261
-                if (!formats || !chlayouts || !packing)
262
+
263
+                if (!formats || !chlayouts || !packing || !samplerates)
262 264
                     if (ret = insert_conv_filter(graph, link, "aconvert", NULL))
263 265
                        return ret;
266
+#else
267
+            int convert_needed = 0;
268
+
269
+            if (!link)
270
+                continue;
271
+
272
+            if (link->in_formats != link->out_formats &&
273
+                !avfilter_merge_formats(link->in_formats,
274
+                                        link->out_formats))
275
+                convert_needed = 1;
276
+            if (link->type == AVMEDIA_TYPE_AUDIO) {
277
+                if (link->in_channel_layouts != link->out_channel_layouts &&
278
+                    !ff_merge_channel_layouts(link->in_channel_layouts,
279
+                                              link->out_channel_layouts))
280
+                    convert_needed = 1;
281
+                if (link->in_samplerates != link->out_samplerates &&
282
+                    !ff_merge_samplerates(link->in_samplerates,
283
+                                          link->out_samplerates))
284
+                    convert_needed = 1;
285
+            }
286
+
287
+            if (convert_needed) {
288
+                AVFilterContext *convert;
289
+                AVFilter *filter;
290
+                AVFilterLink *inlink, *outlink;
291
+                char scale_args[256];
292
+                char inst_name[30];
293
+
294
+                /* couldn't merge format lists. auto-insert conversion filter */
295
+                switch (link->type) {
296
+                case AVMEDIA_TYPE_VIDEO:
297
+                    snprintf(inst_name, sizeof(inst_name), "auto-inserted scaler %d",
298
+                             scaler_count++);
299
+                    snprintf(scale_args, sizeof(scale_args), "0:0:%s", graph->scale_sws_opts);
300
+                    if ((ret = avfilter_graph_create_filter(&convert,
301
+                                                            avfilter_get_by_name("scale"),
302
+                                                            inst_name, scale_args, NULL,
303
+                                                            graph)) < 0)
304
+                        return ret;
305
+                    break;
306
+                case AVMEDIA_TYPE_AUDIO:
307
+                    if (!(filter = avfilter_get_by_name("resample"))) {
308
+                        av_log(log_ctx, AV_LOG_ERROR, "'resample' filter "
309
+                               "not present, cannot convert audio formats.\n");
310
+                        return AVERROR(EINVAL);
311
+                    }
312
+
313
+                    snprintf(inst_name, sizeof(inst_name), "auto-inserted resampler %d",
314
+                             resampler_count++);
315
+                    if ((ret = avfilter_graph_create_filter(&convert,
316
+                                                            avfilter_get_by_name("resample"),
317
+                                                            inst_name, NULL, NULL, graph)) < 0)
318
+                        return ret;
319
+                    break;
320
+                default:
321
+                    return AVERROR(EINVAL);
322
+                }
323
+
324
+                if ((ret = avfilter_insert_filter(link, convert, 0, 0)) < 0)
325
+                    return ret;
326
+
327
+                convert->filter->query_formats(convert);
328
+                inlink  = convert->inputs[0];
329
+                outlink = convert->outputs[0];
330
+                if (!avfilter_merge_formats( inlink->in_formats,  inlink->out_formats) ||
331
+                    !avfilter_merge_formats(outlink->in_formats, outlink->out_formats))
332
+                    ret |= AVERROR(ENOSYS);
333
+                if (inlink->type == AVMEDIA_TYPE_AUDIO &&
334
+                    (!ff_merge_samplerates(inlink->in_samplerates,
335
+                                           inlink->out_samplerates) ||
336
+                     !ff_merge_channel_layouts(inlink->in_channel_layouts,
337
+                                               inlink->out_channel_layouts)))
338
+                    ret |= AVERROR(ENOSYS);
339
+                if (outlink->type == AVMEDIA_TYPE_AUDIO &&
340
+                    (!ff_merge_samplerates(outlink->in_samplerates,
341
+                                           outlink->out_samplerates) ||
342
+                     !ff_merge_channel_layouts(outlink->in_channel_layouts,
343
+                                               outlink->out_channel_layouts)))
344
+                    ret |= AVERROR(ENOSYS);
345
+
346
+                if (ret < 0) {
347
+                    av_log(log_ctx, AV_LOG_ERROR,
348
+                           "Impossible to convert between the formats supported by the filter "
349
+                           "'%s' and the filter '%s'\n", link->src->name, link->dst->name);
350
+                    return ret;
351
+                }
352
+#endif
264 353
             }
265 354
         }
266 355
     }
... ...
@@ -268,10 +363,10 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
268 268
     return 0;
269 269
 }
270 270
 
271
-static void pick_format(AVFilterLink *link, AVFilterLink *ref)
271
+static int pick_format(AVFilterLink *link, AVFilterLink *ref)
272 272
 {
273 273
     if (!link || !link->in_formats)
274
-        return;
274
+        return 0;
275 275
 
276 276
     if (link->type == AVMEDIA_TYPE_VIDEO) {
277 277
         if(ref && ref->type == AVMEDIA_TYPE_VIDEO){
... ...
@@ -288,50 +383,83 @@ static void pick_format(AVFilterLink *link, AVFilterLink *ref)
288 288
 
289 289
     link->in_formats->format_count = 1;
290 290
     link->format = link->in_formats->formats[0];
291
-    avfilter_formats_unref(&link->in_formats);
292
-    avfilter_formats_unref(&link->out_formats);
293 291
 
294 292
     if (link->type == AVMEDIA_TYPE_AUDIO) {
295
-        link->in_chlayouts->format_count = 1;
296
-        link->channel_layout = link->in_chlayouts->formats[0];
297
-        avfilter_formats_unref(&link->in_chlayouts);
298
-        avfilter_formats_unref(&link->out_chlayouts);
299
-
300
-        link->in_packing->format_count = 1;
301
-        link->planar = link->in_packing->formats[0] == AVFILTER_PLANAR;
302
-        avfilter_formats_unref(&link->in_packing);
303
-        avfilter_formats_unref(&link->out_packing);
293
+        if (!link->in_samplerates->format_count) {
294
+            av_log(link->src, AV_LOG_ERROR, "Cannot select sample rate for"
295
+                   " the link between filters %s and %s.\n", link->src->name,
296
+                   link->dst->name);
297
+            return AVERROR(EINVAL);
298
+        }
299
+        link->in_samplerates->format_count = 1;
300
+        link->sample_rate = link->in_samplerates->formats[0];
301
+
302
+        if (!link->in_channel_layouts->nb_channel_layouts) {
303
+            av_log(link->src, AV_LOG_ERROR, "Cannot select channel layout for"
304
+                   "the link between filters %s and %s.\n", link->src->name,
305
+                   link->dst->name);
306
+            return AVERROR(EINVAL);
307
+        }
308
+        link->in_channel_layouts->nb_channel_layouts = 1;
309
+        link->channel_layout = link->in_channel_layouts->channel_layouts[0];
304 310
     }
311
+
312
+    avfilter_formats_unref(&link->in_formats);
313
+    avfilter_formats_unref(&link->out_formats);
314
+    avfilter_formats_unref(&link->in_samplerates);
315
+    avfilter_formats_unref(&link->out_samplerates);
316
+    ff_channel_layouts_unref(&link->in_channel_layouts);
317
+    ff_channel_layouts_unref(&link->out_channel_layouts);
318
+
319
+    return 0;
305 320
 }
306 321
 
322
+#define REDUCE_FORMATS(fmt_type, list_type, list, var, nb, add_format) \
323
+do {                                                                   \
324
+    for (i = 0; i < filter->input_count; i++) {                        \
325
+        AVFilterLink *link = filter->inputs[i];                        \
326
+        fmt_type fmt;                                                  \
327
+                                                                       \
328
+        if (!link->out_ ## list || link->out_ ## list->nb != 1)        \
329
+            continue;                                                  \
330
+        fmt = link->out_ ## list->var[0];                              \
331
+                                                                       \
332
+        for (j = 0; j < filter->output_count; j++) {                   \
333
+            AVFilterLink *out_link = filter->outputs[j];               \
334
+            list_type *fmts;                                           \
335
+                                                                       \
336
+            if (link->type != out_link->type ||                        \
337
+                out_link->in_ ## list->nb == 1)                        \
338
+                continue;                                              \
339
+            fmts = out_link->in_ ## list;                              \
340
+                                                                       \
341
+            if (!out_link->in_ ## list->nb) {                          \
342
+                add_format(&out_link->in_ ##list, fmt);                \
343
+                break;                                                 \
344
+            }                                                          \
345
+                                                                       \
346
+            for (k = 0; k < out_link->in_ ## list->nb; k++)            \
347
+                if (fmts->var[k] == fmt) {                             \
348
+                    fmts->var[0]  = fmt;                               \
349
+                    fmts->nb = 1;                                      \
350
+                    ret = 1;                                           \
351
+                    break;                                             \
352
+                }                                                      \
353
+        }                                                              \
354
+    }                                                                  \
355
+} while (0)
356
+
307 357
 static int reduce_formats_on_filter(AVFilterContext *filter)
308 358
 {
309 359
     int i, j, k, ret = 0;
310 360
 
311
-    for (i = 0; i < filter->input_count; i++) {
312
-        AVFilterLink *link = filter->inputs[i];
313
-        int         format = link->out_formats->formats[0];
314
-
315
-        if (link->out_formats->format_count != 1)
316
-            continue;
317
-
318
-        for (j = 0; j < filter->output_count; j++) {
319
-            AVFilterLink *out_link = filter->outputs[j];
320
-            AVFilterFormats  *fmts = out_link->in_formats;
321
-
322
-            if (link->type != out_link->type ||
323
-                out_link->in_formats->format_count == 1)
324
-                continue;
361
+    REDUCE_FORMATS(int,      AVFilterFormats,        formats,         formats,
362
+                   format_count, avfilter_add_format);
363
+    REDUCE_FORMATS(int,      AVFilterFormats,        samplerates,     formats,
364
+                   format_count, avfilter_add_format);
365
+    REDUCE_FORMATS(uint64_t, AVFilterChannelLayouts, channel_layouts,
366
+                   channel_layouts, nb_channel_layouts, ff_add_channel_layout);
325 367
 
326
-            for (k = 0; k < out_link->in_formats->format_count; k++)
327
-                if (fmts->formats[k] == format) {
328
-                    fmts->formats[0]   = format;
329
-                    fmts->format_count = 1;
330
-                    ret = 1;
331
-                    break;
332
-                }
333
-        }
334
-    }
335 368
     return ret;
336 369
 }
337 370
 
... ...
@@ -347,9 +475,109 @@ static void reduce_formats(AVFilterGraph *graph)
347 347
     } while (reduced);
348 348
 }
349 349
 
350
-static void pick_formats(AVFilterGraph *graph)
350
+static void swap_samplerates_on_filter(AVFilterContext *filter)
351
+{
352
+    AVFilterLink *link = NULL;
353
+    int sample_rate;
354
+    int i, j;
355
+
356
+    for (i = 0; i < filter->input_count; i++) {
357
+        link = filter->inputs[i];
358
+
359
+        if (link->type == AVMEDIA_TYPE_AUDIO &&
360
+            link->out_samplerates->format_count == 1)
361
+            break;
362
+    }
363
+    if (i == filter->input_count)
364
+        return;
365
+
366
+    sample_rate = link->out_samplerates->formats[0];
367
+
368
+    for (i = 0; i < filter->output_count; i++) {
369
+        AVFilterLink *outlink = filter->outputs[i];
370
+        int best_idx, best_diff = INT_MAX;
371
+
372
+        if (outlink->type != AVMEDIA_TYPE_AUDIO ||
373
+            outlink->in_samplerates->format_count < 2)
374
+            continue;
375
+
376
+        for (j = 0; j < outlink->in_samplerates->format_count; j++) {
377
+            int diff = abs(sample_rate - outlink->in_samplerates->formats[j]);
378
+
379
+            if (diff < best_diff) {
380
+                best_diff = diff;
381
+                best_idx  = j;
382
+            }
383
+        }
384
+        FFSWAP(int, outlink->in_samplerates->formats[0],
385
+               outlink->in_samplerates->formats[best_idx]);
386
+    }
387
+}
388
+
389
+static void swap_samplerates(AVFilterGraph *graph)
351 390
 {
391
+    int i;
392
+
393
+    for (i = 0; i < graph->filter_count; i++)
394
+        swap_samplerates_on_filter(graph->filters[i]);
395
+}
396
+
397
+static void swap_channel_layouts_on_filter(AVFilterContext *filter)
398
+{
399
+    AVFilterLink *link = NULL;
400
+    uint64_t chlayout;
352 401
     int i, j;
402
+
403
+    for (i = 0; i < filter->input_count; i++) {
404
+        link = filter->inputs[i];
405
+
406
+        if (link->type == AVMEDIA_TYPE_AUDIO &&
407
+            link->out_channel_layouts->nb_channel_layouts == 1)
408
+            break;
409
+    }
410
+    if (i == filter->input_count)
411
+        return;
412
+
413
+    chlayout = link->out_channel_layouts->channel_layouts[0];
414
+
415
+    for (i = 0; i < filter->output_count; i++) {
416
+        AVFilterLink *outlink = filter->outputs[i];
417
+        int best_idx, best_score = INT_MIN;
418
+
419
+        if (outlink->type != AVMEDIA_TYPE_AUDIO ||
420
+            outlink->in_channel_layouts->nb_channel_layouts < 2)
421
+            continue;
422
+
423
+        for (j = 0; j < outlink->in_channel_layouts->nb_channel_layouts; j++) {
424
+            uint64_t out_chlayout = outlink->in_channel_layouts->channel_layouts[j];
425
+            int matched_channels  = av_get_channel_layout_nb_channels(chlayout &
426
+                                                                      out_chlayout);
427
+            int extra_channels     = av_get_channel_layout_nb_channels(out_chlayout &
428
+                                                                       (~chlayout));
429
+            int score = matched_channels - extra_channels;
430
+
431
+            if (score > best_score) {
432
+                best_score = score;
433
+                best_idx   = j;
434
+            }
435
+        }
436
+        FFSWAP(uint64_t, outlink->in_channel_layouts->channel_layouts[0],
437
+               outlink->in_channel_layouts->channel_layouts[best_idx]);
438
+    }
439
+
440
+}
441
+
442
+static void swap_channel_layouts(AVFilterGraph *graph)
443
+{
444
+    int i;
445
+
446
+    for (i = 0; i < graph->filter_count; i++)
447
+        swap_channel_layouts_on_filter(graph->filters[i]);
448
+}
449
+
450
+static int pick_formats(AVFilterGraph *graph)
451
+{
452
+    int i, j, ret;
353 453
     int change;
354 454
 
355 455
     do{
... ...
@@ -385,13 +613,15 @@ static void pick_formats(AVFilterGraph *graph)
385 385
 
386 386
     for (i = 0; i < graph->filter_count; i++) {
387 387
         AVFilterContext *filter = graph->filters[i];
388
-        if (1) {
389
-            for (j = 0; j < filter->input_count; j++)
390
-                pick_format(filter->inputs[j], NULL);
391
-            for (j = 0; j < filter->output_count; j++)
392
-                pick_format(filter->outputs[j], NULL);
393
-        }
388
+
389
+        for (j = 0; j < filter->input_count; j++)
390
+            if ((ret = pick_format(filter->inputs[j], NULL)) < 0)
391
+                return ret;
392
+        for (j = 0; j < filter->output_count; j++)
393
+            if ((ret = pick_format(filter->outputs[j], NULL)) < 0)
394
+                return ret;
394 395
     }
396
+    return 0;
395 397
 }
396 398
 
397 399
 int ff_avfilter_graph_config_formats(AVFilterGraph *graph, AVClass *log_ctx)
... ...
@@ -407,7 +637,13 @@ int ff_avfilter_graph_config_formats(AVFilterGraph *graph, AVClass *log_ctx)
407 407
      * of format conversion inside filters */
408 408
     reduce_formats(graph);
409 409
 
410
-    pick_formats(graph);
410
+    /* for audio filters, ensure the best sample rate and channel layout
411
+     * is selected */
412
+    swap_samplerates(graph);
413
+    swap_channel_layouts(graph);
414
+
415
+    if ((ret = pick_formats(graph)) < 0)
416
+        return ret;
411 417
 
412 418
     return 0;
413 419
 }
414 420
new file mode 100644
... ...
@@ -0,0 +1,244 @@
0
+/*
1
+ * This file is part of FFmpeg.
2
+ *
3
+ * FFmpeg is free software; you can redistribute it and/or
4
+ * modify it under the terms of the GNU Lesser General Public
5
+ * License as published by the Free Software Foundation; either
6
+ * version 2.1 of the License, or (at your option) any later version.
7
+ *
8
+ * FFmpeg is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11
+ * Lesser General Public License for more details.
12
+ *
13
+ * You should have received a copy of the GNU Lesser General Public
14
+ * License along with FFmpeg; if not, write to the Free Software
15
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+ */
17
+
18
+#include "libavutil/audioconvert.h"
19
+#include "libavutil/avassert.h"
20
+#include "libavcodec/avcodec.h"
21
+
22
+#include "avfilter.h"
23
+#include "internal.h"
24
+#include "avcodec.h"
25
+
26
+void ff_avfilter_default_free_buffer(AVFilterBuffer *ptr)
27
+{
28
+    if (ptr->extended_data != ptr->data)
29
+        av_freep(&ptr->extended_data);
30
+    av_free(ptr->data[0]);
31
+    av_free(ptr);
32
+}
33
+
34
+AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask)
35
+{
36
+    AVFilterBufferRef *ret = av_malloc(sizeof(AVFilterBufferRef));
37
+    if (!ret)
38
+        return NULL;
39
+    *ret = *ref;
40
+    if (ref->type == AVMEDIA_TYPE_VIDEO) {
41
+        ret->video = av_malloc(sizeof(AVFilterBufferRefVideoProps));
42
+        if (!ret->video) {
43
+            av_free(ret);
44
+            return NULL;
45
+        }
46
+        *ret->video = *ref->video;
47
+        ret->extended_data = ret->data;
48
+    } else if (ref->type == AVMEDIA_TYPE_AUDIO) {
49
+        ret->audio = av_malloc(sizeof(AVFilterBufferRefAudioProps));
50
+        if (!ret->audio) {
51
+            av_free(ret);
52
+            return NULL;
53
+        }
54
+        *ret->audio = *ref->audio;
55
+
56
+        if (ref->extended_data && ref->extended_data != ref->data) {
57
+            int nb_channels = av_get_channel_layout_nb_channels(ref->audio->channel_layout);
58
+            if (!(ret->extended_data = av_malloc(sizeof(*ret->extended_data) *
59
+                                                 nb_channels))) {
60
+                av_freep(&ret->audio);
61
+                av_freep(&ret);
62
+                return NULL;
63
+            }
64
+            memcpy(ret->extended_data, ref->extended_data,
65
+                   sizeof(*ret->extended_data) * nb_channels);
66
+        } else
67
+            ret->extended_data = ret->data;
68
+    }
69
+    ret->perms &= pmask;
70
+    ret->buf->refcount ++;
71
+    return ret;
72
+}
73
+
74
+void ff_free_pool(AVFilterPool *pool)
75
+{
76
+    int i;
77
+
78
+    av_assert0(pool->refcount > 0);
79
+
80
+    for (i = 0; i < POOL_SIZE; i++) {
81
+        if (pool->pic[i]) {
82
+            AVFilterBufferRef *picref = pool->pic[i];
83
+            /* free buffer: picrefs stored in the pool are not
84
+             * supposed to contain a free callback */
85
+            av_assert0(!picref->buf->refcount);
86
+            av_freep(&picref->buf->data[0]);
87
+            av_freep(&picref->buf);
88
+
89
+            av_freep(&picref->audio);
90
+            av_freep(&picref->video);
91
+            av_freep(&pool->pic[i]);
92
+            pool->count--;
93
+        }
94
+    }
95
+    pool->draining = 1;
96
+
97
+    if (!--pool->refcount) {
98
+        av_assert0(!pool->count);
99
+        av_free(pool);
100
+    }
101
+}
102
+
103
+static void store_in_pool(AVFilterBufferRef *ref)
104
+{
105
+    int i;
106
+    AVFilterPool *pool= ref->buf->priv;
107
+
108
+    av_assert0(ref->buf->data[0]);
109
+    av_assert0(pool->refcount>0);
110
+
111
+    if (pool->count == POOL_SIZE) {
112
+        AVFilterBufferRef *ref1 = pool->pic[0];
113
+        av_freep(&ref1->video);
114
+        av_freep(&ref1->audio);
115
+        av_freep(&ref1->buf->data[0]);
116
+        av_freep(&ref1->buf);
117
+        av_free(ref1);
118
+        memmove(&pool->pic[0], &pool->pic[1], sizeof(void*)*(POOL_SIZE-1));
119
+        pool->count--;
120
+        pool->pic[POOL_SIZE-1] = NULL;
121
+    }
122
+
123
+    for (i = 0; i < POOL_SIZE; i++) {
124
+        if (!pool->pic[i]) {
125
+            pool->pic[i] = ref;
126
+            pool->count++;
127
+            break;
128
+        }
129
+    }
130
+    if (pool->draining) {
131
+        ff_free_pool(pool);
132
+    } else
133
+        --pool->refcount;
134
+}
135
+
136
+void avfilter_unref_buffer(AVFilterBufferRef *ref)
137
+{
138
+    if (!ref)
139
+        return;
140
+    av_assert0(ref->buf->refcount > 0);
141
+    if (!(--ref->buf->refcount)) {
142
+        if (!ref->buf->free) {
143
+            store_in_pool(ref);
144
+            return;
145
+        }
146
+        ref->buf->free(ref->buf);
147
+    }
148
+    if (ref->extended_data != ref->data)
149
+        av_freep(&ref->extended_data);
150
+    av_freep(&ref->video);
151
+    av_freep(&ref->audio);
152
+    av_free(ref);
153
+}
154
+
155
+void avfilter_unref_bufferp(AVFilterBufferRef **ref)
156
+{
157
+    avfilter_unref_buffer(*ref);
158
+    *ref = NULL;
159
+}
160
+
161
+int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src)
162
+{
163
+    dst->pts    = src->pts;
164
+    dst->pos    = src->pkt_pos;
165
+    dst->format = src->format;
166
+
167
+    switch (dst->type) {
168
+    case AVMEDIA_TYPE_VIDEO:
169
+        dst->video->w                   = src->width;
170
+        dst->video->h                   = src->height;
171
+        dst->video->sample_aspect_ratio = src->sample_aspect_ratio;
172
+        dst->video->interlaced          = src->interlaced_frame;
173
+        dst->video->top_field_first     = src->top_field_first;
174
+        dst->video->key_frame           = src->key_frame;
175
+        dst->video->pict_type           = src->pict_type;
176
+        break;
177
+    case AVMEDIA_TYPE_AUDIO:
178
+        dst->audio->sample_rate         = src->sample_rate;
179
+        dst->audio->channel_layout      = src->channel_layout;
180
+        break;
181
+    default:
182
+        return AVERROR(EINVAL);
183
+    }
184
+
185
+    return 0;
186
+}
187
+
188
+int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src)
189
+{
190
+    int planes, nb_channels;
191
+
192
+    memcpy(dst->data, src->data, sizeof(dst->data));
193
+    memcpy(dst->linesize, src->linesize, sizeof(dst->linesize));
194
+
195
+    dst->pts     = src->pts;
196
+    dst->format  = src->format;
197
+
198
+    switch (src->type) {
199
+    case AVMEDIA_TYPE_VIDEO:
200
+        dst->width               = src->video->w;
201
+        dst->height              = src->video->h;
202
+        dst->sample_aspect_ratio = src->video->sample_aspect_ratio;
203
+        dst->interlaced_frame    = src->video->interlaced;
204
+        dst->top_field_first     = src->video->top_field_first;
205
+        dst->key_frame           = src->video->key_frame;
206
+        dst->pict_type           = src->video->pict_type;
207
+        break;
208
+    case AVMEDIA_TYPE_AUDIO:
209
+        nb_channels = av_get_channel_layout_nb_channels(src->audio->channel_layout);
210
+        planes      = av_sample_fmt_is_planar(src->format) ? nb_channels : 1;
211
+
212
+        if (planes > FF_ARRAY_ELEMS(dst->data)) {
213
+            dst->extended_data = av_mallocz(planes * sizeof(*dst->extended_data));
214
+            if (!dst->extended_data)
215
+                return AVERROR(ENOMEM);
216
+            memcpy(dst->extended_data, src->extended_data,
217
+                   planes * sizeof(dst->extended_data));
218
+        } else
219
+            dst->extended_data = dst->data;
220
+
221
+        dst->sample_rate         = src->audio->sample_rate;
222
+        dst->channel_layout      = src->audio->channel_layout;
223
+        dst->nb_samples          = src->audio->nb_samples;
224
+        break;
225
+    default:
226
+        return AVERROR(EINVAL);
227
+    }
228
+
229
+    return 0;
230
+}
231
+
232
+void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src)
233
+{
234
+    // copy common properties
235
+    dst->pts             = src->pts;
236
+    dst->pos             = src->pos;
237
+
238
+    switch (src->type) {
239
+    case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break;
240
+    case AVMEDIA_TYPE_AUDIO: *dst->audio = *src->audio; break;
241
+    default: break;
242
+    }
243
+}
... ...
@@ -23,13 +23,20 @@
23 23
  * buffer sink
24 24
  */
25 25
 
26
+#include "libavutil/audio_fifo.h"
27
+#include "libavutil/audioconvert.h"
26 28
 #include "libavutil/fifo.h"
29
+#include "libavutil/mathematics.h"
27 30
 
31
+#include "audio.h"
28 32
 #include "avfilter.h"
29 33
 #include "buffersink.h"
30 34
 
31 35
 typedef struct {
32
-    AVFifoBuffer *fifo;          ///< FIFO buffer of video frame references
36
+    AVFifoBuffer *fifo;          ///< FIFO buffer of frame references
37
+
38
+    AVAudioFifo  *audio_fifo;    ///< FIFO for audio samples
39
+    int64_t next_pts;            ///< interpolating audio pts
33 40
 } BufferSinkContext;
34 41
 
35 42
 #define FIFO_INIT_SIZE 8
... ...
@@ -44,6 +51,9 @@ static av_cold void uninit(AVFilterContext *ctx)
44 44
         avfilter_unref_buffer(buf);
45 45
     }
46 46
     av_fifo_free(sink->fifo);
47
+
48
+    if (sink->audio_fifo)
49
+        av_audio_fifo_free(sink->audio_fifo);
47 50
 }
48 51
 
49 52
 static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
... ...
@@ -58,9 +68,8 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
58 58
     return 0;
59 59
 }
60 60
 
61
-static void end_frame(AVFilterLink *link)
61
+static void write_buf(AVFilterContext *ctx, AVFilterBufferRef *buf)
62 62
 {
63
-    AVFilterContext   *ctx = link->dst;
64 63
     BufferSinkContext *sink = ctx->priv;
65 64
 
66 65
     if (av_fifo_space(sink->fifo) < sizeof(AVFilterBufferRef *) &&
... ...
@@ -69,10 +78,20 @@ static void end_frame(AVFilterLink *link)
69 69
             return;
70 70
     }
71 71
 
72
-    av_fifo_generic_write(sink->fifo, &link->cur_buf, sizeof(link->cur_buf), NULL);
72
+    av_fifo_generic_write(sink->fifo, &buf, sizeof(buf), NULL);
73
+}
74
+
75
+static void end_frame(AVFilterLink *link)
76
+{
77
+    write_buf(link->dst, link->cur_buf);
73 78
     link->cur_buf = NULL;
74 79
 }
75 80
 
81
+static void filter_samples(AVFilterLink *link, AVFilterBufferRef *buf)
82
+{
83
+    write_buf(link->dst, buf);
84
+}
85
+
76 86
 int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf)
77 87
 {
78 88
     BufferSinkContext *sink = ctx->priv;
... ...
@@ -98,6 +117,66 @@ int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf)
98 98
     return 0;
99 99
 }
100 100
 
101
+static int read_from_fifo(AVFilterContext *ctx, AVFilterBufferRef **pbuf,
102
+                          int nb_samples)
103
+{
104
+    BufferSinkContext *s = ctx->priv;
105
+    AVFilterLink   *link = ctx->inputs[0];
106
+    AVFilterBufferRef *buf;
107
+
108
+    if (!(buf = ff_get_audio_buffer(link, AV_PERM_WRITE, nb_samples)))
109
+        return AVERROR(ENOMEM);
110
+    av_audio_fifo_read(s->audio_fifo, (void**)buf->extended_data, nb_samples);
111
+
112
+    buf->pts = s->next_pts;
113
+    s->next_pts += av_rescale_q(nb_samples, (AVRational){1, link->sample_rate},
114
+                                link->time_base);
115
+
116
+    *pbuf = buf;
117
+    return 0;
118
+
119
+}
120
+
121
+int av_buffersink_read_samples(AVFilterContext *ctx, AVFilterBufferRef **pbuf,
122
+                               int nb_samples)
123
+{
124
+    BufferSinkContext *s = ctx->priv;
125
+    AVFilterLink   *link = ctx->inputs[0];
126
+    int ret = 0;
127
+
128
+    if (!s->audio_fifo) {
129
+        int nb_channels = av_get_channel_layout_nb_channels(link->channel_layout);
130
+        if (!(s->audio_fifo = av_audio_fifo_alloc(link->format, nb_channels, nb_samples)))
131
+            return AVERROR(ENOMEM);
132
+    }
133
+
134
+    while (ret >= 0) {
135
+        AVFilterBufferRef *buf;
136
+
137
+        if (av_audio_fifo_size(s->audio_fifo) >= nb_samples)
138
+            return read_from_fifo(ctx, pbuf, nb_samples);
139
+
140
+        ret = av_buffersink_read(ctx, &buf);
141
+        if (ret == AVERROR_EOF && av_audio_fifo_size(s->audio_fifo))
142
+            return read_from_fifo(ctx, pbuf, av_audio_fifo_size(s->audio_fifo));
143
+        else if (ret < 0)
144
+            return ret;
145
+
146
+        if (buf->pts != AV_NOPTS_VALUE) {
147
+            s->next_pts = buf->pts -
148
+                          av_rescale_q(av_audio_fifo_size(s->audio_fifo),
149
+                                       (AVRational){ 1, link->sample_rate },
150
+                                       link->time_base);
151
+        }
152
+
153
+        ret = av_audio_fifo_write(s->audio_fifo, (void**)buf->extended_data,
154
+                                  buf->audio->nb_samples);
155
+        avfilter_unref_buffer(buf);
156
+    }
157
+
158
+    return ret;
159
+}
160
+
101 161
 AVFilter avfilter_vsink_buffer = {
102 162
     .name      = "buffersink_old",
103 163
     .description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them available to the end of the filter graph."),
... ...
@@ -112,3 +191,18 @@ AVFilter avfilter_vsink_buffer = {
112 112
                                   { .name = NULL }},
113 113
     .outputs   = (AVFilterPad[]) {{ .name = NULL }},
114 114
 };
115
+
116
+AVFilter avfilter_asink_abuffer = {
117
+    .name      = "abuffersink_old",
118
+    .description = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them available to the end of the filter graph."),
119
+    .priv_size = sizeof(BufferSinkContext),
120
+    .init      = init,
121
+    .uninit    = uninit,
122
+
123
+    .inputs    = (AVFilterPad[]) {{ .name           = "default",
124
+                                    .type           = AVMEDIA_TYPE_AUDIO,
125
+                                    .filter_samples = filter_samples,
126
+                                    .min_perms      = AV_PERM_READ, },
127
+                                  { .name = NULL }},
128
+    .outputs   = (AVFilterPad[]) {{ .name = NULL }},
129
+};
... ...
@@ -101,7 +101,7 @@ int av_vsink_buffer_get_video_buffer_ref(AVFilterContext *buffer_sink,
101 101
 /**
102 102
  * Get a buffer with filtered data from sink and put it in buf.
103 103
  *
104
- * @param sink pointer to a context of a buffersink AVFilter.
104
+ * @param sink pointer to a context of a buffersink or abuffersink AVFilter.
105 105
  * @param buf pointer to the buffer will be written here if buf is non-NULL. buf
106 106
  *            must be freed by the caller using avfilter_unref_buffer().
107 107
  *            Buf may also be NULL to query whether a buffer is ready to be
... ...
@@ -112,4 +112,23 @@ int av_vsink_buffer_get_video_buffer_ref(AVFilterContext *buffer_sink,
112 112
  */
113 113
 int av_buffersink_read(AVFilterContext *sink, AVFilterBufferRef **buf);
114 114
 
115
+/**
116
+ * Same as av_buffersink_read, but with the ability to specify the number of
117
+ * samples read. This function is less efficient than av_buffersink_read(),
118
+ * because it copies the data around.
119
+ *
120
+ * @param sink pointer to a context of the abuffersink AVFilter.
121
+ * @param buf pointer to the buffer will be written here if buf is non-NULL. buf
122
+ *            must be freed by the caller using avfilter_unref_buffer(). buf
123
+ *            will contain exactly nb_samples audio samples, except at the end
124
+ *            of stream, when it can contain less than nb_samples.
125
+ *            Buf may also be NULL to query whether a buffer is ready to be
126
+ *            output.
127
+ *
128
+ * @warning do not mix this function with av_buffersink_read(). Use only one or
129
+ * the other with a single sink, not both.
130
+ */
131
+int av_buffersink_read_samples(AVFilterContext *ctx, AVFilterBufferRef **buf,
132
+                               int nb_samples);
133
+
115 134
 #endif /* AVFILTER_BUFFERSINK_H */
116 135
new file mode 100644
... ...
@@ -0,0 +1,403 @@
0
+/*
1
+ * Copyright (c) 2008 Vitor Sessak
2
+ *
3
+ * This file is part of FFmpeg.
4
+ *
5
+ * FFmpeg is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * FFmpeg is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with FFmpeg; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+/**
21
+ * @file
22
+ * memory buffer source filter
23
+ */
24
+
25
+#include "audio.h"
26
+#include "avfilter.h"
27
+#include "buffersrc.h"
28
+#include "formats.h"
29
+#include "vsrc_buffer.h"
30
+#include "avcodec.h"
31
+
32
+#include "libavutil/audioconvert.h"
33
+#include "libavutil/fifo.h"
34
+#include "libavutil/imgutils.h"
35
+#include "libavutil/opt.h"
36
+#include "libavutil/samplefmt.h"
37
+
38
+typedef struct {
39
+    const AVClass    *class;
40
+    AVFifoBuffer     *fifo;
41
+    AVRational        time_base;     ///< time_base to set in the output link
42
+
43
+    /* video only */
44
+    int               h, w;
45
+    enum PixelFormat  pix_fmt;
46
+    AVRational        pixel_aspect;
47
+
48
+    /* audio only */
49
+    int sample_rate;
50
+    enum AVSampleFormat sample_fmt;
51
+    char               *sample_fmt_str;
52
+    uint64_t channel_layout;
53
+    char    *channel_layout_str;
54
+
55
+    int eof;
56
+} BufferSourceContext;
57
+
58
+#define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format)\
59
+    if (c->w != width || c->h != height || c->pix_fmt != format) {\
60
+        av_log(s, AV_LOG_ERROR, "Changing frame properties on the fly is not supported.\n");\
61
+        return AVERROR(EINVAL);\
62
+    }
63
+
64
+#define CHECK_AUDIO_PARAM_CHANGE(s, c, srate, ch_layout, format)\
65
+    if (c->sample_fmt != format || c->sample_rate != srate ||\
66
+        c->channel_layout != ch_layout) {\
67
+        av_log(s, AV_LOG_ERROR, "Changing frame properties on the fly is not supported.\n");\
68
+        return AVERROR(EINVAL);\
69
+    }
70
+
71
+#if FF_API_VSRC_BUFFER_ADD_FRAME
72
+static int av_vsrc_buffer_add_frame_alt(AVFilterContext *buffer_filter, AVFrame *frame,
73
+                             int64_t pts, AVRational pixel_aspect)
74
+{
75
+    int64_t orig_pts = frame->pts;
76
+    AVRational orig_sar = frame->sample_aspect_ratio;
77
+    int ret;
78
+
79
+    frame->pts = pts;
80
+    frame->sample_aspect_ratio = pixel_aspect;
81
+    if ((ret = av_buffersrc_write_frame(buffer_filter, frame)) < 0)
82
+        return ret;
83
+    frame->pts = orig_pts;
84
+    frame->sample_aspect_ratio = orig_sar;
85
+
86
+    return 0;
87
+}
88
+#endif
89
+
90
+int av_buffersrc_write_frame(AVFilterContext *buffer_filter, AVFrame *frame)
91
+{
92
+    BufferSourceContext *c = buffer_filter->priv;
93
+    AVFilterBufferRef *buf;
94
+    int ret;
95
+
96
+    if (!frame) {
97
+        c->eof = 1;
98
+        return 0;
99
+    } else if (c->eof)
100
+        return AVERROR(EINVAL);
101
+
102
+    if (!av_fifo_space(c->fifo) &&
103
+        (ret = av_fifo_realloc2(c->fifo, av_fifo_size(c->fifo) +
104
+                                         sizeof(buf))) < 0)
105
+        return ret;
106
+
107
+    switch (buffer_filter->outputs[0]->type) {
108
+    case AVMEDIA_TYPE_VIDEO:
109
+        CHECK_VIDEO_PARAM_CHANGE(buffer_filter, c, frame->width, frame->height,
110
+                                 frame->format);
111
+        buf = avfilter_get_video_buffer(buffer_filter->outputs[0], AV_PERM_WRITE,
112
+                                        c->w, c->h);
113
+        av_image_copy(buf->data, buf->linesize, frame->data, frame->linesize,
114
+                      c->pix_fmt, c->w, c->h);
115
+        break;
116
+    case AVMEDIA_TYPE_AUDIO:
117
+        CHECK_AUDIO_PARAM_CHANGE(buffer_filter, c, frame->sample_rate, frame->channel_layout,
118
+                                 frame->format);
119
+        buf = ff_get_audio_buffer(buffer_filter->outputs[0], AV_PERM_WRITE,
120
+                                  frame->nb_samples);
121
+        av_samples_copy(buf->extended_data, frame->extended_data,
122
+                        0, 0, frame->nb_samples,
123
+                        av_get_channel_layout_nb_channels(frame->channel_layout),
124
+                        frame->format);
125
+        break;
126
+    default:
127
+        return AVERROR(EINVAL);
128
+    }
129
+
130
+    avfilter_copy_frame_props(buf, frame);
131
+
132
+    if ((ret = av_fifo_generic_write(c->fifo, &buf, sizeof(buf), NULL)) < 0) {
133
+        avfilter_unref_buffer(buf);
134
+        return ret;
135
+    }
136
+
137
+    return 0;
138
+}
139
+
140
+static int av_buffersrc_buffer(AVFilterContext *s, AVFilterBufferRef *buf)
141
+{
142
+    BufferSourceContext *c = s->priv;
143
+    int ret;
144
+
145
+    if (!buf) {
146
+        c->eof = 1;
147
+        return 0;
148
+    } else if (c->eof)
149
+        return AVERROR(EINVAL);
150
+
151
+    if (!av_fifo_space(c->fifo) &&
152
+        (ret = av_fifo_realloc2(c->fifo, av_fifo_size(c->fifo) +
153
+                                         sizeof(buf))) < 0)
154
+        return ret;
155
+
156
+    switch (s->outputs[0]->type) {
157
+    case AVMEDIA_TYPE_VIDEO:
158
+        CHECK_VIDEO_PARAM_CHANGE(s, c, buf->video->w, buf->video->h, buf->format);
159
+        break;
160
+    case AVMEDIA_TYPE_AUDIO:
161
+        CHECK_AUDIO_PARAM_CHANGE(s, c, buf->audio->sample_rate, buf->audio->channel_layout,
162
+                                 buf->format);
163
+        break;
164
+    default:
165
+        return AVERROR(EINVAL);
166
+    }
167
+
168
+    if ((ret = av_fifo_generic_write(c->fifo, &buf, sizeof(buf), NULL)) < 0)
169
+        return ret;
170
+
171
+    return 0;
172
+}
173
+
174
+static av_cold int init_video(AVFilterContext *ctx, const char *args, void *opaque)
175
+{
176
+    BufferSourceContext *c = ctx->priv;
177
+    char pix_fmt_str[128];
178
+    int n = 0;
179
+
180
+    if (!args ||
181
+        (n = sscanf(args, "%d:%d:%127[^:]:%d:%d:%d:%d", &c->w, &c->h, pix_fmt_str,
182
+                    &c->time_base.num, &c->time_base.den,
183
+                    &c->pixel_aspect.num, &c->pixel_aspect.den)) != 7) {
184
+        av_log(ctx, AV_LOG_ERROR, "Expected 7 arguments, but %d found in '%s'\n", n, args);
185
+        return AVERROR(EINVAL);
186
+    }
187
+    if ((c->pix_fmt = av_get_pix_fmt(pix_fmt_str)) == PIX_FMT_NONE) {
188
+        char *tail;
189
+        c->pix_fmt = strtol(pix_fmt_str, &tail, 10);
190
+        if (*tail || c->pix_fmt < 0 || c->pix_fmt >= PIX_FMT_NB) {
191
+            av_log(ctx, AV_LOG_ERROR, "Invalid pixel format string '%s'\n", pix_fmt_str);
192
+            return AVERROR(EINVAL);
193
+        }
194
+    }
195
+
196
+    if (!(c->fifo = av_fifo_alloc(sizeof(AVFilterBufferRef*))))
197
+        return AVERROR(ENOMEM);
198
+
199
+    av_log(ctx, AV_LOG_INFO, "w:%d h:%d pixfmt:%s\n", c->w, c->h, av_pix_fmt_descriptors[c->pix_fmt].name);
200
+    return 0;
201
+}
202
+
203
+#define OFFSET(x) offsetof(BufferSourceContext, x)
204
+#define A AV_OPT_FLAG_AUDIO_PARAM
205
+static const AVOption audio_options[] = {
206
+    { "time_base",      NULL, OFFSET(time_base),           AV_OPT_TYPE_RATIONAL, { 0 }, 0, INT_MAX, A },
207
+    { "sample_rate",    NULL, OFFSET(sample_rate),         AV_OPT_TYPE_INT,      { 0 }, 0, INT_MAX, A },
208
+    { "sample_fmt",     NULL, OFFSET(sample_fmt_str),      AV_OPT_TYPE_STRING,             .flags = A },
209
+    { "channel_layout", NULL, OFFSET(channel_layout_str),  AV_OPT_TYPE_STRING,             .flags = A },
210
+    { NULL },
211
+};
212
+
213
+static const AVClass abuffer_class = {
214
+    .class_name = "abuffer source",
215
+    .item_name  = av_default_item_name,
216
+    .option     = audio_options,
217
+    .version    = LIBAVUTIL_VERSION_INT,
218
+};
219
+
220
+static av_cold int init_audio(AVFilterContext *ctx, const char *args, void *opaque)
221
+{
222
+    BufferSourceContext *s = ctx->priv;
223
+    int ret = 0;
224
+
225
+    s->class = &abuffer_class;
226
+    av_opt_set_defaults(s);
227
+
228
+    if ((ret = av_set_options_string(s, args, "=", ":")) < 0) {
229
+        av_log(ctx, AV_LOG_ERROR, "Error parsing options string: %s.\n", args);
230
+        goto fail;
231
+    }
232
+
233
+    s->sample_fmt = av_get_sample_fmt(s->sample_fmt_str);
234
+    if (s->sample_fmt == AV_SAMPLE_FMT_NONE) {
235
+        av_log(ctx, AV_LOG_ERROR, "Invalid sample format %s.\n",
236
+               s->sample_fmt_str);
237
+        ret = AVERROR(EINVAL);
238
+        goto fail;
239
+    }
240
+
241
+    s->channel_layout = av_get_channel_layout(s->channel_layout_str);
242
+    if (!s->channel_layout) {
243
+        av_log(ctx, AV_LOG_ERROR, "Invalid channel layout %s.\n",
244
+               s->channel_layout_str);
245
+        ret = AVERROR(EINVAL);
246
+        goto fail;
247
+    }
248
+
249
+    if (!(s->fifo = av_fifo_alloc(sizeof(AVFilterBufferRef*)))) {
250
+        ret = AVERROR(ENOMEM);
251
+        goto fail;
252
+    }
253
+
254
+    if (!s->time_base.num)
255
+        s->time_base = (AVRational){1, s->sample_rate};
256
+
257
+    av_log(ctx, AV_LOG_VERBOSE, "tb:%d/%d samplefmt:%s samplerate: %d "
258
+           "ch layout:%s\n", s->time_base.num, s->time_base.den, s->sample_fmt_str,
259
+           s->sample_rate, s->channel_layout_str);
260
+
261
+fail:
262
+    av_opt_free(s);
263
+    return ret;
264
+}
265
+
266
+static av_cold void uninit(AVFilterContext *ctx)
267
+{
268
+    BufferSourceContext *s = ctx->priv;
269
+    while (s->fifo && av_fifo_size(s->fifo)) {
270
+        AVFilterBufferRef *buf;
271
+        av_fifo_generic_read(s->fifo, &buf, sizeof(buf), NULL);
272
+        avfilter_unref_buffer(buf);
273
+    }
274
+    av_fifo_free(s->fifo);
275
+    s->fifo = NULL;
276
+}
277
+
278
+static int query_formats(AVFilterContext *ctx)
279
+{
280
+    BufferSourceContext *c = ctx->priv;
281
+    AVFilterChannelLayouts *channel_layouts = NULL;
282
+    AVFilterFormats *formats = NULL;
283
+    AVFilterFormats *samplerates = NULL;
284
+
285
+    switch (ctx->outputs[0]->type) {
286
+    case AVMEDIA_TYPE_VIDEO:
287
+        avfilter_add_format(&formats, c->pix_fmt);
288
+        avfilter_set_common_formats(ctx, formats);
289
+        break;
290
+    case AVMEDIA_TYPE_AUDIO:
291
+        avfilter_add_format(&formats,           c->sample_fmt);
292
+        avfilter_set_common_formats(ctx, formats);
293
+
294
+        avfilter_add_format(&samplerates,       c->sample_rate);
295
+        ff_set_common_samplerates(ctx, samplerates);
296
+
297
+        ff_add_channel_layout(&channel_layouts, c->channel_layout);
298
+        ff_set_common_channel_layouts(ctx, channel_layouts);
299
+        break;
300
+    default:
301
+        return AVERROR(EINVAL);
302
+    }
303
+
304
+    return 0;
305
+}
306
+
307
+static int config_props(AVFilterLink *link)
308
+{
309
+    BufferSourceContext *c = link->src->priv;
310
+
311
+    switch (link->type) {
312
+    case AVMEDIA_TYPE_VIDEO:
313
+        link->w = c->w;
314
+        link->h = c->h;
315
+        link->sample_aspect_ratio = c->pixel_aspect;
316
+        break;
317
+    case AVMEDIA_TYPE_AUDIO:
318
+        link->channel_layout = c->channel_layout;
319
+        link->sample_rate    = c->sample_rate;
320
+        break;
321
+    default:
322
+        return AVERROR(EINVAL);
323
+    }
324
+
325
+    link->time_base = c->time_base;
326
+    return 0;
327
+}
328
+
329
+static int request_frame(AVFilterLink *link)
330
+{
331
+    BufferSourceContext *c = link->src->priv;
332
+    AVFilterBufferRef *buf;
333
+
334
+    if (!av_fifo_size(c->fifo)) {
335
+        if (c->eof)
336
+            return AVERROR_EOF;
337
+        return AVERROR(EAGAIN);
338
+    }
339
+    av_fifo_generic_read(c->fifo, &buf, sizeof(buf), NULL);
340
+
341
+    switch (link->type) {
342
+    case AVMEDIA_TYPE_VIDEO:
343
+        avfilter_start_frame(link, avfilter_ref_buffer(buf, ~0));
344
+        avfilter_draw_slice(link, 0, link->h, 1);
345
+        avfilter_end_frame(link);
346
+        break;
347
+    case AVMEDIA_TYPE_AUDIO:
348
+        ff_filter_samples(link, avfilter_ref_buffer(buf, ~0));
349
+        break;
350
+    default:
351
+        return AVERROR(EINVAL);
352
+    }
353
+
354
+    avfilter_unref_buffer(buf);
355
+
356
+    return 0;
357
+}
358
+
359
+static int poll_frame(AVFilterLink *link)
360
+{
361
+    BufferSourceContext *c = link->src->priv;
362
+    int size = av_fifo_size(c->fifo);
363
+    if (!size && c->eof)
364
+        return AVERROR_EOF;
365
+    return size/sizeof(AVFilterBufferRef*);
366
+}
367
+
368
+AVFilter avfilter_vsrc_buffer = {
369
+    .name      = "buffer",
370
+    .description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them accessible to the filterchain."),
371
+    .priv_size = sizeof(BufferSourceContext),
372
+    .query_formats = query_formats,
373
+
374
+    .init      = init_video,
375
+    .uninit    = uninit,
376
+
377
+    .inputs    = (AVFilterPad[]) {{ .name = NULL }},
378
+    .outputs   = (AVFilterPad[]) {{ .name            = "default",
379
+                                    .type            = AVMEDIA_TYPE_VIDEO,
380
+                                    .request_frame   = request_frame,
381
+                                    .poll_frame      = poll_frame,
382
+                                    .config_props    = config_props, },
383
+                                  { .name = NULL}},
384
+};
385
+
386
+AVFilter avfilter_asrc_abuffer = {
387
+    .name          = "abuffer",
388
+    .description   = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them accessible to the filterchain."),
389
+    .priv_size     = sizeof(BufferSourceContext),
390
+    .query_formats = query_formats,
391
+
392
+    .init      = init_audio,
393
+    .uninit    = uninit,
394
+
395
+    .inputs    = (AVFilterPad[]) {{ .name = NULL }},
396
+    .outputs   = (AVFilterPad[]) {{ .name            = "default",
397
+                                    .type            = AVMEDIA_TYPE_AUDIO,
398
+                                    .request_frame   = request_frame,
399
+                                    .poll_frame      = poll_frame,
400
+                                    .config_props    = config_props, },
401
+                                  { .name = NULL}},
402
+};
... ...
@@ -62,4 +62,15 @@ int av_buffersrc_add_ref(AVFilterContext *buffer_src,
62 62
  */
63 63
 unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src);
64 64
 
65
+/**
66
+ * Add a frame to the buffer source.
67
+ *
68
+ * @param s an instance of the buffersrc filter.
69
+ * @param frame frame to be added.
70
+ *
71
+ * @warning frame data will be memcpy()ed, which may be a big performance
72
+ *          hit. Use av_buffersrc_buffer() to avoid copying the data.
73
+ */
74
+int av_buffersrc_write_frame(AVFilterContext *s, AVFrame *frame);
75
+
65 76
 #endif /* AVFILTER_BUFFERSRC_H */
... ...
@@ -26,111 +26,7 @@
26 26
 
27 27
 #include "avfilter.h"
28 28
 #include "internal.h"
29
-
30
-void ff_avfilter_default_free_buffer(AVFilterBuffer *ptr)
31
-{
32
-    if (ptr->extended_data != ptr->data)
33
-        av_freep(&ptr->extended_data);
34
-    av_free(ptr->data[0]);
35
-    av_free(ptr);
36
-}
37
-
38
-/* TODO: set the buffer's priv member to a context structure for the whole
39
- * filter chain.  This will allow for a buffer pool instead of the constant
40
- * alloc & free cycle currently implemented. */
41
-AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
42
-{
43
-    int linesize[4];
44
-    uint8_t *data[4];
45
-    int i;
46
-    AVFilterBufferRef *picref = NULL;
47
-    AVFilterPool *pool = link->pool;
48
-
49
-    if (pool) {
50
-        for (i = 0; i < POOL_SIZE; i++) {
51
-            picref = pool->pic[i];
52
-            if (picref && picref->buf->format == link->format && picref->buf->w == w && picref->buf->h == h) {
53
-                AVFilterBuffer *pic = picref->buf;
54
-                pool->pic[i] = NULL;
55
-                pool->count--;
56
-                picref->video->w = w;
57
-                picref->video->h = h;
58
-                picref->perms = perms | AV_PERM_READ;
59
-                picref->format = link->format;
60
-                pic->refcount = 1;
61
-                memcpy(picref->data,     pic->data,     sizeof(picref->data));
62
-                memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
63
-                pool->refcount++;
64
-                return picref;
65
-            }
66
-        }
67
-    } else {
68
-        pool = link->pool = av_mallocz(sizeof(AVFilterPool));
69
-        pool->refcount = 1;
70
-    }
71
-
72
-    // align: +2 is needed for swscaler, +16 to be SIMD-friendly
73
-    if ((i = av_image_alloc(data, linesize, w, h, link->format, 32)) < 0)
74
-        return NULL;
75
-
76
-    picref = avfilter_get_video_buffer_ref_from_arrays(data, linesize,
77
-                                                       perms, w, h, link->format);
78
-    if (!picref) {
79
-        av_free(data[0]);
80
-        return NULL;
81
-    }
82
-    memset(data[0], 128, i);
83
-
84
-    picref->buf->priv = pool;
85
-    picref->buf->free = NULL;
86
-    pool->refcount++;
87
-
88
-    return picref;
89
-}
90
-
91
-void avfilter_default_start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
92
-{
93
-    AVFilterLink *outlink = NULL;
94
-
95
-    if (inlink->dst->output_count)
96
-        outlink = inlink->dst->outputs[0];
97
-
98
-    if (outlink) {
99
-        outlink->out_buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h);
100
-        avfilter_copy_buffer_ref_props(outlink->out_buf, picref);
101
-        avfilter_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0));
102
-    }
103
-}
104
-
105
-void avfilter_default_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
106
-{
107
-    AVFilterLink *outlink = NULL;
108
-
109
-    if (inlink->dst->output_count)
110
-        outlink = inlink->dst->outputs[0];
111
-
112
-    if (outlink)
113
-        avfilter_draw_slice(outlink, y, h, slice_dir);
114
-}
115
-
116
-void avfilter_default_end_frame(AVFilterLink *inlink)
117
-{
118
-    AVFilterLink *outlink = NULL;
119
-
120
-    if (inlink->dst->output_count)
121
-        outlink = inlink->dst->outputs[0];
122
-
123
-    avfilter_unref_buffer(inlink->cur_buf);
124
-    inlink->cur_buf = NULL;
125
-
126
-    if (outlink) {
127
-        if (outlink->out_buf) {
128
-            avfilter_unref_buffer(outlink->out_buf);
129
-            outlink->out_buf = NULL;
130
-        }
131
-        avfilter_end_frame(outlink);
132
-    }
133
-}
29
+#include "formats.h"
134 30
 
135 31
 static void set_common_formats(AVFilterContext *ctx, AVFilterFormats *fmts,
136 32
                                enum AVMediaType type, int offin, int offout)
... ...
@@ -170,8 +66,8 @@ void avfilter_set_common_sample_formats(AVFilterContext *ctx, AVFilterFormats *f
170 170
 void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *formats)
171 171
 {
172 172
     set_common_formats(ctx, formats, AVMEDIA_TYPE_AUDIO,
173
-                       offsetof(AVFilterLink, in_chlayouts),
174
-                       offsetof(AVFilterLink, out_chlayouts));
173
+                       offsetof(AVFilterLink, in_channel_layouts),
174
+                       offsetof(AVFilterLink, out_channel_layouts));
175 175
 }
176 176
 
177 177
 void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats)
... ...
@@ -180,33 +76,3 @@ void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *
180 180
                        offsetof(AVFilterLink, in_packing),
181 181
                        offsetof(AVFilterLink, out_packing));
182 182
 }
183
-
184
-int avfilter_default_query_formats(AVFilterContext *ctx)
185
-{
186
-    avfilter_set_common_pixel_formats(ctx, avfilter_make_all_formats(AVMEDIA_TYPE_VIDEO));
187
-    avfilter_set_common_sample_formats(ctx, avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO));
188
-    avfilter_set_common_channel_layouts(ctx, avfilter_make_all_channel_layouts());
189
-    avfilter_set_common_packing_formats(ctx, avfilter_make_all_packing_formats());
190
-
191
-    return 0;
192
-}
193
-
194
-void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
195
-{
196
-    avfilter_start_frame(link->dst->outputs[0], picref);
197
-}
198
-
199
-void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
200
-{
201
-    avfilter_draw_slice(link->dst->outputs[0], y, h, slice_dir);
202
-}
203
-
204
-void avfilter_null_end_frame(AVFilterLink *link)
205
-{
206
-    avfilter_end_frame(link->dst->outputs[0]);
207
-}
208
-
209
-AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
210
-{
211
-    return avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h);
212
-}
... ...
@@ -24,63 +24,138 @@
24 24
 #include "libavutil/audioconvert.h"
25 25
 #include "avfilter.h"
26 26
 #include "internal.h"
27
+#include "formats.h"
27 28
 
28 29
 /**
29 30
  * Add all refs from a to ret and destroy a.
30 31
  */
31
-static void merge_ref(AVFilterFormats *ret, AVFilterFormats *a)
32
-{
33
-    int i;
34
-
35
-    for (i = 0; i < a->refcount; i++) {
36
-        ret->refs[ret->refcount] = a->refs[i];
37
-        *ret->refs[ret->refcount++] = ret;
38
-    }
32
+#define MERGE_REF(ret, a, fmts, type, fail)                                \
33
+do {                                                                       \
34
+    type ***tmp;                                                           \
35
+    int i;                                                                 \
36
+                                                                           \
37
+    if (!(tmp = av_realloc(ret->refs,                                      \
38
+                           sizeof(*tmp) * (ret->refcount + a->refcount)))) \
39
+        goto fail;                                                         \
40
+    ret->refs = tmp;                                                       \
41
+                                                                           \
42
+    for (i = 0; i < a->refcount; i ++) {                                   \
43
+        ret->refs[ret->refcount] = a->refs[i];                             \
44
+        *ret->refs[ret->refcount++] = ret;                                 \
45
+    }                                                                      \
46
+                                                                           \
47
+    av_freep(&a->refs);                                                    \
48
+    av_freep(&a->fmts);                                                    \
49
+    av_freep(&a);                                                          \
50
+} while (0)
39 51
 
40
-    av_free(a->refs);
41
-    av_free(a->formats);
42
-    av_free(a);
43
-}
52
+/**
53
+ * Add all formats common for a and b to ret, copy the refs and destroy
54
+ * a and b.
55
+ */
56
+#define MERGE_FORMATS(ret, a, b, fmts, nb, type, fail)                          \
57
+do {                                                                            \
58
+    int i, j, k = 0, count = FFMIN(a->nb, b->nb);                               \
59
+                                                                                \
60
+    if (!(ret = av_mallocz(sizeof(*ret))))                                      \
61
+        goto fail;                                                              \
62
+                                                                                \
63
+    if (count) {                                                                \
64
+        if (!(ret->fmts = av_malloc(sizeof(*ret->fmts) * count)))               \
65
+            goto fail;                                                          \
66
+        for (i = 0; i < a->nb; i++)                                             \
67
+            for (j = 0; j < b->nb; j++)                                         \
68
+                if (a->fmts[i] == b->fmts[j]) {                                 \
69
+                    if(k >= FFMIN(a->nb, b->nb)){                               \
70
+                        av_log(0, AV_LOG_ERROR, "Duplicate formats in avfilter_merge_formats() detected\n"); \
71
+                        av_free(ret->fmts);                                     \
72
+                        av_free(ret);                                           \
73
+                        return NULL;                                            \
74
+                    }                                                           \
75
+                    ret->fmts[k++] = a->fmts[i];                                \
76
+                }                                                               \
77
+    }                                                                           \
78
+    ret->nb = k;                                                                \
79
+    /* check that there was at least one common format */                       \
80
+    if (!ret->nb)                                                               \
81
+        goto fail;                                                              \
82
+                                                                                \
83
+    MERGE_REF(ret, a, fmts, type, fail);                                        \
84
+    MERGE_REF(ret, b, fmts, type, fail);                                        \
85
+} while (0)
44 86
 
45 87
 AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b)
46 88
 {
47
-    AVFilterFormats *ret;
48
-    unsigned i, j, k = 0;
89
+    AVFilterFormats *ret = NULL;
49 90
 
50 91
     if (a == b)
51 92
         return a;
52 93
 
53
-    ret = av_mallocz(sizeof(*ret));
54
-
55
-    /* merge list of formats */
56
-    ret->formats = av_malloc(sizeof(*ret->formats) * FFMIN(a->format_count,
57
-                                                           b->format_count));
58
-    for (i = 0; i < a->format_count; i++)
59
-        for (j = 0; j < b->format_count; j++)
60
-            if (a->formats[i] == b->formats[j]){
61
-                if(k >= FFMIN(a->format_count, b->format_count)){
62
-                    av_log(0, AV_LOG_ERROR, "Duplicate formats in avfilter_merge_formats() detected\n");
63
-                    av_free(ret->formats);
64
-                    av_free(ret);
65
-                    return NULL;
66
-                }
67
-                ret->formats[k++] = a->formats[i];
68
-            }
69
-
70
-    ret->format_count = k;
71
-    /* check that there was at least one common format */
72
-    if (!ret->format_count) {
73
-        av_free(ret->formats);
74
-        av_free(ret);
75
-        return NULL;
94
+    MERGE_FORMATS(ret, a, b, formats, format_count, AVFilterFormats, fail);
95
+
96
+    return ret;
97
+fail:
98
+    if (ret) {
99
+        av_freep(&ret->refs);
100
+        av_freep(&ret->formats);
76 101
     }
102
+    av_freep(&ret);
103
+    return NULL;
104
+}
105
+
106
+AVFilterFormats *ff_merge_samplerates(AVFilterFormats *a,
107
+                                      AVFilterFormats *b)
108
+{
109
+    AVFilterFormats *ret = NULL;
77 110
 
78
-    ret->refs = av_malloc(sizeof(*ret->refs) * (a->refcount + b->refcount));
111
+    if (a == b) return a;
79 112
 
80
-    merge_ref(ret, a);
81
-    merge_ref(ret, b);
113
+    if (a->format_count && b->format_count) {
114
+        MERGE_FORMATS(ret, a, b, formats, format_count, AVFilterFormats, fail);
115
+    } else if (a->format_count) {
116
+        MERGE_REF(a, b, formats, AVFilterFormats, fail);
117
+        ret = a;
118
+    } else {
119
+        MERGE_REF(b, a, formats, AVFilterFormats, fail);
120
+        ret = b;
121
+    }
82 122
 
83 123
     return ret;
124
+fail:
125
+    if (ret) {
126
+        av_freep(&ret->refs);
127
+        av_freep(&ret->formats);
128
+    }
129
+    av_freep(&ret);
130
+    return NULL;
131
+}
132
+
133
+AVFilterChannelLayouts *ff_merge_channel_layouts(AVFilterChannelLayouts *a,
134
+                                                 AVFilterChannelLayouts *b)
135
+{
136
+    AVFilterChannelLayouts *ret = NULL;
137
+
138
+    if (a == b) return a;
139
+
140
+    if (a->nb_channel_layouts && b->nb_channel_layouts) {
141
+        MERGE_FORMATS(ret, a, b, channel_layouts, nb_channel_layouts,
142
+                      AVFilterChannelLayouts, fail);
143
+    } else if (a->nb_channel_layouts) {
144
+        MERGE_REF(a, b, channel_layouts, AVFilterChannelLayouts, fail);
145
+        ret = a;
146
+    } else {
147
+        MERGE_REF(b, a, channel_layouts, AVFilterChannelLayouts, fail);
148
+        ret = b;
149
+    }
150
+
151
+    return ret;
152
+fail:
153
+    if (ret) {
154
+        av_freep(&ret->refs);
155
+        av_freep(&ret->channel_layouts);
156
+    }
157
+    av_freep(&ret);
158
+    return NULL;
84 159
 }
85 160
 
86 161
 int ff_fmt_is_in(int fmt, const int *fmts)
... ...
@@ -146,30 +221,40 @@ AVFilterFormats *avfilter_make_format_list(const int *fmts)
146 146
     return formats;
147 147
 }
148 148
 
149
-AVFilterFormats *avfilter_make_format64_list(const int64_t *fmts)
149
+AVFilterChannelLayouts *avfilter_make_format64_list(const int64_t *fmts)
150 150
 {
151 151
     MAKE_FORMAT_LIST();
152 152
     if (count)
153 153
         memcpy(formats->formats, fmts, sizeof(*formats->formats) * count);
154 154
 
155
-    return formats;
155
+    return (AVFilterChannelLayouts*)formats;
156 156
 }
157 157
 
158
+#define ADD_FORMAT(f, fmt, type, list, nb)                  \
159
+do {                                                        \
160
+    type *fmts;                                             \
161
+                                                            \
162
+    if (!(*f) && !(*f = av_mallocz(sizeof(**f))))           \
163
+        return AVERROR(ENOMEM);                             \
164
+                                                            \
165
+    fmts = av_realloc((*f)->list,                           \
166
+                      sizeof(*(*f)->list) * ((*f)->nb + 1));\
167
+    if (!fmts)                                              \
168
+        return AVERROR(ENOMEM);                             \
169
+                                                            \
170
+    (*f)->list = fmts;                                      \
171
+    (*f)->list[(*f)->nb++] = fmt;                           \
172
+    return 0;                                               \
173
+} while (0)
174
+
158 175
 int avfilter_add_format(AVFilterFormats **avff, int64_t fmt)
159 176
 {
160
-    int64_t *fmts;
161
-
162
-    if (!(*avff) && !(*avff = av_mallocz(sizeof(**avff))))
163
-        return AVERROR(ENOMEM);
164
-
165
-    fmts = av_realloc((*avff)->formats,
166
-                      sizeof(*(*avff)->formats) * ((*avff)->format_count+1));
167
-    if (!fmts)
168
-        return AVERROR(ENOMEM);
177
+    ADD_FORMAT(avff, fmt, int64_t, formats, format_count);
178
+}
169 179
 
170
-    (*avff)->formats = fmts;
171
-    (*avff)->formats[(*avff)->format_count++] = fmt;
172
-    return 0;
180
+int ff_add_channel_layout(AVFilterChannelLayouts **l, uint64_t channel_layout)
181
+{
182
+    ADD_FORMAT(l, channel_layout, uint64_t, channel_layouts, nb_channel_layouts);
173 183
 }
174 184
 
175 185
 #if FF_API_OLD_ALL_FORMATS_API
... ...
@@ -199,10 +284,10 @@ const int64_t avfilter_all_channel_layouts[] = {
199 199
     -1
200 200
 };
201 201
 
202
-AVFilterFormats *avfilter_make_all_channel_layouts(void)
203
-{
204
-    return avfilter_make_format64_list(avfilter_all_channel_layouts);
205
-}
202
+// AVFilterFormats *avfilter_make_all_channel_layouts(void)
203
+// {
204
+//     return avfilter_make_format64_list(avfilter_all_channel_layouts);
205
+// }
206 206
 
207 207
 AVFilterFormats *avfilter_make_all_packing_formats(void)
208 208
 {
... ...
@@ -215,53 +300,163 @@ AVFilterFormats *avfilter_make_all_packing_formats(void)
215 215
     return avfilter_make_format_list(packing);
216 216
 }
217 217
 
218
-void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
218
+AVFilterFormats *ff_all_samplerates(void)
219 219
 {
220
-    *ref = f;
221
-    f->refs = av_realloc(f->refs, sizeof(*f->refs) * ++f->refcount);
222
-    f->refs[f->refcount-1] = ref;
220
+    AVFilterFormats *ret = av_mallocz(sizeof(*ret));
221
+    return ret;
223 222
 }
224 223
 
225
-static int find_ref_index(AVFilterFormats **ref)
224
+AVFilterChannelLayouts *ff_all_channel_layouts(void)
226 225
 {
227
-    int i;
228
-    for (i = 0; i < (*ref)->refcount; i++)
229
-        if ((*ref)->refs[i] == ref)
230
-            return i;
231
-    return -1;
226
+    AVFilterChannelLayouts *ret = av_mallocz(sizeof(*ret));
227
+    return ret;
232 228
 }
233 229
 
234
-void avfilter_formats_unref(AVFilterFormats **ref)
230
+#define FORMATS_REF(f, ref)                                          \
231
+do {                                                                 \
232
+    *ref = f;                                                        \
233
+    f->refs = av_realloc(f->refs, sizeof(*f->refs) * ++f->refcount); \
234
+    f->refs[f->refcount-1] = ref;                                    \
235
+} while (0)
236
+
237
+void ff_channel_layouts_ref(AVFilterChannelLayouts *f, AVFilterChannelLayouts **ref)
238
+{
239
+    FORMATS_REF(f, ref);
240
+}
241
+
242
+void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
235 243
 {
236
-    int idx;
244
+    FORMATS_REF(f, ref);
245
+}
237 246
 
238
-    if (!*ref)
239
-        return;
247
+#define FIND_REF_INDEX(ref, idx)            \
248
+do {                                        \
249
+    int i;                                  \
250
+    for (i = 0; i < (*ref)->refcount; i ++) \
251
+        if((*ref)->refs[i] == ref) {        \
252
+            idx = i;                        \
253
+            break;                          \
254
+        }                                   \
255
+} while (0)
256
+
257
+#define FORMATS_UNREF(ref, list)                                   \
258
+do {                                                               \
259
+    int idx = -1;                                                  \
260
+                                                                   \
261
+    if (!*ref)                                                     \
262
+        return;                                                    \
263
+                                                                   \
264
+    FIND_REF_INDEX(ref, idx);                                      \
265
+                                                                   \
266
+    if (idx >= 0)                                                  \
267
+        memmove((*ref)->refs + idx, (*ref)->refs + idx + 1,        \
268
+            sizeof(*(*ref)->refs) * ((*ref)->refcount - idx - 1)); \
269
+                                                                   \
270
+    if(!--(*ref)->refcount) {                                      \
271
+        av_free((*ref)->list);                                     \
272
+        av_free((*ref)->refs);                                     \
273
+        av_free(*ref);                                             \
274
+    }                                                              \
275
+    *ref = NULL;                                                   \
276
+} while (0)
240 277
 
241
-    idx = find_ref_index(ref);
278
+void avfilter_formats_unref(AVFilterFormats **ref)
279
+{
280
+    FORMATS_UNREF(ref, formats);
281
+}
242 282
 
243
-    if(idx >= 0)
244
-        memmove((*ref)->refs + idx, (*ref)->refs + idx + 1,
245
-            sizeof(*(*ref)->refs) * ((*ref)->refcount - idx - 1));
283
+void ff_channel_layouts_unref(AVFilterChannelLayouts **ref)
284
+{
285
+    FORMATS_UNREF(ref, channel_layouts);
286
+}
246 287
 
247
-    if (!--(*ref)->refcount) {
248
-        av_free((*ref)->formats);
249
-        av_free((*ref)->refs);
250
-        av_free(*ref);
251
-    }
252
-    *ref = NULL;
288
+#define FORMATS_CHANGEREF(oldref, newref)       \
289
+do {                                            \
290
+    int idx = -1;                               \
291
+                                                \
292
+    FIND_REF_INDEX(oldref, idx);                \
293
+                                                \
294
+    if (idx >= 0) {                             \
295
+        (*oldref)->refs[idx] = newref;          \
296
+        *newref = *oldref;                      \
297
+        *oldref = NULL;                         \
298
+    }                                           \
299
+} while (0)
300
+
301
+void ff_channel_layouts_changeref(AVFilterChannelLayouts **oldref,
302
+                                  AVFilterChannelLayouts **newref)
303
+{
304
+    FORMATS_CHANGEREF(oldref, newref);
253 305
 }
254 306
 
255 307
 void avfilter_formats_changeref(AVFilterFormats **oldref,
256 308
                                 AVFilterFormats **newref)
257 309
 {
258
-    int idx = find_ref_index(oldref);
310
+    FORMATS_CHANGEREF(oldref, newref);
311
+}
312
+
313
+#define SET_COMMON_FORMATS(ctx, fmts, in_fmts, out_fmts, ref, list) \
314
+{                                                                   \
315
+    int count = 0, i;                                               \
316
+                                                                    \
317
+    for (i = 0; i < ctx->input_count; i++) {                        \
318
+        if (ctx->inputs[i]) {                                       \
319
+            ref(fmts, &ctx->inputs[i]->out_fmts);                   \
320
+            count++;                                                \
321
+        }                                                           \
322
+    }                                                               \
323
+    for (i = 0; i < ctx->output_count; i++) {                       \
324
+        if (ctx->outputs[i]) {                                      \
325
+            ref(fmts, &ctx->outputs[i]->in_fmts);                   \
326
+            count++;                                                \
327
+        }                                                           \
328
+    }                                                               \
329
+                                                                    \
330
+    if (!count) {                                                   \
331
+        av_freep(&fmts->list);                                      \
332
+        av_freep(&fmts->refs);                                      \
333
+        av_freep(&fmts);                                            \
334
+    }                                                               \
335
+}
336
+
337
+void ff_set_common_channel_layouts(AVFilterContext *ctx,
338
+                                   AVFilterChannelLayouts *layouts)
339
+{
340
+    SET_COMMON_FORMATS(ctx, layouts, in_channel_layouts, out_channel_layouts,
341
+                       ff_channel_layouts_ref, channel_layouts);
342
+}
343
+
344
+void ff_set_common_samplerates(AVFilterContext *ctx,
345
+                               AVFilterFormats *samplerates)
346
+{
347
+    SET_COMMON_FORMATS(ctx, samplerates, in_samplerates, out_samplerates,
348
+                       avfilter_formats_ref, formats);
349
+}
350
+
351
+/**
352
+ * A helper for query_formats() which sets all links to the same list of
353
+ * formats. If there are no links hooked to this filter, the list of formats is
354
+ * freed.
355
+ */
356
+void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats)
357
+{
358
+    SET_COMMON_FORMATS(ctx, formats, in_formats, out_formats,
359
+                       avfilter_formats_ref, formats);
360
+}
259 361
 
260
-    if (idx >= 0) {
261
-        (*oldref)->refs[idx] = newref;
262
-        *newref = *oldref;
263
-        *oldref = NULL;
362
+int avfilter_default_query_formats(AVFilterContext *ctx)
363
+{
364
+    enum AVMediaType type = ctx->inputs  && ctx->inputs [0] ? ctx->inputs [0]->type :
365
+                            ctx->outputs && ctx->outputs[0] ? ctx->outputs[0]->type :
366
+                            AVMEDIA_TYPE_VIDEO;
367
+
368
+    avfilter_set_common_formats(ctx, avfilter_all_formats(type));
369
+    if (type == AVMEDIA_TYPE_AUDIO) {
370
+        ff_set_common_channel_layouts(ctx, ff_all_channel_layouts());
371
+        ff_set_common_samplerates(ctx, ff_all_samplerates());
264 372
     }
373
+
374
+    return 0;
265 375
 }
266 376
 
267 377
 /* internal functions for parsing audio format arguments */
268 378
new file mode 100644
... ...
@@ -0,0 +1,81 @@
0
+/*
1
+ * This file is part of FFMpeg.
2
+ *
3
+ * FFmpeg is free software; you can redistribute it and/or
4
+ * modify it under the terms of the GNU Lesser General Public
5
+ * License as published by the Free Software Foundation; either
6
+ * version 2.1 of the License, or (at your option) any later version.
7
+ *
8
+ * FFmpeg is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11
+ * Lesser General Public License for more details.
12
+ *
13
+ * You should have received a copy of the GNU Lesser General Public
14
+ * License along with FFmpeg; if not, write to the Free Software
15
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+ */
17
+
18
+#ifndef AVFILTER_FORMATS_H
19
+#define AVFILTER_FORMATS_H
20
+
21
+#include "avfilter.h"
22
+
23
+typedef struct AVFilterChannelLayouts {
24
+    uint64_t *channel_layouts;  ///< list of channel layouts
25
+    int    nb_channel_layouts;  ///< number of channel layouts
26
+
27
+    unsigned refcount;          ///< number of references to this list
28
+    struct AVFilterChannelLayouts ***refs; ///< references to this list
29
+} AVFilterChannelLayouts;
30
+
31
+/**
32
+ * Return a channel layouts/samplerates list which contains the intersection of
33
+ * the layouts/samplerates of a and b. Also, all the references of a, all the
34
+ * references of b, and a and b themselves will be deallocated.
35
+ *
36
+ * If a and b do not share any common elements, neither is modified, and NULL
37
+ * is returned.
38
+ */
39
+AVFilterChannelLayouts *ff_merge_channel_layouts(AVFilterChannelLayouts *a,
40
+                                                 AVFilterChannelLayouts *b);
41
+AVFilterFormats *ff_merge_samplerates(AVFilterFormats *a,
42
+                                      AVFilterFormats *b);
43
+
44
+/**
45
+ * Construct an empty AVFilterChannelLayouts/AVFilterFormats struct --
46
+ * representing any channel layout/sample rate.
47
+ */
48
+AVFilterChannelLayouts *ff_all_channel_layouts(void);
49
+AVFilterFormats *ff_all_samplerates(void);
50
+
51
+AVFilterChannelLayouts *avfilter_make_format64_list(const int64_t *fmts);
52
+
53
+
54
+/**
55
+ * A helper for query_formats() which sets all links to the same list of channel
56
+ * layouts/sample rates. If there are no links hooked to this filter, the list
57
+ * is freed.
58
+ */
59
+void ff_set_common_channel_layouts(AVFilterContext *ctx,
60
+                                   AVFilterChannelLayouts *layouts);
61
+void ff_set_common_samplerates(AVFilterContext *ctx,
62
+                               AVFilterFormats *samplerates);
63
+
64
+int ff_add_channel_layout(AVFilterChannelLayouts **l, uint64_t channel_layout);
65
+
66
+/**
67
+ * Add *ref as a new reference to f.
68
+ */
69
+void ff_channel_layouts_ref(AVFilterChannelLayouts *f,
70
+                            AVFilterChannelLayouts **ref);
71
+
72
+/**
73
+ * Remove a reference to a channel layouts list.
74
+ */
75
+void ff_channel_layouts_unref(AVFilterChannelLayouts **ref);
76
+
77
+void ff_channel_layouts_changeref(AVFilterChannelLayouts **oldref,
78
+                                  AVFilterChannelLayouts **newref);
79
+
80
+#endif // AVFILTER_FORMATS_H
... ...
@@ -26,6 +26,7 @@
26 26
 
27 27
 #include "avfilter.h"
28 28
 #include "avfiltergraph.h"
29
+#include "formats.h"
29 30
 
30 31
 #define POOL_SIZE 32
31 32
 typedef struct AVFilterPool {
... ...
@@ -151,6 +152,10 @@ static inline void ff_null_start_frame_keep_ref(AVFilterLink *inlink,
151 151
 
152 152
 void ff_update_link_current_pts(AVFilterLink *link, int64_t pts);
153 153
 
154
+void ff_free_pool(AVFilterPool *pool);
155
+
156
+void ff_command_queue_pop(AVFilterContext *filter);
157
+
154 158
 #define FF_DPRINTF_START(ctx, func) av_dlog(NULL, "%-16s: ", #func)
155 159
 
156 160
 void ff_dlog_link(void *ctx, AVFilterLink *link, int end);
... ...
@@ -269,19 +269,22 @@ static int asink_query_formats(AVFilterContext *ctx)
269 269
 {
270 270
     BufferSinkContext *buf = ctx->priv;
271 271
     AVFilterFormats *formats = NULL;
272
+    AVFilterChannelLayouts *layouts = NULL;
272 273
 
273 274
     if (!(formats = avfilter_make_format_list(buf->sample_fmts)))
274 275
         return AVERROR(ENOMEM);
275 276
     avfilter_set_common_sample_formats(ctx, formats);
276 277
 
277
-    if (!(formats = avfilter_make_format64_list(buf->channel_layouts)))
278
+    if (!(layouts = avfilter_make_format64_list(buf->channel_layouts)))
278 279
         return AVERROR(ENOMEM);
279
-    avfilter_set_common_channel_layouts(ctx, formats);
280
+    ff_set_common_channel_layouts(ctx, layouts);
280 281
 
281 282
     if (!(formats = avfilter_make_format_list(buf->packing_fmts)))
282 283
         return AVERROR(ENOMEM);
283 284
     avfilter_set_common_packing_formats(ctx, formats);
284 285
 
286
+    ff_set_common_samplerates          (ctx, ff_all_samplerates());
287
+
285 288
     return 0;
286 289
 }
287 290
 
... ...
@@ -507,14 +507,15 @@ static int query_formats_audio(AVFilterContext *ctx)
507 507
 {
508 508
     BufferSourceContext *abuffer = ctx->priv;
509 509
     AVFilterFormats *formats;
510
+    AVFilterChannelLayouts *layouts;
510 511
 
511 512
     formats = NULL;
512 513
     avfilter_add_format(&formats, abuffer->sample_format);
513 514
     avfilter_set_common_sample_formats(ctx, formats);
514 515
 
515
-    formats = NULL;
516
-    avfilter_add_format(&formats, abuffer->channel_layout);
517
-    avfilter_set_common_channel_layouts(ctx, formats);
516
+    layouts = NULL;
517
+    ff_add_channel_layout(&layouts, abuffer->channel_layout);
518
+    ff_set_common_channel_layouts(ctx, layouts);
518 519
 
519 520
     formats = NULL;
520 521
     avfilter_add_format(&formats, abuffer->packing_format);
... ...
@@ -653,8 +654,6 @@ AVFilter avfilter_vsrc_buffer = {
653 653
                                   { .name = NULL}},
654 654
 };
655 655
 
656
-#if CONFIG_ABUFFER_FILTER
657
-
658 656
 AVFilter avfilter_asrc_abuffer = {
659 657
     .name        = "abuffer",
660 658
     .description = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them accessible to the filterchain."),
... ...
@@ -673,4 +672,3 @@ AVFilter avfilter_asrc_abuffer = {
673 673
                                     { .name = NULL}},
674 674
 };
675 675
 
676
-#endif
... ...
@@ -38,6 +38,7 @@
38 38
 #include "audio.h"
39 39
 #include "avcodec.h"
40 40
 #include "avfilter.h"
41
+#include "formats.h"
41 42
 
42 43
 typedef struct {
43 44
     /* common A/V fields */
... ...
@@ -370,12 +371,14 @@ static int amovie_query_formats(AVFilterContext *ctx)
370 370
 
371 371
     enum AVSampleFormat sample_fmts[] = { c->sample_fmt, -1 };
372 372
     int packing_fmts[] = { AVFILTER_PACKED, -1 };
373
+    int sample_rates[] = { c->sample_rate, -1 };
373 374
     int64_t chlayouts[] = { c->channel_layout ? c->channel_layout :
374 375
                             av_get_default_channel_layout(c->channels), -1 };
375 376
 
376 377
     avfilter_set_common_sample_formats (ctx, avfilter_make_format_list(sample_fmts));
377 378
     avfilter_set_common_packing_formats(ctx, avfilter_make_format_list(packing_fmts));
378
-    avfilter_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts));
379
+    ff_set_common_samplerates          (ctx, avfilter_make_format_list(sample_rates));
380
+    ff_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts));
379 381
 
380 382
     return 0;
381 383
 }
... ...
@@ -29,7 +29,7 @@
29 29
 #include "libavutil/avutil.h"
30 30
 
31 31
 #define LIBAVFILTER_VERSION_MAJOR  2
32
-#define LIBAVFILTER_VERSION_MINOR 73
32
+#define LIBAVFILTER_VERSION_MINOR 74
33 33
 #define LIBAVFILTER_VERSION_MICRO 100
34 34
 
35 35
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
... ...
@@ -50,5 +50,8 @@
50 50
 #ifndef FF_API_SAMPLERATE64
51 51
 #define FF_API_SAMPLERATE64             (LIBAVFILTER_VERSION_MAJOR < 3)
52 52
 #endif
53
+#ifndef FF_API_VSRC_BUFFER_ADD_FRAME
54
+#define FF_API_VSRC_BUFFER_ADD_FRAME        (LIBAVFILTER_VERSION_MAJOR < 3)
55
+#endif
53 56
 
54 57
 #endif // AVFILTER_VERSION_H
... ...
@@ -59,6 +59,7 @@ typedef struct {
59 59
                         int w, int prefs, int mrefs, int parity, int mode);
60 60
 
61 61
     const AVPixFmtDescriptor *csp;
62
+    int eof;
62 63
 } YADIFContext;
63 64
 
64 65
 #define CHECK(j)\
... ...
@@ -216,22 +217,11 @@ static void return_frame(AVFilterContext *ctx, int is_second)
216 216
     filter(ctx, yadif->out, tff ^ !is_second, tff);
217 217
 
218 218
     if (is_second) {
219
-        if (yadif->next->pts != AV_NOPTS_VALUE &&
220
-            yadif->cur->pts != AV_NOPTS_VALUE) {
221
-            uint64_t next_pts = yadif->next->pts;
222
-            uint64_t cur_pts  = yadif->cur->pts;
223
-            uint64_t prev_pts = yadif->prev->pts;
224
-
225
-            uint64_t ft = FFMIN3( cur_pts-prev_pts,
226
-                                  next_pts-cur_pts,
227
-                                 (next_pts-prev_pts)/2);
228
-
229
-            if(next_pts - cur_pts < 2*ft)
230
-                yadif->out->pts =
231
-                    (next_pts&cur_pts) +
232
-                    ((next_pts^cur_pts)>>1);
233
-            else
234
-                yadif->out->pts = cur_pts + ft/2;
219
+        int64_t cur_pts  = yadif->cur->pts;
220
+        int64_t next_pts = yadif->next->pts;
221
+
222
+        if (next_pts != AV_NOPTS_VALUE && cur_pts != AV_NOPTS_VALUE) {
223
+            yadif->out->pts = cur_pts + next_pts;
235 224
         } else {
236 225
             yadif->out->pts = AV_NOPTS_VALUE;
237 226
         }
... ...
@@ -264,6 +254,8 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
264 264
         yadif->out  = avfilter_ref_buffer(yadif->cur, AV_PERM_READ);
265 265
         avfilter_unref_buffer(yadif->prev);
266 266
         yadif->prev = NULL;
267
+        if (yadif->out->pts != AV_NOPTS_VALUE)
268
+            yadif->out->pts *= 2;
267 269
         avfilter_start_frame(ctx->outputs[0], yadif->out);
268 270
         return;
269 271
     }
... ...
@@ -276,6 +268,8 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
276 276
 
277 277
     avfilter_copy_buffer_ref_props(yadif->out, yadif->cur);
278 278
     yadif->out->video->interlaced = 0;
279
+    if (yadif->out->pts != AV_NOPTS_VALUE)
280
+        yadif->out->pts *= 2;
279 281
     avfilter_start_frame(ctx->outputs[0], yadif->out);
280 282
 }
281 283
 
... ...
@@ -309,8 +303,21 @@ static int request_frame(AVFilterLink *link)
309 309
     do {
310 310
         int ret;
311 311
 
312
-        if ((ret = avfilter_request_frame(link->src->inputs[0])))
312
+        if (yadif->eof)
313
+            return AVERROR_EOF;
314
+
315
+        ret  = avfilter_request_frame(link->src->inputs[0]);
316
+
317
+        if (ret == AVERROR_EOF && yadif->next) {
318
+            AVFilterBufferRef *next = avfilter_ref_buffer(yadif->next, AV_PERM_READ);
319
+            next->pts = yadif->next->pts * 2 - yadif->cur->pts;
320
+
321
+            start_frame(link->src->inputs[0], next);
322
+            end_frame(link->src->inputs[0]);
323
+            yadif->eof = 1;
324
+        } else if (ret < 0) {
313 325
             return ret;
326
+        }
314 327
     } while (!yadif->cur);
315 328
 
316 329
     return 0;
... ...
@@ -411,6 +418,16 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
411 411
 
412 412
 static void null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { }
413 413
 
414
+static int config_props(AVFilterLink *link)
415
+{
416
+    link->time_base.num = link->src->inputs[0]->time_base.num;
417
+    link->time_base.den = link->src->inputs[0]->time_base.den * 2;
418
+    link->w             = link->src->inputs[0]->w;
419
+    link->h             = link->src->inputs[0]->h;
420
+
421
+    return 0;
422
+}
423
+
414 424
 AVFilter avfilter_vf_yadif = {
415 425
     .name          = "yadif",
416 426
     .description   = NULL_IF_CONFIG_SMALL("Deinterlace the input image."),
... ...
@@ -432,6 +449,7 @@ AVFilter avfilter_vf_yadif = {
432 432
     .outputs   = (const AVFilterPad[]) {{ .name       = "default",
433 433
                                     .type             = AVMEDIA_TYPE_VIDEO,
434 434
                                     .poll_frame       = poll_frame,
435
-                                    .request_frame    = request_frame, },
435
+                                    .request_frame    = request_frame,
436
+                                    .config_props     = config_props, },
436 437
                                   { .name = NULL}},
437 438
 };
438 439
new file mode 100644
... ...
@@ -0,0 +1,345 @@
0
+/*
1
+ * This file is part of FFmpeg.
2
+ *
3
+ * FFmpeg is free software; you can redistribute it and/or
4
+ * modify it under the terms of the GNU Lesser General Public
5
+ * License as published by the Free Software Foundation; either
6
+ * version 2.1 of the License, or (at your option) any later version.
7
+ *
8
+ * FFmpeg is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11
+ * Lesser General Public License for more details.
12
+ *
13
+ * You should have received a copy of the GNU Lesser General Public
14
+ * License along with FFmpeg; if not, write to the Free Software
15
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+ */
17
+
18
+#include "libavutil/imgutils.h"
19
+
20
+#include "avfilter.h"
21
+#include "internal.h"
22
+
23
+static char *ff_get_ref_perms_string(char *buf, size_t buf_size, int perms)
24
+{
25
+    snprintf(buf, buf_size, "%s%s%s%s%s%s",
26
+             perms & AV_PERM_READ      ? "r" : "",
27
+             perms & AV_PERM_WRITE     ? "w" : "",
28
+             perms & AV_PERM_PRESERVE  ? "p" : "",
29
+             perms & AV_PERM_REUSE     ? "u" : "",
30
+             perms & AV_PERM_REUSE2    ? "U" : "",
31
+             perms & AV_PERM_NEG_LINESIZES ? "n" : "");
32
+    return buf;
33
+}
34
+
35
+static void ff_dlog_ref(void *ctx, AVFilterBufferRef *ref, int end)
36
+{
37
+    av_unused char buf[16];
38
+    av_dlog(ctx,
39
+            "ref[%p buf:%p refcount:%d perms:%s data:%p linesize[%d, %d, %d, %d] pts:%"PRId64" pos:%"PRId64,
40
+            ref, ref->buf, ref->buf->refcount, ff_get_ref_perms_string(buf, sizeof(buf), ref->perms), ref->data[0],
41
+            ref->linesize[0], ref->linesize[1], ref->linesize[2], ref->linesize[3],
42
+            ref->pts, ref->pos);
43
+
44
+    if (ref->video) {
45
+        av_dlog(ctx, " a:%d/%d s:%dx%d i:%c iskey:%d type:%c",
46
+                ref->video->sample_aspect_ratio.num, ref->video->sample_aspect_ratio.den,
47
+                ref->video->w, ref->video->h,
48
+                !ref->video->interlaced     ? 'P' :         /* Progressive  */
49
+                ref->video->top_field_first ? 'T' : 'B',    /* Top / Bottom */
50
+                ref->video->key_frame,
51
+                av_get_picture_type_char(ref->video->pict_type));
52
+    }
53
+    if (ref->audio) {
54
+        av_dlog(ctx, " cl:%"PRId64"d n:%d r:%d p:%d",
55
+                ref->audio->channel_layout,
56
+                ref->audio->nb_samples,
57
+                ref->audio->sample_rate,
58
+                ref->audio->planar);
59
+    }
60
+
61
+    av_dlog(ctx, "]%s", end ? "\n" : "");
62
+}
63
+
64
+AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
65
+{
66
+    return avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h);
67
+}
68
+
69
+AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
70
+{
71
+    int linesize[4];
72
+    uint8_t *data[4];
73
+    int i;
74
+    AVFilterBufferRef *picref = NULL;
75
+    AVFilterPool *pool = link->pool;
76
+
77
+    if (pool) {
78
+        for (i = 0; i < POOL_SIZE; i++) {
79
+            picref = pool->pic[i];
80
+            if (picref && picref->buf->format == link->format && picref->buf->w == w && picref->buf->h == h) {
81
+                AVFilterBuffer *pic = picref->buf;
82
+                pool->pic[i] = NULL;
83
+                pool->count--;
84
+                picref->video->w = w;
85
+                picref->video->h = h;
86
+                picref->perms = perms | AV_PERM_READ;
87
+                picref->format = link->format;
88
+                pic->refcount = 1;
89
+                memcpy(picref->data,     pic->data,     sizeof(picref->data));
90
+                memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
91
+                pool->refcount++;
92
+                return picref;
93
+            }
94
+        }
95
+    } else {
96
+        pool = link->pool = av_mallocz(sizeof(AVFilterPool));
97
+        pool->refcount = 1;
98
+    }
99
+
100
+    // align: +2 is needed for swscaler, +16 to be SIMD-friendly
101
+    if ((i = av_image_alloc(data, linesize, w, h, link->format, 32)) < 0)
102
+        return NULL;
103
+
104
+    picref = avfilter_get_video_buffer_ref_from_arrays(data, linesize,
105
+                                                       perms, w, h, link->format);
106
+    if (!picref) {
107
+        av_free(data[0]);
108
+        return NULL;
109
+    }
110
+
111
+    memset(data[0], 128, i);
112
+
113
+    picref->buf->priv = pool;
114
+    picref->buf->free = NULL;
115
+    pool->refcount++;
116
+
117
+    return picref;
118
+}
119
+
120
+AVFilterBufferRef *
121
+avfilter_get_video_buffer_ref_from_arrays(uint8_t * const data[4], const int linesize[4], int perms,
122
+                                          int w, int h, enum PixelFormat format)
123
+{
124
+    AVFilterBuffer *pic = av_mallocz(sizeof(AVFilterBuffer));
125
+    AVFilterBufferRef *picref = av_mallocz(sizeof(AVFilterBufferRef));
126
+
127
+    if (!pic || !picref)
128
+        goto fail;
129
+
130
+    picref->buf = pic;
131
+    picref->buf->free = ff_avfilter_default_free_buffer;
132
+    if (!(picref->video = av_mallocz(sizeof(AVFilterBufferRefVideoProps))))
133
+        goto fail;
134
+
135
+    pic->w = picref->video->w = w;
136
+    pic->h = picref->video->h = h;
137
+
138
+    /* make sure the buffer gets read permission or it's useless for output */
139
+    picref->perms = perms | AV_PERM_READ;
140
+
141
+    pic->refcount = 1;
142
+    picref->type = AVMEDIA_TYPE_VIDEO;
143
+    pic->format = picref->format = format;
144
+
145
+    memcpy(pic->data,        data,          4*sizeof(data[0]));
146
+    memcpy(pic->linesize,    linesize,      4*sizeof(linesize[0]));
147
+    memcpy(picref->data,     pic->data,     sizeof(picref->data));
148
+    memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
149
+
150
+    pic->   extended_data = pic->data;
151
+    picref->extended_data = picref->data;
152
+
153
+    return picref;
154
+
155
+fail:
156
+    if (picref && picref->video)
157
+        av_free(picref->video);
158
+    av_free(picref);
159
+    av_free(pic);
160
+    return NULL;
161
+}
162
+
163
+AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
164
+{
165
+    AVFilterBufferRef *ret = NULL;
166
+
167
+    av_unused char buf[16];
168
+    FF_DPRINTF_START(NULL, get_video_buffer); ff_dlog_link(NULL, link, 0);
169
+    av_dlog(NULL, " perms:%s w:%d h:%d\n", ff_get_ref_perms_string(buf, sizeof(buf), perms), w, h);
170
+
171
+    if (link->dstpad->get_video_buffer)
172
+        ret = link->dstpad->get_video_buffer(link, perms, w, h);
173
+
174
+    if (!ret)
175
+        ret = avfilter_default_get_video_buffer(link, perms, w, h);
176
+
177
+    if (ret)
178
+        ret->type = AVMEDIA_TYPE_VIDEO;
179
+
180
+    FF_DPRINTF_START(NULL, get_video_buffer); ff_dlog_link(NULL, link, 0); av_dlog(NULL, " returning "); ff_dlog_ref(NULL, ret, 1);
181
+
182
+    return ret;
183
+}
184
+
185
+void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
186
+{
187
+    avfilter_start_frame(link->dst->outputs[0], picref);
188
+}
189
+
190
+void avfilter_default_start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
191
+{
192
+    AVFilterLink *outlink = NULL;
193
+
194
+    if (inlink->dst->output_count)
195
+        outlink = inlink->dst->outputs[0];
196
+
197
+    if (outlink) {
198
+        outlink->out_buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h);
199
+        avfilter_copy_buffer_ref_props(outlink->out_buf, picref);
200
+        avfilter_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0));
201
+    }
202
+}
203
+
204
+/* XXX: should we do the duplicating of the picture ref here, instead of
205
+ * forcing the source filter to do it? */
206
+void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
207
+{
208
+    void (*start_frame)(AVFilterLink *, AVFilterBufferRef *);
209
+    AVFilterPad *dst = link->dstpad;
210
+    int perms = picref->perms;
211
+    AVFilterCommand *cmd= link->dst->command_queue;
212
+
213
+    FF_DPRINTF_START(NULL, start_frame); ff_dlog_link(NULL, link, 0); av_dlog(NULL, " "); ff_dlog_ref(NULL, picref, 1);
214
+
215
+    if (!(start_frame = dst->start_frame))
216
+        start_frame = avfilter_default_start_frame;
217
+
218
+    if (picref->linesize[0] < 0)
219
+        perms |= AV_PERM_NEG_LINESIZES;
220
+    /* prepare to copy the picture if it has insufficient permissions */
221
+    if ((dst->min_perms & perms) != dst->min_perms || dst->rej_perms & perms) {
222
+        av_log(link->dst, AV_LOG_DEBUG,
223
+                "frame copy needed (have perms %x, need %x, reject %x)\n",
224
+                picref->perms,
225
+                link->dstpad->min_perms, link->dstpad->rej_perms);
226
+
227
+        link->cur_buf = avfilter_get_video_buffer(link, dst->min_perms, link->w, link->h);
228
+        link->src_buf = picref;
229
+        avfilter_copy_buffer_ref_props(link->cur_buf, link->src_buf);
230
+    }
231
+    else
232
+        link->cur_buf = picref;
233
+
234
+    while(cmd && cmd->time <= picref->pts * av_q2d(link->time_base)){
235
+        av_log(link->dst, AV_LOG_DEBUG,
236
+               "Processing command time:%f command:%s arg:%s\n",
237
+               cmd->time, cmd->command, cmd->arg);
238
+        avfilter_process_command(link->dst, cmd->command, cmd->arg, 0, 0, cmd->flags);
239
+        ff_command_queue_pop(link->dst);
240
+        cmd= link->dst->command_queue;
241
+    }
242
+
243
+    start_frame(link, link->cur_buf);
244
+    ff_update_link_current_pts(link, link->cur_buf->pts);
245
+}
246
+
247
+void avfilter_null_end_frame(AVFilterLink *link)
248
+{
249
+    avfilter_end_frame(link->dst->outputs[0]);
250
+}
251
+
252
+void avfilter_default_end_frame(AVFilterLink *inlink)
253
+{
254
+    AVFilterLink *outlink = NULL;
255
+
256
+    if (inlink->dst->output_count)
257
+        outlink = inlink->dst->outputs[0];
258
+
259
+    avfilter_unref_buffer(inlink->cur_buf);
260
+    inlink->cur_buf = NULL;
261
+
262
+    if (outlink) {
263
+        if (outlink->out_buf) {
264
+            avfilter_unref_buffer(outlink->out_buf);
265
+            outlink->out_buf = NULL;
266
+        }
267
+        avfilter_end_frame(outlink);
268
+    }
269
+}
270
+
271
+void avfilter_end_frame(AVFilterLink *link)
272
+{
273
+    void (*end_frame)(AVFilterLink *);
274
+
275
+    if (!(end_frame = link->dstpad->end_frame))
276
+        end_frame = avfilter_default_end_frame;
277
+
278
+    end_frame(link);
279
+
280
+    /* unreference the source picture if we're feeding the destination filter
281
+     * a copied version dues to permission issues */
282
+    if (link->src_buf) {
283
+        avfilter_unref_buffer(link->src_buf);
284
+        link->src_buf = NULL;
285
+    }
286
+}
287
+
288
+void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
289
+{
290
+    avfilter_draw_slice(link->dst->outputs[0], y, h, slice_dir);
291
+}
292
+
293
+void avfilter_default_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
294
+{
295
+    AVFilterLink *outlink = NULL;
296
+
297
+    if (inlink->dst->output_count)
298
+        outlink = inlink->dst->outputs[0];
299
+
300
+    if (outlink)
301
+        avfilter_draw_slice(outlink, y, h, slice_dir);
302
+}
303
+
304
+void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
305
+{
306
+    uint8_t *src[4], *dst[4];
307
+    int i, j, vsub;
308
+    void (*draw_slice)(AVFilterLink *, int, int, int);
309
+
310
+    FF_DPRINTF_START(NULL, draw_slice); ff_dlog_link(NULL, link, 0); av_dlog(NULL, " y:%d h:%d dir:%d\n", y, h, slice_dir);
311
+
312
+    /* copy the slice if needed for permission reasons */
313
+    if (link->src_buf) {
314
+        vsub = av_pix_fmt_descriptors[link->format].log2_chroma_h;
315
+
316
+        for (i = 0; i < 4; i++) {
317
+            if (link->src_buf->data[i]) {
318
+                src[i] = link->src_buf-> data[i] +
319
+                    (y >> (i==1 || i==2 ? vsub : 0)) * link->src_buf-> linesize[i];
320
+                dst[i] = link->cur_buf->data[i] +
321
+                    (y >> (i==1 || i==2 ? vsub : 0)) * link->cur_buf->linesize[i];
322
+            } else
323
+                src[i] = dst[i] = NULL;
324
+        }
325
+
326
+        for (i = 0; i < 4; i++) {
327
+            int planew =
328
+                av_image_get_linesize(link->format, link->cur_buf->video->w, i);
329
+
330
+            if (!src[i]) continue;
331
+
332
+            for (j = 0; j < h >> (i==1 || i==2 ? vsub : 0); j++) {
333
+                memcpy(dst[i], src[i], planew);
334
+                src[i] += link->src_buf->linesize[i];
335
+                dst[i] += link->cur_buf->linesize[i];
336
+            }
337
+        }
338
+    }
339
+
340
+    if (!(draw_slice = link->dstpad->draw_slice))
341
+        draw_slice = avfilter_default_draw_slice;
342
+    draw_slice(link, y, h, slice_dir);
343
+}
344
+
... ...
@@ -153,7 +153,7 @@
153 153
  */
154 154
 
155 155
 #define LIBAVUTIL_VERSION_MAJOR 51
156
-#define LIBAVUTIL_VERSION_MINOR 52
156
+#define LIBAVUTIL_VERSION_MINOR 53
157 157
 #define LIBAVUTIL_VERSION_MICRO 100
158 158
 
159 159
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
... ...
@@ -61,9 +61,7 @@ stddev(){
61 61
 }
62 62
 
63 63
 oneline(){
64
-    val=$(cat "$2")
65
-    test x"$val" = x"$1" || { r=$?; printf -- '-%s\n+%s\n' "$ref" "$val"; }
66
-    return ${r:-0}
64
+    printf '%s\n' "$1" | diff -u -b - "$2"
67 65
 }
68 66
 
69 67
 run(){
... ...
@@ -43,6 +43,12 @@ fate-nellymoser-aref-encode: CMP_SHIFT = -1172
43 43
 fate-nellymoser-aref-encode: CMP_TARGET = 9617
44 44
 fate-nellymoser-aref-encode: SIZE_TOLERANCE = 268
45 45
 
46
+FATE_AUDIO += fate-sierra-vmd-audio
47
+fate-sierra-vmd-audio: CMD = framecrc -i $(SAMPLES)/vmd/12.vmd -vn
48
+
49
+FATE_AUDIO += fate-smacker-audio
50
+fate-smacker-audio: CMD = framecrc -i $(SAMPLES)/smacker/wetlogo.smk -vn
51
+
46 52
 FATE_AUDIO += fate-ws_snd
47 53
 fate-ws_snd: CMD = md5 -i $(SAMPLES)/vqa/ws_snd.vqa -f s16le
48 54
 
... ...
@@ -58,14 +58,11 @@ fate-qcp-demux: CMD = crc -i $(SAMPLES)/qcp/0036580847.QCP -acodec copy
58 58
 FATE_DEMUX += fate-redcode-demux
59 59
 fate-redcode-demux: CMD = framecrc -i $(SAMPLES)/r3d/4MB-sample.r3d -vcodec copy -acodec copy
60 60
 
61
-FATE_DEMUX += fate-sierra-vmd
62
-fate-sierra-vmd: CMD = framecrc -i $(SAMPLES)/vmd/12.vmd -pix_fmt rgb24
63
-
64 61
 FATE_DEMUX += fate-siff
65 62
 fate-siff: CMD = framecrc -i $(SAMPLES)/SIFF/INTRO_B.VB -t 3 -pix_fmt rgb24
66 63
 
67
-FATE_DEMUX += fate-smjpeg
68
-fate-smjpeg: CMD = framecrc -i $(SAMPLES)/smjpeg/scenwin.mjpg -vcodec copy
64
+FATE_DEMUX += fate-smjpeg-demux
65
+fate-smjpeg-demux: CMD = framecrc -i $(SAMPLES)/smjpeg/scenwin.mjpg -c copy
69 66
 
70 67
 FATE_DEMUX += fate-westwood-aud
71 68
 fate-westwood-aud: CMD = framecrc -i $(SAMPLES)/westwood-aud/excellent.aud -c copy
... ...
@@ -176,8 +176,11 @@ fate-rl2: CMD = framecrc -i $(SAMPLES)/rl2/Z4915300.RL2 -pix_fmt rgb24 -an
176 176
 FATE_VIDEO += fate-roqvideo
177 177
 fate-roqvideo: CMD = framecrc -i $(SAMPLES)/idroq/idlogo.roq -an
178 178
 
179
-FATE_VIDEO += fate-smacker
180
-fate-smacker: CMD = framecrc -i $(SAMPLES)/smacker/wetlogo.smk -pix_fmt rgb24
179
+FATA_VIDEO += fate-sierra-vmd-video
180
+fate-sierra-vmd-video: CMD = framecrc -i $(SAMPLES)/vmd/12.vmd -pix_fmt rgb24 -an
181
+
182
+FATA_VIDEO += fate-smacker-video
183
+fate-smacker-video: CMD = framecrc -i $(SAMPLES)/smacker/wetlogo.smk -pix_fmt rgb24 -an
181 184
 
182 185
 FATE_VIDEO += fate-smc
183 186
 fate-smc: CMD = framecrc -i $(SAMPLES)/smc/cass_schi.qt -pix_fmt rgb24
184 187
deleted file mode 100644
... ...
@@ -1,334 +0,0 @@
1
-#tb 0: 1/10
2
-#tb 1: 1/22050
3
-0,          0,          0,        1,   230400, 0x0224ab01
4
-1,          0,          0,    61740,   123480, 0x3a794c13
5
-0,          1,          1,        1,   230400, 0x449e4d81
6
-0,          2,          2,        1,   230400, 0x3e15e07a
7
-0,          3,          3,        1,   230400, 0xdabe4172
8
-0,          4,          4,        1,   230400, 0x0947b7db
9
-0,          5,          5,        1,   230400, 0x934e243b
10
-0,          6,          6,        1,   230400, 0x6b5c5b6c
11
-0,          7,          7,        1,   230400, 0x4bf7bbb5
12
-0,          8,          8,        1,   230400, 0x423eec8e
13
-0,          9,          9,        1,   230400, 0x63663b5e
14
-0,         10,         10,        1,   230400, 0x9c258a67
15
-0,         11,         11,        1,   230400, 0x1c92b6e0
16
-0,         12,         12,        1,   230400, 0xdd0a0e28
17
-0,         13,         13,        1,   230400, 0x51d64af1
18
-0,         14,         14,        1,   230400, 0x5776ac12
19
-0,         15,         15,        1,   230400, 0x49070132
20
-0,         16,         16,        1,   230400, 0xa59635ab
21
-0,         17,         17,        1,   230400, 0xb1f99504
22
-0,         18,         18,        1,   230400, 0x61fac725
23
-0,         19,         19,        1,   230400, 0xc32c28d5
24
-0,         20,         20,        1,   230400, 0x2b7a91d6
25
-0,         21,         21,        1,   230400, 0x917be717
26
-0,         22,         22,        1,   230400, 0xd3c5a2ff
27
-0,         23,         23,        1,   230400, 0x0678a707
28
-0,         24,         24,        1,   230400, 0x122504e6
29
-0,         25,         25,        1,   230400, 0x76aebdae
30
-0,         26,         26,        1,   230400, 0x81357545
31
-0,         27,         27,        1,   230400, 0x38baeebd
32
-0,         28,         28,        1,   230400, 0x1c5c44d4
33
-1,      61740,      61740,     2205,     4410, 0x109d04e0
34
-0,         29,         29,        1,   230400, 0x60e189cc
35
-1,      63945,      63945,     2205,     4410, 0x224d244f
36
-0,         30,         30,        1,   230400, 0xb1f4381c
37
-1,      66150,      66150,     2205,     4410, 0xbb72413d
38
-0,         31,         31,        1,   230400, 0xb5048fed
39
-1,      68355,      68355,     2205,     4410, 0xaa5f5b86
40
-0,         32,         32,        1,   230400, 0xc947c30e
41
-1,      70560,      70560,     2205,     4410, 0x94e7aea7
42
-0,         33,         33,        1,   230400, 0xe8e31c07
43
-1,      72765,      72765,     2205,     4410, 0xad497ca0
44
-0,         34,         34,        1,   230400, 0x6d49dd02
45
-1,      74970,      74970,     2205,     4410, 0x1de10c9e
46
-0,         35,         35,        1,   230400, 0x293e15d3
47
-1,      77175,      77175,     2205,     4410, 0x9f55efa8
48
-0,         36,         36,        1,   230400, 0x354d792e
49
-1,      79380,      79380,     2205,     4410, 0x220a072a
50
-0,         37,         37,        1,   230400, 0x35468780
51
-1,      81585,      81585,     2205,     4410, 0xa7dafb29
52
-0,         38,         38,        1,   230400, 0x365d3991
53
-1,      83790,      83790,     2205,     4410, 0xd5e29c7a
54
-0,         39,         39,        1,   230400, 0xc9debef2
55
-1,      85995,      85995,     2205,     4410, 0xb8465006
56
-0,         40,         40,        1,   230400, 0x4c4634c2
57
-1,      88200,      88200,     2205,     4410, 0x518669c7
58
-0,         41,         41,        1,   230400, 0x347c2dca
59
-1,      90405,      90405,     2205,     4410, 0xb5b5efca
60
-0,         42,         42,        1,   230400, 0x1efa0aaa
61
-1,      92610,      92610,     2205,     4410, 0x8600015d
62
-0,         43,         43,        1,   230400, 0xa79a0b5a
63
-1,      94815,      94815,     2205,     4410, 0xe2f68fe9
64
-0,         44,         44,        1,   230400, 0xfdb2dcdb
65
-1,      97020,      97020,     2205,     4410, 0x8d3458d9
66
-0,         45,         45,        1,   230400, 0x42dbea33
67
-1,      99225,      99225,     2205,     4410, 0xf1ff4775
68
-0,         46,         46,        1,   230400, 0x2a207e43
69
-1,     101430,     101430,     2205,     4410, 0x830f67c9
70
-0,         47,         47,        1,   230400, 0x86573783
71
-1,     103635,     103635,     2205,     4410, 0x110e0bc1
72
-0,         48,         48,        1,   230400, 0xc3968473
73
-1,     105840,     105840,     2205,     4410, 0x71682f47
74
-0,         49,         49,        1,   230400, 0x8f62a7b4
75
-1,     108045,     108045,     2205,     4410, 0x38119095
76
-0,         50,         50,        1,   230400, 0x5a2e3073
77
-1,     110250,     110250,     2205,     4410, 0xd2494db6
78
-0,         51,         51,        1,   230400, 0xd24f5e2c
79
-1,     112455,     112455,     2205,     4410, 0x8b552509
80
-0,         52,         52,        1,   230400, 0x1df3c67d
81
-1,     114660,     114660,     2205,     4410, 0x71e52909
82
-0,         53,         53,        1,   230400, 0xe4fd884d
83
-1,     116865,     116865,     2205,     4410, 0x9f0a6f4d
84
-1,     119070,     119070,     2205,     4410, 0x901302f2
85
-1,     121275,     121275,     2205,     4410, 0x855d5222
86
-1,     123480,     123480,     2205,     4410, 0x324bb2fe
87
-0,         57,         57,        1,   230400, 0x9a228555
88
-1,     125685,     125685,     2205,     4410, 0xe85f583f
89
-0,         58,         58,        1,   230400, 0x9eba8ed5
90
-1,     127890,     127890,     2205,     4410, 0x2cbc67c4
91
-0,         59,         59,        1,   230400, 0x3d808a3d
92
-1,     130095,     130095,     2205,     4410, 0xc82e6aa1
93
-0,         60,         60,        1,   230400, 0xf57e866d
94
-1,     132300,     132300,     2205,     4410, 0xb9fc423c
95
-0,         61,         61,        1,   230400, 0x85f594f5
96
-1,     134505,     134505,     2205,     4410, 0x6b9b4ef9
97
-0,         62,         62,        1,   230400, 0xb09f99dd
98
-1,     136710,     136710,     2205,     4410, 0x39290f10
99
-0,         63,         63,        1,   230400, 0x2b368475
100
-1,     138915,     138915,     2205,     4410, 0xad718eb4
101
-0,         64,         64,        1,   230400, 0xa2417afd
102
-1,     141120,     141120,     2205,     4410, 0x82f463ac
103
-0,         65,         65,        1,   230400, 0x590b709d
104
-1,     143325,     143325,     2205,     4410, 0xfac87cac
105
-0,         66,         66,        1,   230400, 0x5d617705
106
-1,     145530,     145530,     2205,     4410, 0x9e8bcca7
107
-0,         67,         67,        1,   230400, 0xabf981ad
108
-1,     147735,     147735,     2205,     4410, 0x52f79c99
109
-0,         68,         68,        1,   230400, 0x5a8590cd
110
-1,     149940,     149940,     2205,     4410, 0xf2d14de2
111
-0,         69,         69,        1,   230400, 0x1bff853d
112
-1,     152145,     152145,     2205,     4410, 0x367f95e1
113
-0,         70,         70,        1,   230400, 0x71d08055
114
-1,     154350,     154350,     2205,     4410, 0x8bfac293
115
-0,         71,         71,        1,   230400, 0x2ebd817d
116
-1,     156555,     156555,     2205,     4410, 0x01ea5040
117
-0,         72,         72,        1,   230400, 0x6e838255
118
-1,     158760,     158760,     2205,     4410, 0x8ff5e212
119
-0,         73,         73,        1,   230400, 0x043984cd
120
-1,     160965,     160965,     2205,     4410, 0x93f32824
121
-0,         74,         74,        1,   230400, 0x7ff18495
122
-1,     163170,     163170,     2205,     4410, 0x998f90dc
123
-0,         75,         75,        1,   230400, 0xa43b8385
124
-1,     165375,     165375,     2205,     4410, 0x65231170
125
-0,         76,         76,        1,   230400, 0x72b5825d
126
-1,     167580,     167580,     2205,     4410, 0xc79039a1
127
-0,         77,         77,        1,   230400, 0x3a178085
128
-1,     169785,     169785,     2205,     4410, 0x0b0e58bd
129
-0,         78,         78,        1,   230400, 0x67748245
130
-1,     171990,     171990,     2205,     4410, 0xc24ab4fa
131
-0,         79,         79,        1,   230400, 0xeddf81d5
132
-1,     174195,     174195,     2205,     4410, 0xd3796a8e
133
-0,         80,         80,        1,   230400, 0x8b088665
134
-1,     176400,     176400,     2205,     4410, 0xa37f8295
135
-0,         81,         81,        1,   230400, 0x6c408e15
136
-1,     178605,     178605,     2205,     4410, 0xb760fed7
137
-0,         82,         82,        1,   230400, 0x81f196dd
138
-1,     180810,     180810,     2205,     4410, 0x05495a34
139
-0,         83,         83,        1,   230400, 0xab9f953d
140
-1,     183015,     183015,     2205,     4410, 0x6f203437
141
-0,         84,         84,        1,   230400, 0xa5f69795
142
-1,     185220,     185220,     2205,     4410, 0x71299402
143
-0,         85,         85,        1,   230400, 0xa772950d
144
-1,     187425,     187425,     2205,     4410, 0x72e7b346
145
-0,         86,         86,        1,   230400, 0x6a5596d5
146
-1,     189630,     189630,     2205,     4410, 0x879b0dae
147
-0,         87,         87,        1,   230400, 0x1355958d
148
-1,     191835,     191835,     2205,     4410, 0x041aa1bd
149
-0,         88,         88,        1,   230400, 0x4134981d
150
-1,     194040,     194040,     2205,     4410, 0x18a962e6
151
-0,         89,         89,        1,   230400, 0x8b929515
152
-1,     196245,     196245,     2205,     4410, 0x21d20539
153
-0,         90,         90,        1,   230400, 0x482f95c5
154
-1,     198450,     198450,     2205,     4410, 0x8f449267
155
-0,         91,         91,        1,   230400, 0x7a9795d5
156
-1,     200655,     200655,     2205,     4410, 0xecdc01d6
157
-0,         92,         92,        1,   230400, 0x21c29abd
158
-1,     202860,     202860,     2205,     4410, 0x458abd5a
159
-0,         93,         93,        1,   230400, 0x9ae6a475
160
-1,     205065,     205065,     2205,     4410, 0xa070ea63
161
-0,         94,         94,        1,   230400, 0x3734aee5
162
-1,     207270,     207270,     2205,     4410, 0xc25b26ce
163
-0,         95,         95,        1,   230400, 0xa0a1b365
164
-1,     209475,     209475,     2205,     4410, 0x4d9237ca
165
-0,         96,         96,        1,   230400, 0x2dcab1c5
166
-1,     211680,     211680,     2205,     4410, 0x748e1801
167
-0,         97,         97,        1,   230400, 0x9c8b6c44
168
-1,     213885,     213885,     2205,     4410, 0xc96b69e6
169
-0,         98,         98,        1,   230400, 0x5da75feb
170
-1,     216090,     216090,     2205,     4410, 0x6663186c
171
-0,         99,         99,        1,   230400, 0x4d02f8e3
172
-1,     218295,     218295,     2205,     4410, 0x7f6d3081
173
-0,        100,        100,        1,   230400, 0x66824f3a
174
-1,     220500,     220500,     2205,     4410, 0x1a0343b5
175
-0,        101,        101,        1,   230400, 0x0c9257e2
176
-1,     222705,     222705,     2205,     4410, 0xc48e338c
177
-0,        102,        102,        1,   230400, 0xb2927092
178
-1,     224910,     224910,     2205,     4410, 0x26fc03c8
179
-0,        103,        103,        1,   230400, 0xb5dc6e9a
180
-1,     227115,     227115,     2205,     4410, 0x69be7e2d
181
-0,        104,        104,        1,   230400, 0x6e567bc6
182
-1,     229320,     229320,     2205,     4410, 0x69a74da1
183
-0,        105,        105,        1,   230400, 0xbf9e0f7a
184
-1,     231525,     231525,     2205,     4410, 0x85bd2ab3
185
-0,        106,        106,        1,   230400, 0xb16f684a
186
-1,     233730,     233730,     2205,     4410, 0xeff05426
187
-0,        107,        107,        1,   230400, 0xf9e55e81
188
-1,     235935,     235935,     2205,     4410, 0x292829e0
189
-0,        108,        108,        1,   230400, 0xd8d0bcba
190
-1,     238140,     238140,     2205,     4410, 0x8f741798
191
-0,        109,        109,        1,   230400, 0x44720ac0
192
-1,     240345,     240345,     2205,     4410, 0x6b9337e9
193
-0,        110,        110,        1,   230400, 0x7d4c2058
194
-1,     242550,     242550,     2205,     4410, 0xe4e1703f
195
-1,     244755,     244755,     2205,     4410, 0x043d6c35
196
-1,     246960,     246960,     2205,     4410, 0x3a8988e7
197
-0,        113,        113,        1,   230400, 0xb0973eb9
198
-1,     249165,     249165,     2205,     4410, 0x1fa7d2a9
199
-0,        114,        114,        1,   230400, 0x405a13ce
200
-1,     251370,     251370,     2205,     4410, 0xe28799e3
201
-0,        115,        115,        1,   230400, 0x6422f00a
202
-1,     253575,     253575,     2205,     4410, 0xc2df4470
203
-0,        116,        116,        1,   230400, 0x924b6c1e
204
-1,     255780,     255780,     2205,     4410, 0x694d0cf5
205
-1,     257985,     257985,     2205,     4410, 0x5aac2dcf
206
-1,     260190,     260190,     2205,     4410, 0x259fa2db
207
-1,     262395,     262395,     2205,     4410, 0xd16d6803
208
-1,     264600,     264600,     2205,     4410, 0xa4b3478a
209
-1,     266805,     266805,     2205,     4410, 0xdbe0443d
210
-1,     269010,     269010,     2205,     4410, 0x26c16119
211
-1,     271215,     271215,     2205,     4410, 0x0c06475c
212
-1,     273420,     273420,     2205,     4410, 0x6ffaba2d
213
-1,     275625,     275625,     2205,     4410, 0x5b287192
214
-1,     277830,     277830,     2205,     4410, 0xf2cf2651
215
-1,     280035,     280035,     2205,     4410, 0x3857673a
216
-1,     282240,     282240,     2205,     4410, 0x5b555feb
217
-1,     284445,     284445,     2205,     4410, 0x93f997af
218
-1,     286650,     286650,     2205,     4410, 0xb3ba8d35
219
-1,     288855,     288855,     2205,     4410, 0x66433944
220
-1,     291060,     291060,     2205,     4410, 0xf0005a5f
221
-1,     293265,     293265,     2205,     4410, 0xb948541f
222
-1,     295470,     295470,     2205,     4410, 0xc8f1b16f
223
-1,     297675,     297675,     2205,     4410, 0x7d4b7506
224
-1,     299880,     299880,     2205,     4410, 0xac723c55
225
-1,     302085,     302085,     2205,     4410, 0x2926fab5
226
-1,     304290,     304290,     2205,     4410, 0x31684995
227
-1,     306495,     306495,     2205,     4410, 0x35ebfca4
228
-1,     308700,     308700,     2205,     4410, 0x9cd42c18
229
-1,     310905,     310905,     2205,     4410, 0xd7ecd7b1
230
-1,     313110,     313110,     2205,     4410, 0x5e13c602
231
-1,     315315,     315315,     2205,     4410, 0xe955b5e3
232
-1,     317520,     317520,     2205,     4410, 0xefad19a1
233
-0,        145,        145,        1,   230400, 0xcf7809c0
234
-1,     319725,     319725,     2205,     4410, 0x435950de
235
-0,        146,        146,        1,   230400, 0x883a3863
236
-1,     321930,     321930,     2205,     4410, 0x9d624ebe
237
-0,        147,        147,        1,   230400, 0x6adc9e03
238
-1,     324135,     324135,     2205,     4410, 0x774a9158
239
-0,        148,        148,        1,   230400, 0x4f5ab7a8
240
-1,     326340,     326340,     2205,     4410, 0x8c41e66a
241
-1,     328545,     328545,     2205,     4410, 0x70112740
242
-1,     330750,     330750,     2205,     4410, 0x55abc7a2
243
-1,     332955,     332955,     2205,     4410, 0x0ec3183c
244
-1,     335160,     335160,     2205,     4410, 0x54609c56
245
-1,     337365,     337365,     2205,     4410, 0x60d49f92
246
-1,     339570,     339570,     2205,     4410, 0x5fb061c8
247
-1,     341775,     341775,     2205,     4410, 0x6e119c98
248
-1,     343980,     343980,     2205,     4410, 0x3f39fc69
249
-1,     346185,     346185,     2205,     4410, 0xef466d0e
250
-1,     348390,     348390,     2205,     4410, 0xf4cb6fe1
251
-1,     350595,     350595,     2205,     4410, 0xc4434439
252
-1,     352800,     352800,     2205,     4410, 0xd02329d2
253
-1,     355005,     355005,     2205,     4410, 0x216cffaf
254
-1,     357210,     357210,     2205,     4410, 0x7e59e8c1
255
-1,     359415,     359415,     2205,     4410, 0xc7c3346d
256
-1,     361620,     361620,     2205,     4410, 0x5b3723af
257
-1,     363825,     363825,     2205,     4410, 0x76097270
258
-1,     366030,     366030,     2205,     4410, 0xae39a233
259
-1,     368235,     368235,     2205,     4410, 0x686a471c
260
-1,     370440,     370440,     2205,     4410, 0x3af3c5e0
261
-1,     372645,     372645,     2205,     4410, 0x11ac711e
262
-1,     374850,     374850,     2205,     4410, 0xcd8da8ce
263
-1,     377055,     377055,     2205,     4410, 0x21296e3a
264
-1,     379260,     379260,     2205,     4410, 0x77168188
265
-1,     381465,     381465,     2205,     4410, 0x5fcf59cd
266
-1,     383670,     383670,     2205,     4410, 0x390c8717
267
-1,     385875,     385875,     2205,     4410, 0x3d5d5b3c
268
-1,     388080,     388080,     2205,     4410, 0x3b8f13d3
269
-1,     390285,     390285,     2205,     4410, 0x5b002c2f
270
-1,     392490,     392490,     2205,     4410, 0x9e1d2b08
271
-1,     394695,     394695,     2205,     4410, 0x69454ebd
272
-1,     396900,     396900,     2205,     4410, 0x62a54bec
273
-1,     399105,     399105,     2205,     4410, 0x4d231fdb
274
-1,     401310,     401310,     2205,     4410, 0x65624ff7
275
-1,     403515,     403515,     2205,     4410, 0x6fc66932
276
-1,     405720,     405720,     2205,     4410, 0x23200cf6
277
-1,     407925,     407925,     2205,     4410, 0xf8033122
278
-1,     410130,     410130,     2205,     4410, 0x0fce0744
279
-1,     412335,     412335,     2205,     4410, 0x9302683e
280
-1,     414540,     414540,     2205,     4410, 0xd2380245
281
-1,     416745,     416745,     2205,     4410, 0x482e0872
282
-1,     418950,     418950,     2205,     4410, 0xe98e6461
283
-1,     421155,     421155,     2205,     4410, 0x1db404e3
284
-1,     423360,     423360,     2205,     4410, 0x47a26d45
285
-1,     425565,     425565,     2205,     4410, 0x449a348a
286
-1,     427770,     427770,     2205,     4410, 0xee874f84
287
-1,     429975,     429975,     2205,     4410, 0xc4ecf965
288
-1,     432180,     432180,     2205,     4410, 0xcc450bc8
289
-1,     434385,     434385,     2205,     4410, 0xb18d044b
290
-1,     436590,     436590,     2205,     4410, 0x895435e8
291
-1,     438795,     438795,     2205,     4410, 0x57e7574e
292
-1,     441000,     441000,     2205,     4410, 0x8041ad3d
293
-1,     443205,     443205,     2205,     4410, 0x853d1616
294
-1,     445410,     445410,     2205,     4410, 0xa11bb32b
295
-1,     447615,     447615,     2205,     4410, 0xe10ea0de
296
-1,     449820,     449820,     2205,     4410, 0xdf2ee328
297
-1,     452025,     452025,     2205,     4410, 0xd5a6dcae
298
-1,     454230,     454230,     2205,     4410, 0xd176c00b
299
-1,     456435,     456435,     2205,     4410, 0x9cd6bcf3
300
-1,     458640,     458640,     2205,     4410, 0x2569690a
301
-1,     460845,     460845,     2205,     4410, 0x6824aa1d
302
-1,     463050,     463050,     2205,     4410, 0xa9110afa
303
-1,     465255,     465255,     2205,     4410, 0x115c25be
304
-1,     467460,     467460,     2205,     4410, 0x1100f085
305
-1,     469665,     469665,     2205,     4410, 0x00000000
306
-0,        214,        214,        1,   230400, 0xdc0aab94
307
-1,     471870,     471870,     2205,     4410, 0x00000000
308
-1,     474075,     474075,     2205,     4410, 0x00000000
309
-1,     476280,     476280,     2205,     4410, 0x00000000
310
-1,     478485,     478485,     2205,     4410, 0x00000000
311
-1,     480690,     480690,     2205,     4410, 0x00000000
312
-1,     482895,     482895,     2205,     4410, 0x00000000
313
-1,     485100,     485100,     2205,     4410, 0x00000000
314
-1,     487305,     487305,     2205,     4410, 0x00000000
315
-1,     489510,     489510,     2205,     4410, 0x00000000
316
-1,     491715,     491715,     2205,     4410, 0x00000000
317
-1,     493920,     493920,     2205,     4410, 0x00000000
318
-1,     496125,     496125,     2205,     4410, 0x00000000
319
-1,     498330,     498330,     2205,     4410, 0x00000000
320
-1,     500535,     500535,     2205,     4410, 0x00000000
321
-1,     502740,     502740,     2205,     4410, 0x00000000
322
-1,     504945,     504945,     2205,     4410, 0x00000000
323
-1,     507150,     507150,     2205,     4410, 0x00000000
324
-1,     509355,     509355,     2205,     4410, 0x00000000
325
-1,     511560,     511560,     2205,     4410, 0x00000000
326
-1,     513765,     513765,     2205,     4410, 0x00000000
327
-1,     515970,     515970,     2205,     4410, 0x00000000
328
-1,     518175,     518175,     2205,     4410, 0x00000000
329
-1,     520380,     520380,     2205,     4410, 0x00000000
330
-1,     522585,     522585,     2205,     4410, 0x00000000
331
-1,     524790,     524790,     2205,     4410, 0x00000000
332
-1,     526995,     526995,     2205,     4410, 0x00000000
333
-1,     529200,     529200,     2205,     4410, 0x00000000
334
-1,     531405,     531405,     2205,     4410, 0x00000000
335 1
new file mode 100644
... ...
@@ -0,0 +1,216 @@
0
+#tb 0: 1/22050
1
+0,          0,          0,    61740,   123480, 0x3a794c13
2
+0,      61740,      61740,     2205,     4410, 0x109d04e0
3
+0,      63945,      63945,     2205,     4410, 0x224d244f
4
+0,      66150,      66150,     2205,     4410, 0xbb72413d
5
+0,      68355,      68355,     2205,     4410, 0xaa5f5b86
6
+0,      70560,      70560,     2205,     4410, 0x94e7aea7
7
+0,      72765,      72765,     2205,     4410, 0xad497ca0
8
+0,      74970,      74970,     2205,     4410, 0x1de10c9e
9
+0,      77175,      77175,     2205,     4410, 0x9f55efa8
10
+0,      79380,      79380,     2205,     4410, 0x220a072a
11
+0,      81585,      81585,     2205,     4410, 0xa7dafb29
12
+0,      83790,      83790,     2205,     4410, 0xd5e29c7a
13
+0,      85995,      85995,     2205,     4410, 0xb8465006
14
+0,      88200,      88200,     2205,     4410, 0x518669c7
15
+0,      90405,      90405,     2205,     4410, 0xb5b5efca
16
+0,      92610,      92610,     2205,     4410, 0x8600015d
17
+0,      94815,      94815,     2205,     4410, 0xe2f68fe9
18
+0,      97020,      97020,     2205,     4410, 0x8d3458d9
19
+0,      99225,      99225,     2205,     4410, 0xf1ff4775
20
+0,     101430,     101430,     2205,     4410, 0x830f67c9
21
+0,     103635,     103635,     2205,     4410, 0x110e0bc1
22
+0,     105840,     105840,     2205,     4410, 0x71682f47
23
+0,     108045,     108045,     2205,     4410, 0x38119095
24
+0,     110250,     110250,     2205,     4410, 0xd2494db6
25
+0,     112455,     112455,     2205,     4410, 0x8b552509
26
+0,     114660,     114660,     2205,     4410, 0x71e52909
27
+0,     116865,     116865,     2205,     4410, 0x9f0a6f4d
28
+0,     119070,     119070,     2205,     4410, 0x901302f2
29
+0,     121275,     121275,     2205,     4410, 0x855d5222
30
+0,     123480,     123480,     2205,     4410, 0x324bb2fe
31
+0,     125685,     125685,     2205,     4410, 0xe85f583f
32
+0,     127890,     127890,     2205,     4410, 0x2cbc67c4
33
+0,     130095,     130095,     2205,     4410, 0xc82e6aa1
34
+0,     132300,     132300,     2205,     4410, 0xb9fc423c
35
+0,     134505,     134505,     2205,     4410, 0x6b9b4ef9
36
+0,     136710,     136710,     2205,     4410, 0x39290f10
37
+0,     138915,     138915,     2205,     4410, 0xad718eb4
38
+0,     141120,     141120,     2205,     4410, 0x82f463ac
39
+0,     143325,     143325,     2205,     4410, 0xfac87cac
40
+0,     145530,     145530,     2205,     4410, 0x9e8bcca7
41
+0,     147735,     147735,     2205,     4410, 0x52f79c99
42
+0,     149940,     149940,     2205,     4410, 0xf2d14de2
43
+0,     152145,     152145,     2205,     4410, 0x367f95e1
44
+0,     154350,     154350,     2205,     4410, 0x8bfac293
45
+0,     156555,     156555,     2205,     4410, 0x01ea5040
46
+0,     158760,     158760,     2205,     4410, 0x8ff5e212
47
+0,     160965,     160965,     2205,     4410, 0x93f32824
48
+0,     163170,     163170,     2205,     4410, 0x998f90dc
49
+0,     165375,     165375,     2205,     4410, 0x65231170
50
+0,     167580,     167580,     2205,     4410, 0xc79039a1
51
+0,     169785,     169785,     2205,     4410, 0x0b0e58bd
52
+0,     171990,     171990,     2205,     4410, 0xc24ab4fa
53
+0,     174195,     174195,     2205,     4410, 0xd3796a8e
54
+0,     176400,     176400,     2205,     4410, 0xa37f8295
55
+0,     178605,     178605,     2205,     4410, 0xb760fed7
56
+0,     180810,     180810,     2205,     4410, 0x05495a34
57
+0,     183015,     183015,     2205,     4410, 0x6f203437
58
+0,     185220,     185220,     2205,     4410, 0x71299402
59
+0,     187425,     187425,     2205,     4410, 0x72e7b346
60
+0,     189630,     189630,     2205,     4410, 0x879b0dae
61
+0,     191835,     191835,     2205,     4410, 0x041aa1bd
62
+0,     194040,     194040,     2205,     4410, 0x18a962e6
63
+0,     196245,     196245,     2205,     4410, 0x21d20539
64
+0,     198450,     198450,     2205,     4410, 0x8f449267
65
+0,     200655,     200655,     2205,     4410, 0xecdc01d6
66
+0,     202860,     202860,     2205,     4410, 0x458abd5a
67
+0,     205065,     205065,     2205,     4410, 0xa070ea63
68
+0,     207270,     207270,     2205,     4410, 0xc25b26ce
69
+0,     209475,     209475,     2205,     4410, 0x4d9237ca
70
+0,     211680,     211680,     2205,     4410, 0x748e1801
71
+0,     213885,     213885,     2205,     4410, 0xc96b69e6
72
+0,     216090,     216090,     2205,     4410, 0x6663186c
73
+0,     218295,     218295,     2205,     4410, 0x7f6d3081
74
+0,     220500,     220500,     2205,     4410, 0x1a0343b5
75
+0,     222705,     222705,     2205,     4410, 0xc48e338c
76
+0,     224910,     224910,     2205,     4410, 0x26fc03c8
77
+0,     227115,     227115,     2205,     4410, 0x69be7e2d
78
+0,     229320,     229320,     2205,     4410, 0x69a74da1
79
+0,     231525,     231525,     2205,     4410, 0x85bd2ab3
80
+0,     233730,     233730,     2205,     4410, 0xeff05426
81
+0,     235935,     235935,     2205,     4410, 0x292829e0
82
+0,     238140,     238140,     2205,     4410, 0x8f741798
83
+0,     240345,     240345,     2205,     4410, 0x6b9337e9
84
+0,     242550,     242550,     2205,     4410, 0xe4e1703f
85
+0,     244755,     244755,     2205,     4410, 0x043d6c35
86
+0,     246960,     246960,     2205,     4410, 0x3a8988e7
87
+0,     249165,     249165,     2205,     4410, 0x1fa7d2a9
88
+0,     251370,     251370,     2205,     4410, 0xe28799e3
89
+0,     253575,     253575,     2205,     4410, 0xc2df4470
90
+0,     255780,     255780,     2205,     4410, 0x694d0cf5
91
+0,     257985,     257985,     2205,     4410, 0x5aac2dcf
92
+0,     260190,     260190,     2205,     4410, 0x259fa2db
93
+0,     262395,     262395,     2205,     4410, 0xd16d6803
94
+0,     264600,     264600,     2205,     4410, 0xa4b3478a
95
+0,     266805,     266805,     2205,     4410, 0xdbe0443d
96
+0,     269010,     269010,     2205,     4410, 0x26c16119
97
+0,     271215,     271215,     2205,     4410, 0x0c06475c
98
+0,     273420,     273420,     2205,     4410, 0x6ffaba2d
99
+0,     275625,     275625,     2205,     4410, 0x5b287192
100
+0,     277830,     277830,     2205,     4410, 0xf2cf2651
101
+0,     280035,     280035,     2205,     4410, 0x3857673a
102
+0,     282240,     282240,     2205,     4410, 0x5b555feb
103
+0,     284445,     284445,     2205,     4410, 0x93f997af
104
+0,     286650,     286650,     2205,     4410, 0xb3ba8d35
105
+0,     288855,     288855,     2205,     4410, 0x66433944
106
+0,     291060,     291060,     2205,     4410, 0xf0005a5f
107
+0,     293265,     293265,     2205,     4410, 0xb948541f
108
+0,     295470,     295470,     2205,     4410, 0xc8f1b16f
109
+0,     297675,     297675,     2205,     4410, 0x7d4b7506
110
+0,     299880,     299880,     2205,     4410, 0xac723c55
111
+0,     302085,     302085,     2205,     4410, 0x2926fab5
112
+0,     304290,     304290,     2205,     4410, 0x31684995
113
+0,     306495,     306495,     2205,     4410, 0x35ebfca4
114
+0,     308700,     308700,     2205,     4410, 0x9cd42c18
115
+0,     310905,     310905,     2205,     4410, 0xd7ecd7b1
116
+0,     313110,     313110,     2205,     4410, 0x5e13c602
117
+0,     315315,     315315,     2205,     4410, 0xe955b5e3
118
+0,     317520,     317520,     2205,     4410, 0xefad19a1
119
+0,     319725,     319725,     2205,     4410, 0x435950de
120
+0,     321930,     321930,     2205,     4410, 0x9d624ebe
121
+0,     324135,     324135,     2205,     4410, 0x774a9158
122
+0,     326340,     326340,     2205,     4410, 0x8c41e66a
123
+0,     328545,     328545,     2205,     4410, 0x70112740
124
+0,     330750,     330750,     2205,     4410, 0x55abc7a2
125
+0,     332955,     332955,     2205,     4410, 0x0ec3183c
126
+0,     335160,     335160,     2205,     4410, 0x54609c56
127
+0,     337365,     337365,     2205,     4410, 0x60d49f92
128
+0,     339570,     339570,     2205,     4410, 0x5fb061c8
129
+0,     341775,     341775,     2205,     4410, 0x6e119c98
130
+0,     343980,     343980,     2205,     4410, 0x3f39fc69
131
+0,     346185,     346185,     2205,     4410, 0xef466d0e
132
+0,     348390,     348390,     2205,     4410, 0xf4cb6fe1
133
+0,     350595,     350595,     2205,     4410, 0xc4434439
134
+0,     352800,     352800,     2205,     4410, 0xd02329d2
135
+0,     355005,     355005,     2205,     4410, 0x216cffaf
136
+0,     357210,     357210,     2205,     4410, 0x7e59e8c1
137
+0,     359415,     359415,     2205,     4410, 0xc7c3346d
138
+0,     361620,     361620,     2205,     4410, 0x5b3723af
139
+0,     363825,     363825,     2205,     4410, 0x76097270
140
+0,     366030,     366030,     2205,     4410, 0xae39a233
141
+0,     368235,     368235,     2205,     4410, 0x686a471c
142
+0,     370440,     370440,     2205,     4410, 0x3af3c5e0
143
+0,     372645,     372645,     2205,     4410, 0x11ac711e
144
+0,     374850,     374850,     2205,     4410, 0xcd8da8ce
145
+0,     377055,     377055,     2205,     4410, 0x21296e3a
146
+0,     379260,     379260,     2205,     4410, 0x77168188
147
+0,     381465,     381465,     2205,     4410, 0x5fcf59cd
148
+0,     383670,     383670,     2205,     4410, 0x390c8717
149
+0,     385875,     385875,     2205,     4410, 0x3d5d5b3c
150
+0,     388080,     388080,     2205,     4410, 0x3b8f13d3
151
+0,     390285,     390285,     2205,     4410, 0x5b002c2f
152
+0,     392490,     392490,     2205,     4410, 0x9e1d2b08
153
+0,     394695,     394695,     2205,     4410, 0x69454ebd
154
+0,     396900,     396900,     2205,     4410, 0x62a54bec
155
+0,     399105,     399105,     2205,     4410, 0x4d231fdb
156
+0,     401310,     401310,     2205,     4410, 0x65624ff7
157
+0,     403515,     403515,     2205,     4410, 0x6fc66932
158
+0,     405720,     405720,     2205,     4410, 0x23200cf6
159
+0,     407925,     407925,     2205,     4410, 0xf8033122
160
+0,     410130,     410130,     2205,     4410, 0x0fce0744
161
+0,     412335,     412335,     2205,     4410, 0x9302683e
162
+0,     414540,     414540,     2205,     4410, 0xd2380245
163
+0,     416745,     416745,     2205,     4410, 0x482e0872
164
+0,     418950,     418950,     2205,     4410, 0xe98e6461
165
+0,     421155,     421155,     2205,     4410, 0x1db404e3
166
+0,     423360,     423360,     2205,     4410, 0x47a26d45
167
+0,     425565,     425565,     2205,     4410, 0x449a348a
168
+0,     427770,     427770,     2205,     4410, 0xee874f84
169
+0,     429975,     429975,     2205,     4410, 0xc4ecf965
170
+0,     432180,     432180,     2205,     4410, 0xcc450bc8
171
+0,     434385,     434385,     2205,     4410, 0xb18d044b
172
+0,     436590,     436590,     2205,     4410, 0x895435e8
173
+0,     438795,     438795,     2205,     4410, 0x57e7574e
174
+0,     441000,     441000,     2205,     4410, 0x8041ad3d
175
+0,     443205,     443205,     2205,     4410, 0x853d1616
176
+0,     445410,     445410,     2205,     4410, 0xa11bb32b
177
+0,     447615,     447615,     2205,     4410, 0xe10ea0de
178
+0,     449820,     449820,     2205,     4410, 0xdf2ee328
179
+0,     452025,     452025,     2205,     4410, 0xd5a6dcae
180
+0,     454230,     454230,     2205,     4410, 0xd176c00b
181
+0,     456435,     456435,     2205,     4410, 0x9cd6bcf3
182
+0,     458640,     458640,     2205,     4410, 0x2569690a
183
+0,     460845,     460845,     2205,     4410, 0x6824aa1d
184
+0,     463050,     463050,     2205,     4410, 0xa9110afa
185
+0,     465255,     465255,     2205,     4410, 0x115c25be
186
+0,     467460,     467460,     2205,     4410, 0x1100f085
187
+0,     469665,     469665,     2205,     4410, 0x00000000
188
+0,     471870,     471870,     2205,     4410, 0x00000000
189
+0,     474075,     474075,     2205,     4410, 0x00000000
190
+0,     476280,     476280,     2205,     4410, 0x00000000
191
+0,     478485,     478485,     2205,     4410, 0x00000000
192
+0,     480690,     480690,     2205,     4410, 0x00000000
193
+0,     482895,     482895,     2205,     4410, 0x00000000
194
+0,     485100,     485100,     2205,     4410, 0x00000000
195
+0,     487305,     487305,     2205,     4410, 0x00000000
196
+0,     489510,     489510,     2205,     4410, 0x00000000
197
+0,     491715,     491715,     2205,     4410, 0x00000000
198
+0,     493920,     493920,     2205,     4410, 0x00000000
199
+0,     496125,     496125,     2205,     4410, 0x00000000
200
+0,     498330,     498330,     2205,     4410, 0x00000000
201
+0,     500535,     500535,     2205,     4410, 0x00000000
202
+0,     502740,     502740,     2205,     4410, 0x00000000
203
+0,     504945,     504945,     2205,     4410, 0x00000000
204
+0,     507150,     507150,     2205,     4410, 0x00000000
205
+0,     509355,     509355,     2205,     4410, 0x00000000
206
+0,     511560,     511560,     2205,     4410, 0x00000000
207
+0,     513765,     513765,     2205,     4410, 0x00000000
208
+0,     515970,     515970,     2205,     4410, 0x00000000
209
+0,     518175,     518175,     2205,     4410, 0x00000000
210
+0,     520380,     520380,     2205,     4410, 0x00000000
211
+0,     522585,     522585,     2205,     4410, 0x00000000
212
+0,     524790,     524790,     2205,     4410, 0x00000000
213
+0,     526995,     526995,     2205,     4410, 0x00000000
214
+0,     529200,     529200,     2205,     4410, 0x00000000
215
+0,     531405,     531405,     2205,     4410, 0x00000000
0 216
new file mode 100644
... ...
@@ -0,0 +1,118 @@
0
+#tb 0: 1/10
1
+0,          0,          0,        1,   230400, 0x0224ab01
2
+0,          1,          1,        1,   230400, 0x449e4d81
3
+0,          2,          2,        1,   230400, 0x3e15e07a
4
+0,          3,          3,        1,   230400, 0xdabe4172
5
+0,          4,          4,        1,   230400, 0x0947b7db
6
+0,          5,          5,        1,   230400, 0x934e243b
7
+0,          6,          6,        1,   230400, 0x6b5c5b6c
8
+0,          7,          7,        1,   230400, 0x4bf7bbb5
9
+0,          8,          8,        1,   230400, 0x423eec8e
10
+0,          9,          9,        1,   230400, 0x63663b5e
11
+0,         10,         10,        1,   230400, 0x9c258a67
12
+0,         11,         11,        1,   230400, 0x1c92b6e0
13
+0,         12,         12,        1,   230400, 0xdd0a0e28
14
+0,         13,         13,        1,   230400, 0x51d64af1
15
+0,         14,         14,        1,   230400, 0x5776ac12
16
+0,         15,         15,        1,   230400, 0x49070132
17
+0,         16,         16,        1,   230400, 0xa59635ab
18
+0,         17,         17,        1,   230400, 0xb1f99504
19
+0,         18,         18,        1,   230400, 0x61fac725
20
+0,         19,         19,        1,   230400, 0xc32c28d5
21
+0,         20,         20,        1,   230400, 0x2b7a91d6
22
+0,         21,         21,        1,   230400, 0x917be717
23
+0,         22,         22,        1,   230400, 0xd3c5a2ff
24
+0,         23,         23,        1,   230400, 0x0678a707
25
+0,         24,         24,        1,   230400, 0x122504e6
26
+0,         25,         25,        1,   230400, 0x76aebdae
27
+0,         26,         26,        1,   230400, 0x81357545
28
+0,         27,         27,        1,   230400, 0x38baeebd
29
+0,         28,         28,        1,   230400, 0x1c5c44d4
30
+0,         29,         29,        1,   230400, 0x60e189cc
31
+0,         30,         30,        1,   230400, 0xb1f4381c
32
+0,         31,         31,        1,   230400, 0xb5048fed
33
+0,         32,         32,        1,   230400, 0xc947c30e
34
+0,         33,         33,        1,   230400, 0xe8e31c07
35
+0,         34,         34,        1,   230400, 0x6d49dd02
36
+0,         35,         35,        1,   230400, 0x293e15d3
37
+0,         36,         36,        1,   230400, 0x354d792e
38
+0,         37,         37,        1,   230400, 0x35468780
39
+0,         38,         38,        1,   230400, 0x365d3991
40
+0,         39,         39,        1,   230400, 0xc9debef2
41
+0,         40,         40,        1,   230400, 0x4c4634c2
42
+0,         41,         41,        1,   230400, 0x347c2dca
43
+0,         42,         42,        1,   230400, 0x1efa0aaa
44
+0,         43,         43,        1,   230400, 0xa79a0b5a
45
+0,         44,         44,        1,   230400, 0xfdb2dcdb
46
+0,         45,         45,        1,   230400, 0x42dbea33
47
+0,         46,         46,        1,   230400, 0x2a207e43
48
+0,         47,         47,        1,   230400, 0x86573783
49
+0,         48,         48,        1,   230400, 0xc3968473
50
+0,         49,         49,        1,   230400, 0x8f62a7b4
51
+0,         50,         50,        1,   230400, 0x5a2e3073
52
+0,         51,         51,        1,   230400, 0xd24f5e2c
53
+0,         52,         52,        1,   230400, 0x1df3c67d
54
+0,         53,         53,        1,   230400, 0xe4fd884d
55
+0,         57,         57,        1,   230400, 0x9a228555
56
+0,         58,         58,        1,   230400, 0x9eba8ed5
57
+0,         59,         59,        1,   230400, 0x3d808a3d
58
+0,         60,         60,        1,   230400, 0xf57e866d
59
+0,         61,         61,        1,   230400, 0x85f594f5
60
+0,         62,         62,        1,   230400, 0xb09f99dd
61
+0,         63,         63,        1,   230400, 0x2b368475
62
+0,         64,         64,        1,   230400, 0xa2417afd
63
+0,         65,         65,        1,   230400, 0x590b709d
64
+0,         66,         66,        1,   230400, 0x5d617705
65
+0,         67,         67,        1,   230400, 0xabf981ad
66
+0,         68,         68,        1,   230400, 0x5a8590cd
67
+0,         69,         69,        1,   230400, 0x1bff853d
68
+0,         70,         70,        1,   230400, 0x71d08055
69
+0,         71,         71,        1,   230400, 0x2ebd817d
70
+0,         72,         72,        1,   230400, 0x6e838255
71
+0,         73,         73,        1,   230400, 0x043984cd
72
+0,         74,         74,        1,   230400, 0x7ff18495
73
+0,         75,         75,        1,   230400, 0xa43b8385
74
+0,         76,         76,        1,   230400, 0x72b5825d
75
+0,         77,         77,        1,   230400, 0x3a178085
76
+0,         78,         78,        1,   230400, 0x67748245
77
+0,         79,         79,        1,   230400, 0xeddf81d5
78
+0,         80,         80,        1,   230400, 0x8b088665
79
+0,         81,         81,        1,   230400, 0x6c408e15
80
+0,         82,         82,        1,   230400, 0x81f196dd
81
+0,         83,         83,        1,   230400, 0xab9f953d
82
+0,         84,         84,        1,   230400, 0xa5f69795
83
+0,         85,         85,        1,   230400, 0xa772950d
84
+0,         86,         86,        1,   230400, 0x6a5596d5
85
+0,         87,         87,        1,   230400, 0x1355958d
86
+0,         88,         88,        1,   230400, 0x4134981d
87
+0,         89,         89,        1,   230400, 0x8b929515
88
+0,         90,         90,        1,   230400, 0x482f95c5
89
+0,         91,         91,        1,   230400, 0x7a9795d5
90
+0,         92,         92,        1,   230400, 0x21c29abd
91
+0,         93,         93,        1,   230400, 0x9ae6a475
92
+0,         94,         94,        1,   230400, 0x3734aee5
93
+0,         95,         95,        1,   230400, 0xa0a1b365
94
+0,         96,         96,        1,   230400, 0x2dcab1c5
95
+0,         97,         97,        1,   230400, 0x9c8b6c44
96
+0,         98,         98,        1,   230400, 0x5da75feb
97
+0,         99,         99,        1,   230400, 0x4d02f8e3
98
+0,        100,        100,        1,   230400, 0x66824f3a
99
+0,        101,        101,        1,   230400, 0x0c9257e2
100
+0,        102,        102,        1,   230400, 0xb2927092
101
+0,        103,        103,        1,   230400, 0xb5dc6e9a
102
+0,        104,        104,        1,   230400, 0x6e567bc6
103
+0,        105,        105,        1,   230400, 0xbf9e0f7a
104
+0,        106,        106,        1,   230400, 0xb16f684a
105
+0,        107,        107,        1,   230400, 0xf9e55e81
106
+0,        108,        108,        1,   230400, 0xd8d0bcba
107
+0,        109,        109,        1,   230400, 0x44720ac0
108
+0,        110,        110,        1,   230400, 0x7d4c2058
109
+0,        113,        113,        1,   230400, 0xb0973eb9
110
+0,        114,        114,        1,   230400, 0x405a13ce
111
+0,        115,        115,        1,   230400, 0x6422f00a
112
+0,        116,        116,        1,   230400, 0x924b6c1e
113
+0,        145,        145,        1,   230400, 0xcf7809c0
114
+0,        146,        146,        1,   230400, 0x883a3863
115
+0,        147,        147,        1,   230400, 0x6adc9e03
116
+0,        148,        148,        1,   230400, 0x4f5ab7a8
117
+0,        214,        214,        1,   230400, 0xdc0aab94
0 118
deleted file mode 100644
... ...
@@ -1,188 +0,0 @@
1
-#tb 0: 71/1000
2
-#tb 1: 1/22050
3
-0,          0,          0,        1,   192000, 0x8926d7fc
4
-1,          0,          0,    23620,    47240, 0x9974897c
5
-0,          1,          1,        1,   192000, 0x2506d384
6
-0,          2,          2,        1,   192000, 0x9a8dc93a
7
-0,          3,          3,        1,   192000, 0x4badb7f2
8
-0,          4,          4,        1,   192000, 0xc1fc9631
9
-0,          5,          5,        1,   192000, 0xfc906592
10
-0,          6,          6,        1,   192000, 0xeddd28e2
11
-0,          7,          7,        1,   192000, 0xeee0dcf5
12
-0,          8,          8,        1,   192000, 0x76798c91
13
-0,          9,          9,        1,   192000, 0x8a034c1b
14
-0,         10,         10,        1,   192000, 0x4df3127c
15
-0,         11,         11,        1,   192000, 0x2eefd36f
16
-0,         12,         12,        1,   192000, 0x58a2a1d6
17
-0,         13,         13,        1,   192000, 0x1a3d7971
18
-0,         14,         14,        1,   192000, 0xa1a65bd5
19
-0,         15,         15,        1,   192000, 0x344957b9
20
-1,      23620,      23620,     1564,     3128, 0x7e4064b4
21
-0,         16,         16,        1,   192000, 0xe23b5f4e
22
-1,      25184,      25184,     1564,     3128, 0x80883301
23
-0,         17,         17,        1,   192000, 0xb5c2710b
24
-1,      26748,      26748,     1568,     3136, 0x2ad2d341
25
-0,         18,         18,        1,   192000, 0x7a25938f
26
-1,      28316,      28316,     1564,     3128, 0xda8468e3
27
-0,         19,         19,        1,   192000, 0x0a84e4c9
28
-1,      29880,      29880,     1568,     3136, 0x9d6f6cdf
29
-0,         20,         20,        1,   192000, 0x94209b0d
30
-1,      31448,      31448,     1564,     3128, 0x1aaa64b5
31
-0,         21,         21,        1,   192000, 0xf940e51f
32
-1,      33012,      33012,     1564,     3128, 0x9182728b
33
-0,         22,         22,        1,   192000, 0xb9fdec42
34
-1,      34576,      34576,     1568,     3136, 0xfa8e17b3
35
-0,         23,         23,        1,   192000, 0x7b04a376
36
-1,      36144,      36144,     1564,     3128, 0x0dc3c1cf
37
-0,         24,         24,        1,   192000, 0x5fe0026b
38
-1,      37708,      37708,     1568,     3136, 0x0109639d
39
-0,         25,         25,        1,   192000, 0x775aca39
40
-1,      39276,      39276,     1564,     3128, 0x6d8a12d9
41
-0,         26,         26,        1,   192000, 0xae14fb32
42
-1,      40840,      40840,     1564,     3128, 0x4b9a9597
43
-0,         27,         27,        1,   192000, 0x661106e5
44
-1,      42404,      42404,     1568,     3136, 0x9112710e
45
-0,         28,         28,        1,   192000, 0xe8658dbf
46
-1,      43972,      43972,     1564,     3128, 0x8cccf522
47
-0,         29,         29,        1,   192000, 0x5359f0f9
48
-1,      45536,      45536,     1564,     3128, 0x6594bbf3
49
-0,         30,         30,        1,   192000, 0xc1ec80f4
50
-1,      47100,      47100,     1568,     3136, 0xd878a7d5
51
-0,         31,         31,        1,   192000, 0xca53806b
52
-1,      48668,      48668,     1564,     3128, 0xaa6e3905
53
-0,         32,         32,        1,   192000, 0xf0766b2e
54
-1,      50232,      50232,     1568,     3136, 0x2a062e04
55
-0,         33,         33,        1,   192000, 0x39962da8
56
-1,      51800,      51800,     1564,     3128, 0x84e4006a
57
-0,         34,         34,        1,   192000, 0x4171c37f
58
-1,      53364,      53364,     1564,     3128, 0x85183633
59
-0,         35,         35,        1,   192000, 0x3abf3b46
60
-1,      54928,      54928,     1568,     3136, 0xb62d4b02
61
-0,         36,         36,        1,   192000, 0xecc68313
62
-1,      56496,      56496,     1564,     3128, 0xe209462a
63
-0,         37,         37,        1,   192000, 0xea339baf
64
-1,      58060,      58060,     1568,     3136, 0x57c4824b
65
-0,         38,         38,        1,   192000, 0x616b8f16
66
-1,      59628,      59628,     1564,     3128, 0x664a9163
67
-0,         39,         39,        1,   192000, 0xf77a8581
68
-1,      61192,      61192,     1564,     3128, 0xb4287874
69
-0,         40,         40,        1,   192000, 0xb315678b
70
-1,      62756,      62756,     1568,     3136, 0xde626885
71
-0,         41,         41,        1,   192000, 0x0a4a5218
72
-1,      64324,      64324,     1564,     3128, 0x919763c2
73
-0,         42,         42,        1,   192000, 0x98802be4
74
-1,      65888,      65888,     1564,     3128, 0xa4f664e1
75
-0,         43,         43,        1,   192000, 0xa2f0fd94
76
-1,      67452,      67452,     1568,     3136, 0xa0bab0d4
77
-0,         44,         44,        1,   192000, 0x6671c84f
78
-1,      69020,      69020,     1564,     3128, 0xe938939c
79
-0,         45,         45,        1,   192000, 0x38327e31
80
-1,      70584,      70584,     1568,     3136, 0x3679bfc7
81
-0,         46,         46,        1,   192000, 0xb85d3e08
82
-1,      72152,      72152,     1564,     3128, 0xc96c55c3
83
-0,         47,         47,        1,   192000, 0xdc69eba9
84
-1,      73716,      73716,     1564,     3128, 0x119114d6
85
-0,         48,         48,        1,   192000, 0x8955a0b3
86
-1,      75280,      75280,     1568,     3136, 0x42f3800f
87
-0,         49,         49,        1,   192000, 0x714a548b
88
-1,      76848,      76848,     1564,     3128, 0x4250c4ad
89
-0,         50,         50,        1,   192000, 0xc0471de9
90
-1,      78412,      78412,     1568,     3136, 0x5cdd4925
91
-0,         51,         51,        1,   192000, 0x2e16e039
92
-1,      79980,      79980,     1564,     3128, 0xa4c12360
93
-0,         52,         52,        1,   192000, 0x9fa4b033
94
-1,      81544,      81544,     1564,     3128, 0x849f48de
95
-0,         53,         53,        1,   192000, 0x4a0f9402
96
-1,      83108,      83108,     1568,     3136, 0x6acd8ff9
97
-0,         54,         54,        1,   192000, 0x1f3e6843
98
-1,      84676,      84676,     1564,     3128, 0xb2758556
99
-0,         55,         55,        1,   192000, 0x31774850
100
-1,      86240,      86240,     1564,     3128, 0x10f2fcb1
101
-0,         56,         56,        1,   192000, 0x9d5336a2
102
-1,      87804,      87804,     1568,     3136, 0xf0f02b23
103
-0,         57,         57,        1,   192000, 0xf7de27a2
104
-1,      89372,      89372,     1564,     3128, 0x64f759c6
105
-0,         58,         58,        1,   192000, 0x98c717ce
106
-1,      90936,      90936,     1568,     3136, 0x7ec075e3
107
-0,         59,         59,        1,   192000, 0x615b10b8
108
-1,      92504,      92504,     1564,     3128, 0xf981d51e
109
-0,         60,         60,        1,   192000, 0xd5bc0e7e
110
-1,      94068,      94068,     1564,     3128, 0xc622e8b9
111
-0,         61,         61,        1,   192000, 0xd5bc0e7e
112
-1,      95632,      95632,     1568,     3136, 0xf632e2f8
113
-0,         62,         62,        1,   192000, 0xd5bc0e7e
114
-1,      97200,      97200,     1564,     3128, 0xda561864
115
-0,         63,         63,        1,   192000, 0xd5bc0e7e
116
-1,      98764,      98764,     1568,     3136, 0x14d2e888
117
-0,         64,         64,        1,   192000, 0xd5bc0e7e
118
-1,     100332,     100332,     1564,     3128, 0x015bb869
119
-0,         65,         65,        1,   192000, 0xd5bc0e7e
120
-1,     101896,     101896,     1564,     3128, 0xedb1fb62
121
-0,         66,         66,        1,   192000, 0xd5bc0e7e
122
-1,     103460,     103460,     1568,     3136, 0xe0560c41
123
-0,         67,         67,        1,   192000, 0xd5bc0e7e
124
-1,     105028,     105028,     1564,     3128, 0x14773c9a
125
-0,         68,         68,        1,   192000, 0xd5bc0e7e
126
-1,     106592,     106592,     1568,     3136, 0x850f1c82
127
-0,         69,         69,        1,   192000, 0xd5bc0e7e
128
-1,     108160,     108160,     1564,     3128, 0xb0bd5347
129
-0,         70,         70,        1,   192000, 0xd5bc0e7e
130
-1,     109724,     109724,     1564,     3128, 0x8f82edbf
131
-0,         71,         71,        1,   192000, 0xd5bc0e7e
132
-1,     111288,     111288,     1568,     3136, 0x493abee2
133
-0,         72,         72,        1,   192000, 0xd5bc0e7e
134
-1,     112856,     112856,     1564,     3128, 0xf5daff3f
135
-0,         73,         73,        1,   192000, 0xd5bc0e7e
136
-1,     114420,     114420,     1564,     3128, 0x78ad2690
137
-0,         74,         74,        1,   192000, 0xd5bc0e7e
138
-1,     115984,     115984,     1568,     3136, 0x490ebafc
139
-0,         75,         75,        1,   192000, 0xd5bc0e7e
140
-1,     117552,     117552,     1564,     3128, 0x70333fd2
141
-0,         76,         76,        1,   192000, 0xd5bc0e7e
142
-1,     119116,     119116,     1568,     3136, 0x8cb1c350
143
-0,         77,         77,        1,   192000, 0xd5bc0e7e
144
-1,     120684,     120684,     1564,     3128, 0x8bd057cb
145
-0,         78,         78,        1,   192000, 0xd5bc0e7e
146
-1,     122248,     122248,     1564,     3128, 0x161b3dbc
147
-0,         79,         79,        1,   192000, 0xd5bc0e7e
148
-1,     123812,     123812,     1568,     3136, 0xb47fb88a
149
-0,         80,         80,        1,   192000, 0xd5bc0e7e
150
-1,     125380,     125380,     1564,     3128, 0x474b381e
151
-0,         81,         81,        1,   192000, 0xd5bc0e7e
152
-1,     126944,     126944,     1568,     3136, 0x07c519bb
153
-0,         82,         82,        1,   192000, 0xd5bc0e7e
154
-1,     128512,     128512,     1564,     3128, 0x15b916c8
155
-0,         83,         83,        1,   192000, 0xd5bc0e7e
156
-1,     130076,     130076,     1564,     3128, 0x0ed7f6fb
157
-0,         84,         84,        1,   192000, 0xd5bc0e7e
158
-1,     131640,     131640,     1568,     3136, 0x54d6397b
159
-0,         85,         85,        1,   192000, 0xd5bc0e7e
160
-1,     133208,     133208,     1564,     3128, 0x437242bb
161
-0,         86,         86,        1,   192000, 0xd5bc0e7e
162
-1,     134772,     134772,     1564,     3128, 0x38f05c4d
163
-0,         87,         87,        1,   192000, 0xd5bc0e7e
164
-1,     136336,     136336,     1568,     3136, 0x5d000e59
165
-0,         88,         88,        1,   192000, 0xd5bc0e7e
166
-1,     137904,     137904,     1564,     3128, 0xdeab2d04
167
-0,         89,         89,        1,   192000, 0xd5bc0e7e
168
-1,     139468,     139468,     1568,     3136, 0x77de6880
169
-0,         90,         90,        1,   192000, 0xd5bc0e7e
170
-1,     141036,     141036,     1564,     3128, 0xbc87ef25
171
-0,         91,         91,        1,   192000, 0xd5bc0e7e
172
-1,     142600,     142600,     1564,     3128, 0xc1638ade
173
-0,         92,         92,        1,   192000, 0xd5bc0e7e
174
-1,     144164,     144164,     1568,     3136, 0xcfb64a5f
175
-0,         93,         93,        1,   192000, 0xd5bc0e7e
176
-1,     145732,     145732,     1564,     3128, 0x90b1b826
177
-0,         94,         94,        1,   192000, 0xd5bc0e7e
178
-1,     147296,     147296,     1568,     3136, 0x00000000
179
-0,         95,         95,        1,   192000, 0xd5bc0e7e
180
-1,     148864,     148864,     1564,     3128, 0x00000000
181
-0,         96,         96,        1,   192000, 0xd5bc0e7e
182
-1,     150428,     150428,     1564,     3128, 0x00000000
183
-0,         97,         97,        1,   192000, 0xd5bc0e7e
184
-1,     151992,     151992,     1568,     3136, 0x00000000
185
-0,         98,         98,        1,   192000, 0xd5bc0e7e
186
-1,     153560,     153560,     1564,     3128, 0x00000000
187
-0,         99,         99,        1,   192000, 0xd5bc0e7e
188
-1,     155124,     155124,     1428,     2856, 0x00000000
189 1
new file mode 100644
... ...
@@ -0,0 +1,87 @@
0
+#tb 0: 1/22050
1
+0,          0,          0,    23620,    47240, 0x9974897c
2
+0,      23620,      23620,     1564,     3128, 0x7e4064b4
3
+0,      25184,      25184,     1564,     3128, 0x80883301
4
+0,      26748,      26748,     1568,     3136, 0x2ad2d341
5
+0,      28316,      28316,     1564,     3128, 0xda8468e3
6
+0,      29880,      29880,     1568,     3136, 0x9d6f6cdf
7
+0,      31448,      31448,     1564,     3128, 0x1aaa64b5
8
+0,      33012,      33012,     1564,     3128, 0x9182728b
9
+0,      34576,      34576,     1568,     3136, 0xfa8e17b3
10
+0,      36144,      36144,     1564,     3128, 0x0dc3c1cf
11
+0,      37708,      37708,     1568,     3136, 0x0109639d
12
+0,      39276,      39276,     1564,     3128, 0x6d8a12d9
13
+0,      40840,      40840,     1564,     3128, 0x4b9a9597
14
+0,      42404,      42404,     1568,     3136, 0x9112710e
15
+0,      43972,      43972,     1564,     3128, 0x8cccf522
16
+0,      45536,      45536,     1564,     3128, 0x6594bbf3
17
+0,      47100,      47100,     1568,     3136, 0xd878a7d5
18
+0,      48668,      48668,     1564,     3128, 0xaa6e3905
19
+0,      50232,      50232,     1568,     3136, 0x2a062e04
20
+0,      51800,      51800,     1564,     3128, 0x84e4006a
21
+0,      53364,      53364,     1564,     3128, 0x85183633
22
+0,      54928,      54928,     1568,     3136, 0xb62d4b02
23
+0,      56496,      56496,     1564,     3128, 0xe209462a
24
+0,      58060,      58060,     1568,     3136, 0x57c4824b
25
+0,      59628,      59628,     1564,     3128, 0x664a9163
26
+0,      61192,      61192,     1564,     3128, 0xb4287874
27
+0,      62756,      62756,     1568,     3136, 0xde626885
28
+0,      64324,      64324,     1564,     3128, 0x919763c2
29
+0,      65888,      65888,     1564,     3128, 0xa4f664e1
30
+0,      67452,      67452,     1568,     3136, 0xa0bab0d4
31
+0,      69020,      69020,     1564,     3128, 0xe938939c
32
+0,      70584,      70584,     1568,     3136, 0x3679bfc7
33
+0,      72152,      72152,     1564,     3128, 0xc96c55c3
34
+0,      73716,      73716,     1564,     3128, 0x119114d6
35
+0,      75280,      75280,     1568,     3136, 0x42f3800f
36
+0,      76848,      76848,     1564,     3128, 0x4250c4ad
37
+0,      78412,      78412,     1568,     3136, 0x5cdd4925
38
+0,      79980,      79980,     1564,     3128, 0xa4c12360
39
+0,      81544,      81544,     1564,     3128, 0x849f48de
40
+0,      83108,      83108,     1568,     3136, 0x6acd8ff9
41
+0,      84676,      84676,     1564,     3128, 0xb2758556
42
+0,      86240,      86240,     1564,     3128, 0x10f2fcb1
43
+0,      87804,      87804,     1568,     3136, 0xf0f02b23
44
+0,      89372,      89372,     1564,     3128, 0x64f759c6
45
+0,      90936,      90936,     1568,     3136, 0x7ec075e3
46
+0,      92504,      92504,     1564,     3128, 0xf981d51e
47
+0,      94068,      94068,     1564,     3128, 0xc622e8b9
48
+0,      95632,      95632,     1568,     3136, 0xf632e2f8
49
+0,      97200,      97200,     1564,     3128, 0xda561864
50
+0,      98764,      98764,     1568,     3136, 0x14d2e888
51
+0,     100332,     100332,     1564,     3128, 0x015bb869
52
+0,     101896,     101896,     1564,     3128, 0xedb1fb62
53
+0,     103460,     103460,     1568,     3136, 0xe0560c41
54
+0,     105028,     105028,     1564,     3128, 0x14773c9a
55
+0,     106592,     106592,     1568,     3136, 0x850f1c82
56
+0,     108160,     108160,     1564,     3128, 0xb0bd5347
57
+0,     109724,     109724,     1564,     3128, 0x8f82edbf
58
+0,     111288,     111288,     1568,     3136, 0x493abee2
59
+0,     112856,     112856,     1564,     3128, 0xf5daff3f
60
+0,     114420,     114420,     1564,     3128, 0x78ad2690
61
+0,     115984,     115984,     1568,     3136, 0x490ebafc
62
+0,     117552,     117552,     1564,     3128, 0x70333fd2
63
+0,     119116,     119116,     1568,     3136, 0x8cb1c350
64
+0,     120684,     120684,     1564,     3128, 0x8bd057cb
65
+0,     122248,     122248,     1564,     3128, 0x161b3dbc
66
+0,     123812,     123812,     1568,     3136, 0xb47fb88a
67
+0,     125380,     125380,     1564,     3128, 0x474b381e
68
+0,     126944,     126944,     1568,     3136, 0x07c519bb
69
+0,     128512,     128512,     1564,     3128, 0x15b916c8
70
+0,     130076,     130076,     1564,     3128, 0x0ed7f6fb
71
+0,     131640,     131640,     1568,     3136, 0x54d6397b
72
+0,     133208,     133208,     1564,     3128, 0x437242bb
73
+0,     134772,     134772,     1564,     3128, 0x38f05c4d
74
+0,     136336,     136336,     1568,     3136, 0x5d000e59
75
+0,     137904,     137904,     1564,     3128, 0xdeab2d04
76
+0,     139468,     139468,     1568,     3136, 0x77de6880
77
+0,     141036,     141036,     1564,     3128, 0xbc87ef25
78
+0,     142600,     142600,     1564,     3128, 0xc1638ade
79
+0,     144164,     144164,     1568,     3136, 0xcfb64a5f
80
+0,     145732,     145732,     1564,     3128, 0x90b1b826
81
+0,     147296,     147296,     1568,     3136, 0x00000000
82
+0,     148864,     148864,     1564,     3128, 0x00000000
83
+0,     150428,     150428,     1564,     3128, 0x00000000
84
+0,     151992,     151992,     1568,     3136, 0x00000000
85
+0,     153560,     153560,     1564,     3128, 0x00000000
86
+0,     155124,     155124,     1428,     2856, 0x00000000
0 87
new file mode 100644
... ...
@@ -0,0 +1,101 @@
0
+#tb 0: 71/1000
1
+0,          0,          0,        1,   192000, 0x8926d7fc
2
+0,          1,          1,        1,   192000, 0x2506d384
3
+0,          2,          2,        1,   192000, 0x9a8dc93a
4
+0,          3,          3,        1,   192000, 0x4badb7f2
5
+0,          4,          4,        1,   192000, 0xc1fc9631
6
+0,          5,          5,        1,   192000, 0xfc906592
7
+0,          6,          6,        1,   192000, 0xeddd28e2
8
+0,          7,          7,        1,   192000, 0xeee0dcf5
9
+0,          8,          8,        1,   192000, 0x76798c91
10
+0,          9,          9,        1,   192000, 0x8a034c1b
11
+0,         10,         10,        1,   192000, 0x4df3127c
12
+0,         11,         11,        1,   192000, 0x2eefd36f
13
+0,         12,         12,        1,   192000, 0x58a2a1d6
14
+0,         13,         13,        1,   192000, 0x1a3d7971
15
+0,         14,         14,        1,   192000, 0xa1a65bd5
16
+0,         15,         15,        1,   192000, 0x344957b9
17
+0,         16,         16,        1,   192000, 0xe23b5f4e
18
+0,         17,         17,        1,   192000, 0xb5c2710b
19
+0,         18,         18,        1,   192000, 0x7a25938f
20
+0,         19,         19,        1,   192000, 0x0a84e4c9
21
+0,         20,         20,        1,   192000, 0x94209b0d
22
+0,         21,         21,        1,   192000, 0xf940e51f
23
+0,         22,         22,        1,   192000, 0xb9fdec42
24
+0,         23,         23,        1,   192000, 0x7b04a376
25
+0,         24,         24,        1,   192000, 0x5fe0026b
26
+0,         25,         25,        1,   192000, 0x775aca39
27
+0,         26,         26,        1,   192000, 0xae14fb32
28
+0,         27,         27,        1,   192000, 0x661106e5
29
+0,         28,         28,        1,   192000, 0xe8658dbf
30
+0,         29,         29,        1,   192000, 0x5359f0f9
31
+0,         30,         30,        1,   192000, 0xc1ec80f4
32
+0,         31,         31,        1,   192000, 0xca53806b
33
+0,         32,         32,        1,   192000, 0xf0766b2e
34
+0,         33,         33,        1,   192000, 0x39962da8
35
+0,         34,         34,        1,   192000, 0x4171c37f
36
+0,         35,         35,        1,   192000, 0x3abf3b46
37
+0,         36,         36,        1,   192000, 0xecc68313
38
+0,         37,         37,        1,   192000, 0xea339baf
39
+0,         38,         38,        1,   192000, 0x616b8f16
40
+0,         39,         39,        1,   192000, 0xf77a8581
41
+0,         40,         40,        1,   192000, 0xb315678b
42
+0,         41,         41,        1,   192000, 0x0a4a5218
43
+0,         42,         42,        1,   192000, 0x98802be4
44
+0,         43,         43,        1,   192000, 0xa2f0fd94
45
+0,         44,         44,        1,   192000, 0x6671c84f
46
+0,         45,         45,        1,   192000, 0x38327e31
47
+0,         46,         46,        1,   192000, 0xb85d3e08
48
+0,         47,         47,        1,   192000, 0xdc69eba9
49
+0,         48,         48,        1,   192000, 0x8955a0b3
50
+0,         49,         49,        1,   192000, 0x714a548b
51
+0,         50,         50,        1,   192000, 0xc0471de9
52
+0,         51,         51,        1,   192000, 0x2e16e039
53
+0,         52,         52,        1,   192000, 0x9fa4b033
54
+0,         53,         53,        1,   192000, 0x4a0f9402
55
+0,         54,         54,        1,   192000, 0x1f3e6843
56
+0,         55,         55,        1,   192000, 0x31774850
57
+0,         56,         56,        1,   192000, 0x9d5336a2
58
+0,         57,         57,        1,   192000, 0xf7de27a2
59
+0,         58,         58,        1,   192000, 0x98c717ce
60
+0,         59,         59,        1,   192000, 0x615b10b8
61
+0,         60,         60,        1,   192000, 0xd5bc0e7e
62
+0,         61,         61,        1,   192000, 0xd5bc0e7e
63
+0,         62,         62,        1,   192000, 0xd5bc0e7e
64
+0,         63,         63,        1,   192000, 0xd5bc0e7e
65
+0,         64,         64,        1,   192000, 0xd5bc0e7e
66
+0,         65,         65,        1,   192000, 0xd5bc0e7e
67
+0,         66,         66,        1,   192000, 0xd5bc0e7e
68
+0,         67,         67,        1,   192000, 0xd5bc0e7e
69
+0,         68,         68,        1,   192000, 0xd5bc0e7e
70
+0,         69,         69,        1,   192000, 0xd5bc0e7e
71
+0,         70,         70,        1,   192000, 0xd5bc0e7e
72
+0,         71,         71,        1,   192000, 0xd5bc0e7e
73
+0,         72,         72,        1,   192000, 0xd5bc0e7e
74
+0,         73,         73,        1,   192000, 0xd5bc0e7e
75
+0,         74,         74,        1,   192000, 0xd5bc0e7e
76
+0,         75,         75,        1,   192000, 0xd5bc0e7e
77
+0,         76,         76,        1,   192000, 0xd5bc0e7e
78
+0,         77,         77,        1,   192000, 0xd5bc0e7e
79
+0,         78,         78,        1,   192000, 0xd5bc0e7e
80
+0,         79,         79,        1,   192000, 0xd5bc0e7e
81
+0,         80,         80,        1,   192000, 0xd5bc0e7e
82
+0,         81,         81,        1,   192000, 0xd5bc0e7e
83
+0,         82,         82,        1,   192000, 0xd5bc0e7e
84
+0,         83,         83,        1,   192000, 0xd5bc0e7e
85
+0,         84,         84,        1,   192000, 0xd5bc0e7e
86
+0,         85,         85,        1,   192000, 0xd5bc0e7e
87
+0,         86,         86,        1,   192000, 0xd5bc0e7e
88
+0,         87,         87,        1,   192000, 0xd5bc0e7e
89
+0,         88,         88,        1,   192000, 0xd5bc0e7e
90
+0,         89,         89,        1,   192000, 0xd5bc0e7e
91
+0,         90,         90,        1,   192000, 0xd5bc0e7e
92
+0,         91,         91,        1,   192000, 0xd5bc0e7e
93
+0,         92,         92,        1,   192000, 0xd5bc0e7e
94
+0,         93,         93,        1,   192000, 0xd5bc0e7e
95
+0,         94,         94,        1,   192000, 0xd5bc0e7e
96
+0,         95,         95,        1,   192000, 0xd5bc0e7e
97
+0,         96,         96,        1,   192000, 0xd5bc0e7e
98
+0,         97,         97,        1,   192000, 0xd5bc0e7e
99
+0,         98,         98,        1,   192000, 0xd5bc0e7e
100
+0,         99,         99,        1,   192000, 0xd5bc0e7e
0 101
deleted file mode 100644
... ...
@@ -1,425 +0,0 @@
1
-#tb 0: 1/1000
2
-#tb 1: 1/22050
3
-0,          0,          0,        0,      734, 0x5a042c2c
4
-1,          0,          0,      512,     1024, 0x00000000
5
-1,        507,        507,      512,     1024, 0x00000000
6
-1,       1014,       1014,      512,     1024, 0xd89a448e
7
-1,       1521,       1521,      512,     1024, 0x695b369c
8
-1,       2029,       2029,      512,     1024, 0xc8ba5707
9
-0,        111,        111,        0,      763, 0xb5893f2f
10
-1,       2558,       2558,      512,     1024, 0xdf241fc6
11
-1,       3065,       3065,      512,     1024, 0x61cf4166
12
-1,       3572,       3572,      512,     1024, 0x97cbc386
13
-1,       4079,       4079,      512,     1024, 0x44899d04
14
-1,       4586,       4586,      512,     1024, 0xa7cbaa62
15
-0,        222,        222,        0,     3023, 0x0f3907d3
16
-1,       5116,       5116,      512,     1024, 0xa7aea60c
17
-1,       5623,       5623,      512,     1024, 0xd7b18a89
18
-1,       6130,       6130,      512,     1024, 0x268e81f6
19
-1,       6637,       6637,      512,     1024, 0x9cf83a2f
20
-1,       7166,       7166,      512,     1024, 0x5559b508
21
-0,        333,        333,        0,     4800, 0x22e6e18a
22
-1,       7673,       7673,      512,     1024, 0xe1b9e71c
23
-1,       8181,       8181,      512,     1024, 0xdcee733e
24
-1,       8688,       8688,      512,     1024, 0xe5918f60
25
-1,       9195,       9195,      512,     1024, 0x29dbd209
26
-1,       9724,       9724,      512,     1024, 0x9bcbcf16
27
-0,        444,        444,        0,     6417, 0x427adde5
28
-1,      10231,      10231,      512,     1024, 0x86f5f458
29
-1,      10738,      10738,      512,     1024, 0xabcbda86
30
-1,      11246,      11246,      512,     1024, 0xc51f77b9
31
-1,      11775,      11775,      512,     1024, 0xf6b3a504
32
-0,        555,        555,        0,     6776, 0x7a74c6ad
33
-1,      12282,      12282,      512,     1024, 0x1af3e40e
34
-1,      12789,      12789,      512,     1024, 0x3866b03b
35
-1,      13296,      13296,      512,     1024, 0xbc005403
36
-1,      13803,      13803,      512,     1024, 0xe9dfcc51
37
-1,      14332,      14332,      512,     1024, 0x83c837cb
38
-0,        666,        666,        0,     6808, 0x1f6eb7c3
39
-1,      14840,      14840,      512,     1024, 0xfa649580
40
-1,      15347,      15347,      512,     1024, 0x519452ea
41
-1,      15854,      15854,      512,     1024, 0xd4978774
42
-1,      16383,      16383,      512,     1024, 0xe2a3b1cd
43
-1,      16890,      16890,      512,     1024, 0x9a9472ad
44
-0,        777,        777,        0,     6726, 0x452087e6
45
-1,      17397,      17397,      512,     1024, 0xa12d4060
46
-1,      17905,      17905,      512,     1024, 0x31fb0646
47
-1,      18412,      18412,      512,     1024, 0xfc44343f
48
-1,      18941,      18941,      512,     1024, 0x0847751a
49
-1,      19448,      19448,      512,     1024, 0x227968a2
50
-0,        888,        888,        0,     6829, 0xee82b109
51
-1,      19955,      19955,      512,     1024, 0x7cce9f1c
52
-1,      20462,      20462,      512,     1024, 0xb8356713
53
-1,      20992,      20992,      512,     1024, 0xb29f6e6f
54
-1,      21499,      21499,      512,     1024, 0x9e1430ab
55
-1,      22006,      22006,      512,     1024, 0x26d85423
56
-0,        999,        999,        0,     7055, 0xf41f1108
57
-1,      22513,      22513,      512,     1024, 0x6496547d
58
-1,      23020,      23020,      512,     1024, 0x316b1a86
59
-1,      23549,      23549,      512,     1024, 0x3cd83afc
60
-1,      24057,      24057,      512,     1024, 0x993ff633
61
-0,       1111,       1111,        0,     6977, 0xf8fe1ede
62
-1,      24564,      24564,      512,     1024, 0x0708d1a2
63
-1,      25071,      25071,      512,     1024, 0xd7230db9
64
-1,      25578,      25578,      512,     1024, 0xbb0779ca
65
-1,      26107,      26107,      512,     1024, 0xc6094e1b
66
-1,      26614,      26614,      512,     1024, 0x15a8b039
67
-0,       1222,       1222,        0,     6942, 0x9ad105c6
68
-1,      27122,      27122,      512,     1024, 0xd6dbe88c
69
-1,      27629,      27629,      512,     1024, 0x7e8d1140
70
-1,      28158,      28158,      512,     1024, 0xef88e525
71
-1,      28665,      28665,      512,     1024, 0x44e21149
72
-1,      29172,      29172,      512,     1024, 0x65b0f5f4
73
-0,       1333,       1333,        0,     6926, 0xe239dad6
74
-1,      29679,      29679,      512,     1024, 0xb955f687
75
-1,      30186,      30186,      512,     1024, 0xc85fba9c
76
-1,      30716,      30716,      512,     1024, 0xf59655ad
77
-1,      31223,      31223,      512,     1024, 0x6de80bf1
78
-1,      31730,      31730,      512,     1024, 0x2dcf6e41
79
-0,       1444,       1444,        0,     6966, 0x81dcfab1
80
-1,      32237,      32237,      512,     1024, 0xd0ddcf8a
81
-1,      32766,      32766,      512,     1024, 0x00135c2d
82
-1,      33273,      33273,      512,     1024, 0x697f8efd
83
-1,      33781,      33781,      512,     1024, 0x7a9bada5
84
-0,       1555,       1555,        0,     6896, 0x31e6cc02
85
-1,      34288,      34288,      512,     1024, 0x0d22783c
86
-1,      34795,      34795,      512,     1024, 0x7726d07d
87
-1,      35324,      35324,      512,     1024, 0xa2f14f67
88
-1,      35831,      35831,      512,     1024, 0x7f51060d
89
-1,      36338,      36338,      512,     1024, 0xc4ec6aea
90
-0,       1666,       1666,        0,     6889, 0x1cc1006e
91
-1,      36846,      36846,      512,     1024, 0x9bb37ca4
92
-1,      37375,      37375,      512,     1024, 0x9b085577
93
-1,      37882,      37882,      512,     1024, 0x8812f8af
94
-1,      38389,      38389,      512,     1024, 0x788f5221
95
-1,      38896,      38896,      512,     1024, 0x3a2ce642
96
-0,       1777,       1777,        0,     6933, 0xc303f87f
97
-1,      39403,      39403,      512,     1024, 0x72415692
98
-1,      39933,      39933,      512,     1024, 0xe3dcc105
99
-1,      40440,      40440,      512,     1024, 0xb26c0599
100
-1,      40947,      40947,      512,     1024, 0x5c9e55eb
101
-1,      41454,      41454,      512,     1024, 0x8fe88707
102
-0,       1888,       1888,        0,     7034, 0xb4970a20
103
-1,      41983,      41983,      512,     1024, 0xc5d7beb6
104
-1,      42490,      42490,      512,     1024, 0xe1d3a3b4
105
-1,      42998,      42998,      512,     1024, 0x012da0c6
106
-1,      43505,      43505,      512,     1024, 0x8d010922
107
-1,      44012,      44012,      512,     1024, 0x3366eb0d
108
-0,       1999,       1999,        0,     6961, 0xf064095d
109
-1,      44541,      44541,      512,     1024, 0xc9381a27
110
-1,      45048,      45048,      512,     1024, 0x0774f685
111
-1,      45555,      45555,      512,     1024, 0xc5cae0a5
112
-1,      46062,      46062,      512,     1024, 0xa6f4737c
113
-0,       2111,       2111,        0,     7089, 0x5ba350f9
114
-1,      46592,      46592,      512,     1024, 0x8fb6d0d1
115
-1,      47099,      47099,      512,     1024, 0x05f579c2
116
-1,      47606,      47606,      512,     1024, 0x56905d99
117
-1,      48113,      48113,      512,     1024, 0x002ee18d
118
-1,      48620,      48620,      512,     1024, 0xeb37ef51
119
-0,       2222,       2222,        0,     7078, 0xa83f3e88
120
-1,      49149,      49149,      512,     1024, 0x38025635
121
-1,      49657,      49657,      512,     1024, 0x4fe643c8
122
-1,      50164,      50164,      512,     1024, 0x11d66ab1
123
-1,      50671,      50671,      512,     1024, 0xcc3051e9
124
-1,      51178,      51178,      512,     1024, 0xcd93e854
125
-0,       2333,       2333,        0,     7147, 0xcda66cfc
126
-1,      51707,      51707,      512,     1024, 0x38f1196d
127
-1,      52214,      52214,      512,     1024, 0x657a15fc
128
-1,      52722,      52722,      512,     1024, 0x669ce2a9
129
-1,      53229,      53229,      512,     1024, 0x95862dda
130
-1,      53758,      53758,      512,     1024, 0x1726a7b2
131
-0,       2444,       2444,        0,     7173, 0xb7455859
132
-1,      54265,      54265,      512,     1024, 0xd6ece2a1
133
-1,      54772,      54772,      512,     1024, 0x33ab9553
134
-1,      55279,      55279,      512,     1024, 0xd50c73a6
135
-1,      55786,      55786,      512,     1024, 0xfe25b63a
136
-1,      56316,      56316,      512,     1024, 0x7e2959e3
137
-0,       2555,       2555,        0,     7213, 0x97b89994
138
-1,      56823,      56823,      512,     1024, 0xa4c07b34
139
-1,      57330,      57330,      512,     1024, 0xd6d8f15c
140
-1,      57837,      57837,      512,     1024, 0x1eccddd7
141
-1,      58366,      58366,      512,     1024, 0x2b69f9cb
142
-0,       2666,       2666,        0,     7170, 0xca8b2948
143
-1,      58874,      58874,      512,     1024, 0x667b775f
144
-1,      59381,      59381,      512,     1024, 0xad3b84e9
145
-1,      59888,      59888,      512,     1024, 0x4f29fc67
146
-1,      60395,      60395,      512,     1024, 0x8d611ab7
147
-1,      60924,      60924,      512,     1024, 0x278966ea
148
-0,       2777,       2777,        0,     7174, 0xc7cc6bbb
149
-1,      61431,      61431,      512,     1024, 0xaf33812b
150
-1,      61938,      61938,      512,     1024, 0xa55f4265
151
-1,      62446,      62446,      512,     1024, 0x023cb51c
152
-1,      62975,      62975,      512,     1024, 0x1d1f1005
153
-1,      63482,      63482,      512,     1024, 0x874cccf7
154
-0,       2888,       2888,        0,     7235, 0xc2e68d2b
155
-1,      63989,      63989,      512,     1024, 0xda705428
156
-1,      64496,      64496,      512,     1024, 0x48d9b440
157
-1,      65003,      65003,      512,     1024, 0xa14e0712
158
-1,      65533,      65533,      512,     1024, 0x7efbad1f
159
-1,      66040,      66040,      512,     1024, 0xdb82c17f
160
-0,       3000,       3000,        0,     7261, 0x8204a423
161
-1,      66547,      66547,      512,     1024, 0xcbe87613
162
-1,      67054,      67054,      512,     1024, 0x3a63df1d
163
-1,      67583,      67583,      512,     1024, 0xd5636bba
164
-1,      68090,      68090,      512,     1024, 0x9397af23
165
-0,       3111,       3111,        0,     7353, 0xacc7e7c0
166
-1,      68598,      68598,      512,     1024, 0x32a07c98
167
-1,      69105,      69105,      512,     1024, 0x202ca667
168
-1,      69612,      69612,      512,     1024, 0xdf969011
169
-1,      70141,      70141,      512,     1024, 0xc434d238
170
-1,      70648,      70648,      512,     1024, 0xe9ad7562
171
-0,       3222,       3222,        0,     7065, 0x45035c5c
172
-1,      71155,      71155,      512,     1024, 0xb51b6b50
173
-1,      71662,      71662,      512,     1024, 0xe70aecd3
174
-1,      72192,      72192,      512,     1024, 0x03c816b2
175
-1,      72699,      72699,      512,     1024, 0x869fdf25
176
-1,      73206,      73206,      512,     1024, 0xd40a0a62
177
-0,       3333,       3333,        0,     7269, 0x72edbb76
178
-1,      73713,      73713,      512,     1024, 0x5af7dd35
179
-1,      74220,      74220,      512,     1024, 0x891ffc72
180
-1,      74750,      74750,      512,     1024, 0x1ff68a08
181
-1,      75257,      75257,      512,     1024, 0x5a7517a9
182
-1,      75764,      75764,      512,     1024, 0x0f959f74
183
-0,       3444,       3444,        0,     7220, 0xb926772f
184
-1,      76271,      76271,      512,     1024, 0xe92a12a2
185
-1,      76778,      76778,      512,     1024, 0x38000e55
186
-1,      77307,      77307,      512,     1024, 0x39fbdd70
187
-1,      77814,      77814,      512,     1024, 0xca3d9184
188
-1,      78322,      78322,      512,     1024, 0x66c8995b
189
-0,       3555,       3555,        0,     7326, 0x0a66c632
190
-1,      78829,      78829,      512,     1024, 0xac25acea
191
-1,      79358,      79358,      512,     1024, 0x3cd1046c
192
-1,      79865,      79865,      512,     1024, 0x6a1df31c
193
-1,      80372,      80372,      512,     1024, 0x21ca10a1
194
-0,       3666,       3666,        0,     7225, 0xe39076ab
195
-1,      80879,      80879,      512,     1024, 0x1aeccedc
196
-1,      81387,      81387,      512,     1024, 0xddea1335
197
-1,      81916,      81916,      512,     1024, 0x19f5ca9f
198
-1,      82423,      82423,      512,     1024, 0x88e95e43
199
-1,      82930,      82930,      512,     1024, 0x726284fe
200
-0,       3777,       3777,        0,     7265, 0xe0209036
201
-1,      83437,      83437,      512,     1024, 0x6b85b40e
202
-1,      83966,      83966,      512,     1024, 0x111fee2a
203
-1,      84474,      84474,      512,     1024, 0x3656b588
204
-1,      84981,      84981,      512,     1024, 0xa5a2b552
205
-1,      85488,      85488,      512,     1024, 0x38fb2467
206
-0,       3888,       3888,        0,     7337, 0x7a5dc093
207
-1,      85995,      85995,      512,     1024, 0xaa919ccc
208
-1,      86524,      86524,      512,     1024, 0x15993dbc
209
-1,      87031,      87031,      512,     1024, 0xbe01a7b9
210
-1,      87538,      87538,      512,     1024, 0xefe93c09
211
-1,      88046,      88046,      512,     1024, 0x1bb566e5
212
-0,       4000,       4000,        0,     7246, 0x519a7a3c
213
-1,      88575,      88575,      512,     1024, 0x15ce6237
214
-1,      89082,      89082,      512,     1024, 0xa8552e66
215
-1,      89589,      89589,      512,     1024, 0x9d80187e
216
-1,      90096,      90096,      512,     1024, 0x5df3fc30
217
-1,      90603,      90603,      512,     1024, 0x1a312aa5
218
-0,       4111,       4111,        0,     7266, 0x352c8078
219
-1,      91133,      91133,      512,     1024, 0x6bb8e302
220
-1,      91640,      91640,      512,     1024, 0xbd9684bb
221
-1,      92147,      92147,      512,     1024, 0x78b0b166
222
-1,      92654,      92654,      512,     1024, 0xd9af5eae
223
-0,       4222,       4222,        0,     7323, 0xcaf69d7c
224
-1,      93183,      93183,      512,     1024, 0xdb90fe82
225
-1,      93690,      93690,      512,     1024, 0x327614e9
226
-1,      94198,      94198,      512,     1024, 0x1f19b7fe
227
-1,      94705,      94705,      512,     1024, 0x46c53f96
228
-1,      95212,      95212,      512,     1024, 0x921b2189
229
-0,       4333,       4333,        0,     7309, 0x98c1e6f7
230
-1,      95741,      95741,      512,     1024, 0xa8fbc85a
231
-1,      96248,      96248,      512,     1024, 0xabfdaaae
232
-1,      96755,      96755,      512,     1024, 0x6acc7387
233
-1,      97263,      97263,      512,     1024, 0x0d9c27b5
234
-1,      97792,      97792,      512,     1024, 0xba4dd809
235
-0,       4444,       4444,        0,     7121, 0x913d5bd6
236
-1,      98299,      98299,      512,     1024, 0x2a2ad521
237
-1,      98806,      98806,      512,     1024, 0x892de38a
238
-1,      99313,      99313,      512,     1024, 0xdc97a2eb
239
-1,      99820,      99820,      512,     1024, 0x4f614ca4
240
-1,     100350,     100350,      512,     1024, 0x9c8a77ea
241
-0,       4555,       4555,      111,     7088, 0x56302362
242
-1,     100857,     100857,      512,     1024, 0x2d30e646
243
-1,     101364,     101364,      512,     1024, 0x74e800a7
244
-1,     101871,     101871,      512,     1024, 0x1e01fb02
245
-1,     102378,     102378,      512,     1024, 0x4ed2c1d8
246
-0,       4666,       4666,      111,     7104, 0xc0d14f78
247
-1,     102907,     102907,      512,     1024, 0xf2fdbe63
248
-1,     103414,     103414,      512,     1024, 0x8d6f63a1
249
-1,     103922,     103922,      512,     1024, 0xded468d9
250
-1,     104429,     104429,      512,     1024, 0xccad839e
251
-1,     104958,     104958,      512,     1024, 0xdde7c082
252
-0,       4777,       4777,      111,     7169, 0xd03c825b
253
-1,     105465,     105465,      512,     1024, 0x548613c5
254
-1,     105972,     105972,      512,     1024, 0x383909bd
255
-1,     106479,     106479,      512,     1024, 0xfd37627b
256
-1,     106987,     106987,      512,     1024, 0x6d95a481
257
-1,     107516,     107516,      512,     1024, 0x56aa87fa
258
-0,       4888,       4888,      111,     7038, 0x1ecc201d
259
-1,     108023,     108023,      512,     1024, 0x7b67258c
260
-1,     108530,     108530,      512,     1024, 0x7dd99a92
261
-1,     109037,     109037,      512,     1024, 0x4a66d102
262
-1,     109566,     109566,      512,     1024, 0x7b3fce51
263
-1,     110074,     110074,      512,     1024, 0xbbd968aa
264
-0,       5000,       5000,      111,     7015, 0x83c94454
265
-1,     110581,     110581,      512,     1024, 0x8283ec36
266
-1,     111088,     111088,      512,     1024, 0x3c96493d
267
-1,     111595,     111595,      512,     1024, 0xfa4f8cf8
268
-1,     112124,     112124,      512,     1024, 0xe2cf872d
269
-1,     112631,     112631,      512,     1024, 0x0a9e7aa6
270
-0,       5111,       5111,      111,     6983, 0x9e51f54d
271
-1,     113139,     113139,      512,     1024, 0x6e7a0550
272
-1,     113646,     113646,      512,     1024, 0x3acfea2f
273
-1,     114175,     114175,      512,     1024, 0x7111d0fa
274
-1,     114682,     114682,      512,     1024, 0xe9a1eca9
275
-0,       5222,       5222,      111,     7088, 0x70d33de1
276
-1,     115189,     115189,      512,     1024, 0x24da6c46
277
-1,     115696,     115696,      512,     1024, 0x117cff37
278
-1,     116204,     116204,      512,     1024, 0x0f27cab6
279
-1,     116733,     116733,      512,     1024, 0x69b6b4e6
280
-1,     117240,     117240,      512,     1024, 0x1e6cc841
281
-0,       5333,       5333,      111,     7096, 0x4d0f81b5
282
-1,     117747,     117747,      512,     1024, 0xb01e2365
283
-1,     118254,     118254,      512,     1024, 0x14e200d3
284
-1,     118783,     118783,      512,     1024, 0xd1184c98
285
-1,     119290,     119290,      512,     1024, 0xef9140e9
286
-1,     119798,     119798,      512,     1024, 0x4cbb645e
287
-0,       5444,       5444,      111,     7106, 0xd1a83ddc
288
-1,     120305,     120305,      512,     1024, 0xe7fe2f06
289
-1,     120812,     120812,      512,     1024, 0xf8c45028
290
-1,     121341,     121341,      512,     1024, 0x561358f4
291
-1,     121848,     121848,      512,     1024, 0xd0129b77
292
-1,     122355,     122355,      512,     1024, 0xcc636e88
293
-0,       5555,       5555,      111,     7219, 0x20f47fe4
294
-1,     122863,     122863,      512,     1024, 0xe9406321
295
-1,     123392,     123392,      512,     1024, 0x9f16a041
296
-1,     123899,     123899,      512,     1024, 0x468bf409
297
-1,     124406,     124406,      512,     1024, 0x3df70f7b
298
-1,     124913,     124913,      512,     1024, 0xa880b11b
299
-0,       5666,       5666,      111,     7184, 0x45dc6a0e
300
-1,     125420,     125420,      512,     1024, 0x3286c489
301
-1,     125950,     125950,      512,     1024, 0x39fe9ebc
302
-1,     126457,     126457,      512,     1024, 0xc533d83b
303
-1,     126964,     126964,      512,     1024, 0x153b195d
304
-0,       5777,       5777,      111,     7222, 0x488c6499
305
-1,     127471,     127471,      512,     1024, 0xd84786a1
306
-1,     127978,     127978,      512,     1024, 0xdc295aaa
307
-1,     128507,     128507,      512,     1024, 0xfb764d8c
308
-1,     129015,     129015,      512,     1024, 0xeebc9db9
309
-1,     129522,     129522,      512,     1024, 0x7ba9403e
310
-0,       5888,       5888,      111,     7254, 0xbd097ba7
311
-1,     130029,     130029,      512,     1024, 0x4e5571ec
312
-1,     130558,     130558,      512,     1024, 0xd965fad4
313
-1,     131065,     131065,      512,     1024, 0x87e259f2
314
-1,     131572,     131572,      512,     1024, 0xae7e533b
315
-1,     132080,     132080,      512,     1024, 0x313cf4d6
316
-0,       6000,       6000,      111,     7189, 0x46e06d43
317
-1,     132587,     132587,      512,     1024, 0xe1844c90
318
-1,     133116,     133116,      512,     1024, 0xbb057b44
319
-1,     133623,     133623,      512,     1024, 0xa5099687
320
-1,     134130,     134130,      512,     1024, 0xbff10707
321
-1,     134637,     134637,      512,     1024, 0x37c4ffc0
322
-0,       6111,       6111,      111,     7283, 0x19dd7319
323
-1,     135166,     135166,      512,     1024, 0xf9fb6caa
324
-1,     135674,     135674,      512,     1024, 0x3b6a3a1f
325
-1,     136181,     136181,      512,     1024, 0x83431edb
326
-1,     136688,     136688,      512,     1024, 0x1eb713cf
327
-1,     137195,     137195,      512,     1024, 0xd7b07a6d
328
-0,       6222,       6222,      111,     7161, 0x23171d02
329
-1,     137724,     137724,      512,     1024, 0x81ae3391
330
-1,     138231,     138231,      512,     1024, 0xf150130a
331
-1,     138739,     138739,      512,     1024, 0x09678eaa
332
-1,     139246,     139246,      512,     1024, 0xb94e06f1
333
-0,       6333,       6333,      111,     6976, 0xcc610c26
334
-1,     139775,     139775,      512,     1024, 0x67b1dbc9
335
-1,     140282,     140282,      512,     1024, 0xd6edc235
336
-1,     140789,     140789,      512,     1024, 0x34e4c499
337
-1,     141296,     141296,      512,     1024, 0xeefd89c0
338
-1,     141804,     141804,      512,     1024, 0x38afdaf1
339
-0,       6444,       6444,      111,     7056, 0x6cd917b0
340
-1,     142333,     142333,      512,     1024, 0x29a60d76
341
-1,     142840,     142840,      512,     1024, 0xe28a4372
342
-1,     143347,     143347,      512,     1024, 0x7089454d
343
-1,     143854,     143854,      512,     1024, 0x0c01bb7b
344
-1,     144383,     144383,      512,     1024, 0xbd776a72
345
-0,       6555,       6555,      111,     6736, 0x02b78951
346
-1,     144891,     144891,      512,     1024, 0x86776fd0
347
-1,     145398,     145398,      512,     1024, 0xb37c88f7
348
-1,     145905,     145905,      512,     1024, 0x5f90aaf8
349
-1,     146412,     146412,      512,     1024, 0x203d4222
350
-1,     146941,     146941,      512,     1024, 0x382692a6
351
-0,       6666,       6666,      111,     6540, 0x767e0854
352
-1,     147448,     147448,      512,     1024, 0xf37c95fd
353
-1,     147956,     147956,      512,     1024, 0x6c0b8877
354
-1,     148463,     148463,      512,     1024, 0x2e54a8b6
355
-1,     148992,     148992,      512,     1024, 0x7f266488
356
-0,       6777,       6777,      111,     6170, 0xc84962fb
357
-1,     149499,     149499,      512,     1024, 0xfbf20f9a
358
-1,     150006,     150006,      512,     1024, 0xf2985cc0
359
-1,     150513,     150513,      512,     1024, 0xc7075340
360
-1,     151020,     151020,      512,     1024, 0xe4585695
361
-1,     151550,     151550,      512,     1024, 0xbdffa380
362
-0,       6888,       6888,      111,     6169, 0x27e06c03
363
-1,     152057,     152057,      512,     1024, 0x2422a8a9
364
-1,     152564,     152564,      512,     1024, 0x59cbd75f
365
-1,     153071,     153071,      512,     1024, 0x04ad1a8c
366
-1,     153578,     153578,      512,     1024, 0x33c09191
367
-1,     154107,     154107,      512,     1024, 0x55efa6fd
368
-0,       7000,       7000,      111,     5864, 0xd14db83f
369
-1,     154615,     154615,      512,     1024, 0xf73d0e5d
370
-1,     155122,     155122,      512,     1024, 0x6141ebae
371
-1,     155629,     155629,      512,     1024, 0x7db17a68
372
-1,     156158,     156158,      512,     1024, 0xa6c690b6
373
-1,     156665,     156665,      512,     1024, 0xa6fd6725
374
-0,       7111,       7111,      111,     5375, 0x4a21055d
375
-1,     157172,     157172,      512,     1024, 0x50a90b9b
376
-1,     157680,     157680,      512,     1024, 0xef990dc8
377
-1,     158187,     158187,      512,     1024, 0x75adf6b5
378
-1,     158716,     158716,      512,     1024, 0x61eac43e
379
-1,     159223,     159223,      512,     1024, 0x67797a19
380
-0,       7222,       7222,      111,     5206, 0x95ead3cb
381
-1,     159730,     159730,      512,     1024, 0xf325277a
382
-1,     160237,     160237,      512,     1024, 0x18bf254a
383
-1,     160767,     160767,      512,     1024, 0x2ce6bee3
384
-1,     161274,     161274,      512,     1024, 0x8d320860
385
-0,       7333,       7333,      111,     5220, 0xcfdcc37e
386
-1,     161781,     161781,      512,     1024, 0xc979b6e8
387
-1,     162288,     162288,      512,     1024, 0xdb644b41
388
-1,     162795,     162795,      512,     1024, 0xe1b368ba
389
-1,     163324,     163324,      512,     1024, 0xacc53d15
390
-1,     163832,     163832,      512,     1024, 0x42ea8c18
391
-0,       7444,       7444,      111,     4946, 0x2d864a77
392
-1,     164339,     164339,      512,     1024, 0xe52c99a4
393
-1,     164846,     164846,      512,     1024, 0xd7db54a6
394
-1,     165375,     165375,      512,     1024, 0x7f27a7e3
395
-1,     165882,     165882,      512,     1024, 0xf7ffeaa9
396
-1,     166389,     166389,      512,     1024, 0x792b6088
397
-0,       7555,       7555,      111,     4390, 0x2ab9f462
398
-1,     166896,     166896,      512,     1024, 0x61d99724
399
-1,     167404,     167404,      512,     1024, 0x5213720e
400
-1,     167933,     167933,      512,     1024, 0xac09dd30
401
-1,     168440,     168440,      512,     1024, 0x960bf6bb
402
-1,     168947,     168947,      512,     1024, 0xc90168e1
403
-0,       7666,       7666,      111,     4051, 0x1d09592e
404
-1,     169454,     169454,      512,     1024, 0x43b45768
405
-1,     169983,     169983,      512,     1024, 0x935d60a1
406
-1,     170491,     170491,      512,     1024, 0x9a342ef2
407
-1,     170998,     170998,      512,     1024, 0xc894709f
408
-0,       7777,       7777,      111,     3680, 0x39bd6a12
409
-1,     171505,     171505,      512,     1024, 0x59b43b07
410
-1,     172012,     172012,      512,     1024, 0x36a1a98d
411
-1,     172541,     172541,      512,     1024, 0x9e1a121c
412
-1,     173048,     173048,      512,     1024, 0x02208b78
413
-1,     173556,     173556,      512,     1024, 0xd1d7b274
414
-0,       7888,       7888,      111,     2910, 0x6337ece9
415
-1,     174063,     174063,      512,     1024, 0xdacd5096
416
-1,     174592,     174592,      512,     1024, 0x51b71ead
417
-1,     175099,     175099,      512,     1024, 0xd009a7ca
418
-1,     175606,     175606,      512,     1024, 0xb6d5a938
419
-1,     176113,     176113,      512,     1024, 0xf3d45e47
420
-0,       8000,       8000,      111,     2153, 0xf4e3bc17
421
-1,     176620,     176620,      512,     1024, 0xea8e04fc
422
-1,     177150,     177150,      512,     1024, 0x0b928bd8
423
-1,     177657,     177657,      512,     1024, 0x0f02caec
424
-1,     178164,     178164,      512,     1024, 0xe2b137a8
425
-1,     178671,     178671,      512,     1024, 0xd5f94892
426 1
new file mode 100644
... ...
@@ -0,0 +1,425 @@
0
+#tb 0: 1/1000
1
+#tb 1: 1/1000
2
+0,          0,          0,        0,      734, 0x5a042c2c
3
+1,          0,          0,       23,      260, 0x00000000
4
+1,         23,         23,       23,      260, 0x00000000
5
+1,         46,         46,       23,      260, 0xac9e0a9b
6
+1,         69,         69,       23,      260, 0x89256f5b
7
+1,         92,         92,       23,      260, 0x8e646e36
8
+0,        111,        111,        0,      763, 0xb5893f2f
9
+1,        116,        116,       23,      260, 0x3ab972fc
10
+1,        139,        139,       23,      260, 0xaea86bb2
11
+1,        162,        162,       23,      260, 0x2366447a
12
+1,        185,        185,       23,      260, 0x82c14f9c
13
+1,        208,        208,       23,      260, 0xcdcf6fa8
14
+0,        222,        222,        0,     3023, 0x0f3907d3
15
+1,        232,        232,       23,      260, 0xb3ed64bd
16
+1,        255,        255,       23,      260, 0xac304b92
17
+1,        278,        278,       23,      260, 0xc8bc553b
18
+1,        301,        301,       23,      260, 0xd35572b4
19
+1,        325,        325,       23,      260, 0x182f6190
20
+0,        333,        333,        0,     4800, 0x22e6e18a
21
+1,        348,        348,       23,      260, 0xbf9145c0
22
+1,        371,        371,       23,      260, 0x0ec85a7e
23
+1,        394,        394,       23,      260, 0x3684720e
24
+1,        417,        417,       23,      260, 0xe985616a
25
+1,        441,        441,       23,      260, 0x12b147dc
26
+0,        444,        444,        0,     6417, 0x427adde5
27
+1,        464,        464,       23,      260, 0xb8b55dd9
28
+1,        487,        487,       23,      260, 0xfd4a7007
29
+1,        510,        510,       23,      260, 0xfcc05c9a
30
+1,        534,        534,       23,      260, 0x20f74aea
31
+0,        555,        555,        0,     6776, 0x7a74c6ad
32
+1,        557,        557,       23,      260, 0x025359ca
33
+1,        580,        580,       23,      260, 0xace44ba1
34
+1,        603,        603,       23,      260, 0x03506929
35
+1,        626,        626,       23,      260, 0x8a926f17
36
+1,        650,        650,       23,      260, 0x4a7061e7
37
+0,        666,        666,        0,     6808, 0x1f6eb7c3
38
+1,        673,        673,       23,      260, 0xf8b66cc9
39
+1,        696,        696,       23,      260, 0xe8c96dec
40
+1,        719,        719,       23,      260, 0x672a54a6
41
+1,        743,        743,       23,      260, 0xe97b5698
42
+1,        766,        766,       23,      260, 0x377f684d
43
+0,        777,        777,        0,     6726, 0x452087e6
44
+1,        789,        789,       23,      260, 0xe9a66786
45
+1,        812,        812,       23,      260, 0xf8e17080
46
+1,        835,        835,       23,      260, 0x65eb662a
47
+1,        859,        859,       23,      260, 0xd8d361e9
48
+1,        882,        882,       23,      260, 0xb8115a0b
49
+0,        888,        888,        0,     6829, 0xee82b109
50
+1,        905,        905,       23,      260, 0xa5a85461
51
+1,        928,        928,       23,      260, 0xf401663b
52
+1,        952,        952,       23,      260, 0x042f714e
53
+1,        975,        975,       23,      260, 0xdf195820
54
+1,        998,        998,       23,      260, 0x0a67653c
55
+0,        999,        999,        0,     7055, 0xf41f1108
56
+1,       1021,       1021,       23,      260, 0xe9b44d02
57
+1,       1044,       1044,       23,      260, 0xbd4747b9
58
+1,       1068,       1068,       23,      260, 0x3ef66738
59
+1,       1091,       1091,       23,      260, 0x0f4a6e44
60
+0,       1111,       1111,        0,     6977, 0xf8fe1ede
61
+1,       1114,       1114,       23,      260, 0xaa3d6eb6
62
+1,       1137,       1137,       23,      260, 0xb9a46c4a
63
+1,       1160,       1160,       23,      260, 0x4f974c2e
64
+1,       1184,       1184,       23,      260, 0x9e714a00
65
+1,       1207,       1207,       23,      260, 0x601a7152
66
+0,       1222,       1222,        0,     6942, 0x9ad105c6
67
+1,       1230,       1230,       23,      260, 0xaf317064
68
+1,       1253,       1253,       23,      260, 0x163d4829
69
+1,       1277,       1277,       23,      260, 0xc56b4f1a
70
+1,       1300,       1300,       23,      260, 0x7623729c
71
+1,       1323,       1323,       23,      260, 0xa514694f
72
+0,       1333,       1333,        0,     6926, 0xe239dad6
73
+1,       1346,       1346,       23,      260, 0x93ee4ad8
74
+1,       1369,       1369,       23,      260, 0x6d8e573f
75
+1,       1393,       1393,       23,      260, 0x13256d68
76
+1,       1416,       1416,       23,      260, 0x187761a2
77
+1,       1439,       1439,       23,      260, 0x426045e7
78
+0,       1444,       1444,        0,     6966, 0x81dcfab1
79
+1,       1462,       1462,       23,      260, 0x7e7e5891
80
+1,       1486,       1486,       23,      260, 0xd6926dcc
81
+1,       1509,       1509,       23,      260, 0xf0196061
82
+1,       1532,       1532,       23,      260, 0x7cac49a3
83
+0,       1555,       1555,        0,     6896, 0x31e6cc02
84
+1,       1555,       1555,       23,      260, 0x24f4549a
85
+1,       1578,       1578,       23,      260, 0x937f551d
86
+1,       1602,       1602,       23,      260, 0x9bf462c5
87
+1,       1625,       1625,       23,      260, 0xd1e07436
88
+1,       1648,       1648,       23,      260, 0xdab36215
89
+0,       1666,       1666,        0,     6889, 0x1cc1006e
90
+1,       1671,       1671,       23,      260, 0xabc5662b
91
+1,       1695,       1695,       23,      260, 0xa24f6bf1
92
+1,       1718,       1718,       23,      260, 0x39e664b2
93
+1,       1741,       1741,       23,      260, 0xf5dc54ca
94
+1,       1764,       1764,       23,      260, 0xc3b16974
95
+0,       1777,       1777,        0,     6933, 0xc303f87f
96
+1,       1787,       1787,       23,      260, 0x6cf46bca
97
+1,       1811,       1811,       23,      260, 0x7a6b69b9
98
+1,       1834,       1834,       23,      260, 0xc02f69b9
99
+1,       1857,       1857,       23,      260, 0x7fc764a9
100
+1,       1880,       1880,       23,      260, 0xd9705b09
101
+0,       1888,       1888,        0,     7034, 0xb4970a20
102
+1,       1904,       1904,       23,      260, 0x17b05f49
103
+1,       1927,       1927,       23,      260, 0x10ad647c
104
+1,       1950,       1950,       23,      260, 0xf9636d69
105
+1,       1973,       1973,       23,      260, 0x622b5ad9
106
+1,       1996,       1996,       23,      260, 0x175b646d
107
+0,       1999,       1999,        0,     6961, 0xf064095d
108
+1,       2020,       2020,       23,      260, 0x722b5827
109
+1,       2043,       2043,       23,      260, 0x83614974
110
+1,       2066,       2066,       23,      260, 0x80366587
111
+1,       2089,       2089,       23,      260, 0x050f6bf9
112
+0,       2111,       2111,        0,     7089, 0x5ba350f9
113
+1,       2113,       2113,       23,      260, 0x949d6735
114
+1,       2136,       2136,       23,      260, 0x62cd7184
115
+1,       2159,       2159,       23,      260, 0x21e45713
116
+1,       2182,       2182,       23,      260, 0x56314509
117
+1,       2205,       2205,       23,      260, 0x7a1570d3
118
+0,       2222,       2222,        0,     7078, 0xa83f3e88
119
+1,       2229,       2229,       23,      260, 0x205a6ffb
120
+1,       2252,       2252,       23,      260, 0xead94483
121
+1,       2275,       2275,       23,      260, 0x93c84f10
122
+1,       2298,       2298,       23,      260, 0xdf45726f
123
+1,       2321,       2321,       23,      260, 0x35016f1e
124
+0,       2333,       2333,        0,     7147, 0xcda66cfc
125
+1,       2345,       2345,       23,      260, 0xa8114bcd
126
+1,       2368,       2368,       23,      260, 0x14c45130
127
+1,       2391,       2391,       23,      260, 0x97b07052
128
+1,       2414,       2414,       23,      260, 0x039b6c77
129
+1,       2438,       2438,       23,      260, 0x46f74635
130
+0,       2444,       2444,        0,     7173, 0xb7455859
131
+1,       2461,       2461,       23,      260, 0x4116540d
132
+1,       2484,       2484,       23,      260, 0x26747067
133
+1,       2507,       2507,       23,      260, 0x37f16485
134
+1,       2530,       2530,       23,      260, 0x631d4a33
135
+1,       2554,       2554,       23,      260, 0x14ed598d
136
+0,       2555,       2555,        0,     7213, 0x97b89994
137
+1,       2577,       2577,       23,      260, 0x3f9349e7
138
+1,       2600,       2600,       23,      260, 0x91295757
139
+1,       2623,       2623,       23,      260, 0x95de72bc
140
+1,       2647,       2647,       23,      260, 0xc7ee5ddb
141
+0,       2666,       2666,        0,     7170, 0xca8b2948
142
+1,       2670,       2670,       23,      260, 0x38e965cd
143
+1,       2693,       2693,       23,      260, 0xfae169e9
144
+1,       2716,       2716,       23,      260, 0x9c226143
145
+1,       2739,       2739,       23,      260, 0x1a804dbe
146
+1,       2763,       2763,       23,      260, 0x4aeb633c
147
+0,       2777,       2777,        0,     7174, 0xc7cc6bbb
148
+1,       2786,       2786,       23,      260, 0xa66e6bbb
149
+1,       2809,       2809,       23,      260, 0x51d17109
150
+1,       2832,       2832,       23,      260, 0x2bc86b9b
151
+1,       2856,       2856,       23,      260, 0xe56e6378
152
+1,       2879,       2879,       23,      260, 0x95665b47
153
+0,       2888,       2888,        0,     7235, 0xc2e68d2b
154
+1,       2902,       2902,       23,      260, 0x1c255fdb
155
+1,       2925,       2925,       23,      260, 0x3a2456cb
156
+1,       2948,       2948,       23,      260, 0xe18e7270
157
+1,       2972,       2972,       23,      260, 0x55b65c60
158
+1,       2995,       2995,       23,      260, 0x62be6515
159
+0,       3000,       3000,        0,     7261, 0x8204a423
160
+1,       3018,       3018,       23,      260, 0xdba25d09
161
+1,       3041,       3041,       23,      260, 0xd7cc4e40
162
+1,       3065,       3065,       23,      260, 0x335661be
163
+1,       3088,       3088,       23,      260, 0xc3286de3
164
+0,       3111,       3111,        0,     7353, 0xacc7e7c0
165
+1,       3111,       3111,       23,      260, 0x47e76e35
166
+1,       3134,       3134,       23,      260, 0x4b716f77
167
+1,       3157,       3157,       23,      260, 0x0716519e
168
+1,       3181,       3181,       23,      260, 0x032b4490
169
+1,       3204,       3204,       23,      260, 0x15f067e8
170
+0,       3222,       3222,        0,     7065, 0x45035c5c
171
+1,       3227,       3227,       23,      260, 0x16766ffa
172
+1,       3250,       3250,       23,      260, 0xc94154ac
173
+1,       3274,       3274,       23,      260, 0x74764bcd
174
+1,       3297,       3297,       23,      260, 0x3fad6f8f
175
+1,       3320,       3320,       23,      260, 0x5fa972a9
176
+0,       3333,       3333,        0,     7269, 0x72edbb76
177
+1,       3343,       3343,       23,      260, 0xde2a4b7b
178
+1,       3366,       3366,       23,      260, 0xd8494408
179
+1,       3390,       3390,       23,      260, 0x843d71a6
180
+1,       3413,       3413,       23,      260, 0x87fd6b60
181
+1,       3436,       3436,       23,      260, 0x1cc04a39
182
+0,       3444,       3444,        0,     7220, 0xb926772f
183
+1,       3459,       3459,       23,      260, 0x9ca24d94
184
+1,       3482,       3482,       23,      260, 0x820a7087
185
+1,       3506,       3506,       23,      260, 0x631166b2
186
+1,       3529,       3529,       23,      260, 0x2f20492a
187
+1,       3552,       3552,       23,      260, 0x932156d0
188
+0,       3555,       3555,        0,     7326, 0x0a66c632
189
+1,       3575,       3575,       23,      260, 0xdad54c90
190
+1,       3599,       3599,       23,      260, 0xcce84fc9
191
+1,       3622,       3622,       23,      260, 0xba317486
192
+1,       3645,       3645,       23,      260, 0xf5a4626a
193
+0,       3666,       3666,        0,     7225, 0xe39076ab
194
+1,       3668,       3668,       23,      260, 0x324669fd
195
+1,       3691,       3691,       23,      260, 0xc7d37113
196
+1,       3715,       3715,       23,      260, 0xc6e0644f
197
+1,       3738,       3738,       23,      260, 0x1b91522e
198
+1,       3761,       3761,       23,      260, 0x9b84667d
199
+0,       3777,       3777,        0,     7265, 0xe0209036
200
+1,       3784,       3784,       23,      260, 0xed7e66eb
201
+1,       3808,       3808,       23,      260, 0xaf806d1f
202
+1,       3831,       3831,       23,      260, 0x13a66941
203
+1,       3854,       3854,       23,      260, 0x13095a41
204
+1,       3877,       3877,       23,      260, 0x5ba05491
205
+0,       3888,       3888,        0,     7337, 0x7a5dc093
206
+1,       3900,       3900,       23,      260, 0xbf785887
207
+1,       3924,       3924,       23,      260, 0x21965973
208
+1,       3947,       3947,       23,      260, 0xd9aa7134
209
+1,       3970,       3970,       23,      260, 0x3add62bc
210
+1,       3993,       3993,       23,      260, 0xb9626260
211
+0,       4000,       4000,        0,     7246, 0x519a7a3c
212
+1,       4017,       4017,       23,      260, 0x5b08629f
213
+1,       4040,       4040,       23,      260, 0x43a34659
214
+1,       4063,       4063,       23,      260, 0x68575bda
215
+1,       4086,       4086,       23,      260, 0xd98b715a
216
+1,       4109,       4109,       23,      260, 0x7d816a77
217
+0,       4111,       4111,        0,     7266, 0x352c8078
218
+1,       4133,       4133,       23,      260, 0x16af6ff1
219
+1,       4156,       4156,       23,      260, 0x6d4557a7
220
+1,       4179,       4179,       23,      260, 0x0743401a
221
+1,       4202,       4202,       23,      260, 0x410563d8
222
+0,       4222,       4222,        0,     7323, 0xcaf69d7c
223
+1,       4226,       4226,       23,      260, 0x561371d1
224
+1,       4249,       4249,       23,      260, 0x3ef15872
225
+1,       4272,       4272,       23,      260, 0x1dd04972
226
+1,       4295,       4295,       23,      260, 0xed226c62
227
+1,       4318,       4318,       23,      260, 0x20857046
228
+0,       4333,       4333,        0,     7309, 0x98c1e6f7
229
+1,       4342,       4342,       23,      260, 0xed7f4724
230
+1,       4365,       4365,       23,      260, 0x7a7445cf
231
+1,       4388,       4388,       23,      260, 0x06ad6a93
232
+1,       4411,       4411,       23,      260, 0xdd1b6c91
233
+1,       4435,       4435,       23,      260, 0x05b94d27
234
+0,       4444,       4444,        0,     7121, 0x913d5bd6
235
+1,       4458,       4458,       23,      260, 0x12cc5062
236
+1,       4481,       4481,       23,      260, 0x44526d0f
237
+1,       4504,       4504,       23,      260, 0xf2ac6d95
238
+1,       4527,       4527,       23,      260, 0x27174b0f
239
+1,       4551,       4551,       23,      260, 0xcf125efe
240
+0,       4555,       4555,      111,     7088, 0x56302362
241
+1,       4574,       4574,       23,      260, 0xb8ce45a1
242
+1,       4597,       4597,       23,      260, 0x91895627
243
+1,       4620,       4620,       23,      260, 0x6edb706a
244
+1,       4643,       4643,       23,      260, 0x4e16674b
245
+0,       4666,       4666,      111,     7104, 0xc0d14f78
246
+1,       4667,       4667,       23,      260, 0xa9d66370
247
+1,       4690,       4690,       23,      260, 0x8f007043
248
+1,       4713,       4713,       23,      260, 0xdc1a5583
249
+1,       4736,       4736,       23,      260, 0x2f025511
250
+1,       4760,       4760,       23,      260, 0x2a4d6ddb
251
+0,       4777,       4777,      111,     7169, 0xd03c825b
252
+1,       4783,       4783,       23,      260, 0x54806f14
253
+1,       4806,       4806,       23,      260, 0xe0ac6d80
254
+1,       4829,       4829,       23,      260, 0xd9cf6c97
255
+1,       4852,       4852,       23,      260, 0xba705b6d
256
+1,       4876,       4876,       23,      260, 0x0be158e0
257
+0,       4888,       4888,      111,     7038, 0x1ecc201d
258
+1,       4899,       4899,       23,      260, 0x32b3645d
259
+1,       4922,       4922,       23,      260, 0x4a0a55b4
260
+1,       4945,       4945,       23,      260, 0x078b6fd8
261
+1,       4969,       4969,       23,      260, 0xc2816368
262
+1,       4992,       4992,       23,      260, 0xbdee5e4d
263
+0,       5000,       5000,      111,     7015, 0x83c94454
264
+1,       5015,       5015,       23,      260, 0x475366aa
265
+1,       5038,       5038,       23,      260, 0x2f9a44b9
266
+1,       5061,       5061,       23,      260, 0x91745ee5
267
+1,       5085,       5085,       23,      260, 0xc29b6e16
268
+1,       5108,       5108,       23,      260, 0x6ebb6b0e
269
+0,       5111,       5111,      111,     6983, 0x9e51f54d
270
+1,       5131,       5131,       23,      260, 0x4e7d7043
271
+1,       5154,       5154,       23,      260, 0x10b45caf
272
+1,       5178,       5178,       23,      260, 0x1b1e4e54
273
+1,       5201,       5201,       23,      260, 0xcc7b6443
274
+0,       5222,       5222,      111,     7088, 0x70d33de1
275
+1,       5224,       5224,       23,      260, 0x29936fdd
276
+1,       5247,       5247,       23,      260, 0x395256e3
277
+1,       5270,       5270,       23,      260, 0x50fb459f
278
+1,       5294,       5294,       23,      260, 0x0bef64ec
279
+1,       5317,       5317,       23,      260, 0xadd372dd
280
+0,       5333,       5333,      111,     7096, 0x4d0f81b5
281
+1,       5340,       5340,       23,      260, 0xc49e56dc
282
+1,       5363,       5363,       23,      260, 0x44e749c1
283
+1,       5387,       5387,       23,      260, 0x030e6c8a
284
+1,       5410,       5410,       23,      260, 0x82a47261
285
+1,       5433,       5433,       23,      260, 0xa3764fcc
286
+0,       5444,       5444,      111,     7106, 0xd1a83ddc
287
+1,       5456,       5456,       23,      260, 0xb1a1498a
288
+1,       5479,       5479,       23,      260, 0xbf9c7184
289
+1,       5503,       5503,       23,      260, 0xa45f6da8
290
+1,       5526,       5526,       23,      260, 0x9a2e4d51
291
+1,       5549,       5549,       23,      260, 0xa15c56ed
292
+0,       5555,       5555,      111,     7219, 0x20f47fe4
293
+1,       5572,       5572,       23,      260, 0x7029496c
294
+1,       5596,       5596,       23,      260, 0xf3595213
295
+1,       5619,       5619,       23,      260, 0x0dab6c5a
296
+1,       5642,       5642,       23,      260, 0x0e2367da
297
+1,       5665,       5665,       23,      260, 0xbb56610a
298
+0,       5666,       5666,      111,     7184, 0x45dc6a0e
299
+1,       5688,       5688,       23,      260, 0xcc916c92
300
+1,       5712,       5712,       23,      260, 0x886c5ba9
301
+1,       5735,       5735,       23,      260, 0x1b255a69
302
+1,       5758,       5758,       23,      260, 0xb7a66792
303
+0,       5777,       5777,      111,     7222, 0x488c6499
304
+1,       5781,       5781,       23,      260, 0x7d946b0e
305
+1,       5804,       5804,       23,      260, 0x07d16714
306
+1,       5828,       5828,       23,      260, 0x77ef6755
307
+1,       5851,       5851,       23,      260, 0xb2fe6849
308
+1,       5874,       5874,       23,      260, 0x601b5325
309
+0,       5888,       5888,      111,     7254, 0xbd097ba7
310
+1,       5897,       5897,       23,      260, 0x309c68d0
311
+1,       5921,       5921,       23,      260, 0x7bbe5d49
312
+1,       5944,       5944,       23,      260, 0x77bc6e47
313
+1,       5967,       5967,       23,      260, 0x3e0a6b0b
314
+1,       5990,       5990,       23,      260, 0x2ae458c4
315
+0,       6000,       6000,      111,     7189, 0x46e06d43
316
+1,       6013,       6013,       23,      260, 0x17576d4f
317
+1,       6037,       6037,       23,      260, 0x496c4bbd
318
+1,       6060,       6060,       23,      260, 0x972758a0
319
+1,       6083,       6083,       23,      260, 0xa9897452
320
+1,       6106,       6106,       23,      260, 0xf58c6b92
321
+0,       6111,       6111,      111,     7283, 0x19dd7319
322
+1,       6130,       6130,       23,      260, 0x8368709a
323
+1,       6153,       6153,       23,      260, 0x3890643f
324
+1,       6176,       6176,       23,      260, 0xdcc1472c
325
+1,       6199,       6199,       23,      260, 0xb601605c
326
+0,       6222,       6222,      111,     7161, 0x23171d02
327
+1,       6222,       6222,       23,      260, 0xfafd6e13
328
+1,       6246,       6246,       23,      260, 0x20a55dbf
329
+1,       6269,       6269,       23,      260, 0x84a147e6
330
+1,       6292,       6292,       23,      260, 0xe2c75bfd
331
+1,       6315,       6315,       23,      260, 0x52f672c4
332
+0,       6333,       6333,      111,     6976, 0xcc610c26
333
+1,       6339,       6339,       23,      260, 0x98af579a
334
+1,       6362,       6362,       23,      260, 0xf2034f37
335
+1,       6385,       6385,       23,      260, 0x75576856
336
+1,       6408,       6408,       23,      260, 0x4a796f1b
337
+1,       6431,       6431,       23,      260, 0x3a7a5612
338
+0,       6444,       6444,      111,     7056, 0x6cd917b0
339
+1,       6455,       6455,       23,      260, 0x1c0646bd
340
+1,       6478,       6478,       23,      260, 0xfccd6e2c
341
+1,       6501,       6501,       23,      260, 0x2bdd7139
342
+1,       6524,       6524,       23,      260, 0xadb4519a
343
+1,       6548,       6548,       23,      260, 0x8ef655b5
344
+0,       6555,       6555,      111,     6736, 0x02b78951
345
+1,       6571,       6571,       23,      260, 0x157852f6
346
+1,       6594,       6594,       23,      260, 0xec3a4aa8
347
+1,       6617,       6617,       23,      260, 0x5fa77041
348
+1,       6640,       6640,       23,      260, 0xe862690f
349
+1,       6664,       6664,       23,      260, 0xad1759ce
350
+0,       6666,       6666,      111,     6540, 0x767e0854
351
+1,       6687,       6687,       23,      260, 0x856f6d2e
352
+1,       6710,       6710,       23,      260, 0x19496938
353
+1,       6733,       6733,       23,      260, 0xf3135c06
354
+1,       6757,       6757,       23,      260, 0xbec861ab
355
+0,       6777,       6777,      111,     6170, 0xc84962fb
356
+1,       6780,       6780,       23,      260, 0x97486f09
357
+1,       6803,       6803,       23,      260, 0x2dcb64ed
358
+1,       6826,       6826,       23,      260, 0xac196fe8
359
+1,       6849,       6849,       23,      260, 0xa7d460f8
360
+1,       6873,       6873,       23,      260, 0x02e55631
361
+0,       6888,       6888,      111,     6169, 0x27e06c03
362
+1,       6896,       6896,       23,      260, 0x92556737
363
+1,       6919,       6919,       23,      260, 0x9ab25599
364
+1,       6942,       6942,       23,      260, 0x48017498
365
+1,       6965,       6965,       23,      260, 0x3f376d65
366
+1,       6989,       6989,       23,      260, 0x553750e2
367
+0,       7000,       7000,      111,     5864, 0xd14db83f
368
+1,       7012,       7012,       23,      260, 0x430a6cb9
369
+1,       7035,       7035,       23,      260, 0x0d4f3b7e
370
+1,       7058,       7058,       23,      260, 0xc5ee5733
371
+1,       7082,       7082,       23,      260, 0xec33744f
372
+1,       7105,       7105,       23,      260, 0xb7ca6c50
373
+0,       7111,       7111,      111,     5375, 0x4a21055d
374
+1,       7128,       7128,       23,      260, 0xca8e6e09
375
+1,       7151,       7151,       23,      260, 0xde7b67d9
376
+1,       7174,       7174,       23,      260, 0x1eeb47c6
377
+1,       7198,       7198,       23,      260, 0x97e355f6
378
+1,       7221,       7221,       23,      260, 0x4cb871da
379
+0,       7222,       7222,      111,     5206, 0x95ead3cb
380
+1,       7244,       7244,       23,      260, 0xf9d65f42
381
+1,       7267,       7267,       23,      260, 0x4df447f9
382
+1,       7291,       7291,       23,      260, 0x6da55c39
383
+1,       7314,       7314,       23,      260, 0xf8487192
384
+0,       7333,       7333,      111,     5220, 0xcfdcc37e
385
+1,       7337,       7337,       23,      260, 0xa5ef5e84
386
+1,       7360,       7360,       23,      260, 0xc750404d
387
+1,       7383,       7383,       23,      260, 0xe62d5ba7
388
+1,       7407,       7407,       23,      260, 0xa362739c
389
+1,       7430,       7430,       23,      260, 0x784c57f9
390
+0,       7444,       7444,      111,     4946, 0x2d864a77
391
+1,       7453,       7453,       23,      260, 0xac224b6f
392
+1,       7476,       7476,       23,      260, 0x34506907
393
+1,       7500,       7500,       23,      260, 0x94207121
394
+1,       7523,       7523,       23,      260, 0x018754e6
395
+1,       7546,       7546,       23,      260, 0xa5355133
396
+0,       7555,       7555,      111,     4390, 0x2ab9f462
397
+1,       7569,       7569,       23,      260, 0x93724dac
398
+1,       7592,       7592,       23,      260, 0x41e24c4c
399
+1,       7616,       7616,       23,      260, 0x1b2a7301
400
+1,       7639,       7639,       23,      260, 0xcce36e61
401
+1,       7662,       7662,       23,      260, 0xb323585a
402
+0,       7666,       7666,      111,     4051, 0x1d09592e
403
+1,       7685,       7685,       23,      260, 0x6f7c624d
404
+1,       7709,       7709,       23,      260, 0x87b96a4a
405
+1,       7732,       7732,       23,      260, 0xf567622a
406
+1,       7755,       7755,       23,      260, 0x52ce5d35
407
+0,       7777,       7777,      111,     3680, 0x39bd6a12
408
+1,       7778,       7778,       23,      260, 0x58a46c28
409
+1,       7801,       7801,       23,      260, 0x8e3e6d9a
410
+1,       7825,       7825,       23,      260, 0x5ef66906
411
+1,       7848,       7848,       23,      260, 0x351b5f9f
412
+1,       7871,       7871,       23,      260, 0x90b9588a
413
+0,       7888,       7888,      111,     2910, 0x6337ece9
414
+1,       7894,       7894,       23,      260, 0x34e8615f
415
+1,       7918,       7918,       23,      260, 0xcef75ab9
416
+1,       7941,       7941,       23,      260, 0x471f6bc8
417
+1,       7964,       7964,       23,      260, 0xd4756c62
418
+1,       7987,       7987,       23,      260, 0x7c554702
419
+0,       8000,       8000,      111,     2153, 0xf4e3bc17
420
+1,       8010,       8010,       23,      260, 0x185272f1
421
+1,       8034,       8034,       23,      260, 0x0c364348
422
+1,       8057,       8057,       23,      260, 0x24354467
423
+1,       8080,       8080,       23,      260, 0x837d5472
424
+1,       8103,       8103,       23,      260, 0xece2344f
... ...
@@ -46,7 +46,7 @@ static void print_formats(AVFilterContext *filter_ctx)
46 46
                        i, filter_ctx->filter->inout##puts[i].name,      \
47 47
                        av_get_sample_fmt_name(fmts->formats[j]));       \
48 48
                                                                         \
49
-            fmts = filter_ctx->inout##puts[i]->outin##_chlayouts;       \
49
+            fmts = filter_ctx->inout##puts[i]->outin##_channel_layouts; \
50 50
             for (j = 0; j < fmts->format_count; j++) {                  \
51 51
                 char buf[256];                                          \
52 52
                 av_get_channel_layout_string(buf, sizeof(buf), -1,      \