Merge remote-tracking branch 'richardpl/framestep'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 11 Apr 2013 00:23:01 +0000 (02:23 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 11 Apr 2013 00:31:14 +0000 (02:31 +0200)
* richardpl/framestep:
  lavfi/framestep: remove request_frame hack
  lavfi/framestep: switch to an AVOptions-based system

Merged-by: Michael Niedermayer <michaelni@gmx.at>
doc/filters.texi
libavfilter/af_afade.c
libavfilter/af_apad.c
libavfilter/af_aphaser.c
libavfilter/af_channelmap.c
libavfilter/af_channelsplit.c
libavfilter/avfilter.c
libavfilter/vf_blend.c
tests/filtergraphs/channelmap

index c37529c..c27a58f 100644 (file)
@@ -610,9 +610,6 @@ Beware of clipping when using a positive gain.
 
 Apply fade-in/out effect to input audio.
 
-The filter accepts parameters as a list of @var{key}=@var{value}
-pairs, separated by ":".
-
 A description of the accepted parameters follows.
 
 @table @option
@@ -1211,7 +1208,7 @@ This filter accepts the following named parameters:
 Channel layout of the output stream.
 
 @item map
-Map channels from input to output. The argument is a comma-separated list of
+Map channels from input to output. The argument is a '|'-separated list of
 mappings, each in the @code{@var{in_channel}-@var{out_channel}} or
 @var{in_channel} form. @var{in_channel} can be either the name of the input
 channel (e.g. FL for front left) or its index in the input channel layout.
@@ -1225,14 +1222,14 @@ output channels preserving index.
 
 For example, assuming a 5.1+downmix input MOV file
 @example
-ffmpeg -i in.mov -filter 'channelmap=map=DL-FL\,DR-FR' out.wav
+ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
 @end example
 will create an output WAV file tagged as stereo from the downmix channels of
 the input.
 
 To fix a 5.1 WAV improperly encoded in AAC's native channel order
 @example
-ffmpeg -i in.wav -filter 'channelmap=1\,2\,0\,5\,3\,4:channel_layout=5.1' out.wav
+ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav
 @end example
 
 @section join
@@ -1904,8 +1901,7 @@ It takes two input streams and outputs one stream, the first input is the
 "top" layer and second input is "bottom" layer.
 Output terminates when shortest input terminates.
 
-This filter accepts a list of options in the form of @var{key}=@var{value}
-pairs separated by ":". A description of the accepted options follows.
+A description of the accepted options follows.
 
 @table @option
 @item c0_mode
@@ -6351,9 +6347,6 @@ Add a phasing effect to the input audio.
 A phaser filter creates series of peaks and troughs in the frequency spectrum.
 The position of the peaks and troughs are modulated so that they vary over time, creating a sweeping effect.
 
-The filter accepts parameters as a list of @var{key}=@var{value}
-pairs, separated by ":".
-
 A description of the accepted parameters follows.
 
 @table @option
index 2ab4674..a00d0e4 100644 (file)
@@ -288,8 +288,6 @@ static const AVFilterPad avfilter_af_afade_outputs[] = {
     { NULL }
 };
 
-static const char *const shorthand[] = { NULL };
-
 AVFilter avfilter_af_afade = {
     .name          = "afade",
     .description   = NULL_IF_CONFIG_SMALL("Fade in/out input audio."),
@@ -299,5 +297,4 @@ AVFilter avfilter_af_afade = {
     .inputs        = avfilter_af_afade_inputs,
     .outputs       = avfilter_af_afade_outputs,
     .priv_class    = &afade_class,
-    .shorthand     = shorthand,
 };
index 3c972e9..8c8690e 100644 (file)
@@ -144,8 +144,6 @@ static const AVFilterPad apad_outputs[] = {
     { NULL },
 };
 
-static const char *const shorthand[] = { NULL };
-
 AVFilter avfilter_af_apad = {
     .name          = "apad",
     .description   = NULL_IF_CONFIG_SMALL("Pad audio with silence."),
@@ -154,5 +152,4 @@ AVFilter avfilter_af_apad = {
     .inputs        = apad_inputs,
     .outputs       = apad_outputs,
     .priv_class    = &apad_class,
-    .shorthand     = shorthand,
 };
index 141278f..d61715d 100644 (file)
@@ -344,8 +344,6 @@ static const AVFilterPad aphaser_outputs[] = {
     { NULL }
 };
 
-static const char *const shorthand[] = { "in_gain", "out_gain", "delay", "decay", "speed", "type", NULL };
-
 AVFilter avfilter_af_aphaser = {
     .name          = "aphaser",
     .description   = NULL_IF_CONFIG_SMALL("Add a phasing effect to the audio."),
@@ -356,5 +354,4 @@ AVFilter avfilter_af_aphaser = {
     .inputs        = aphaser_inputs,
     .outputs       = aphaser_outputs,
     .priv_class    = &aphaser_class,
-    .shorthand     = shorthand,
 };
index e73c4bc..4cc92c9 100644 (file)
@@ -123,25 +123,14 @@ static int get_channel(char **map, uint64_t *ch, char delim)
 static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
 {
     ChannelMapContext *s = ctx->priv;
-    int ret;
-    char *mapping;
+    int ret = 0;
+    char *mapping, separator = '|';
     int map_entries = 0;
     char buf[256];
     enum MappingMode mode;
     uint64_t out_ch_mask = 0;
     int i;
 
-    if (!args) {
-        av_log(ctx, AV_LOG_ERROR, "No parameters supplied.\n");
-        return AVERROR(EINVAL);
-    }
-
-    s->class = &channelmap_class;
-    av_opt_set_defaults(s);
-
-    if ((ret = av_set_options_string(s, args, "=", ":")) < 0)
-        return ret;
-
     mapping = s->mapping_str;
 
     if (!mapping) {
@@ -164,13 +153,20 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
             else
                 mode = MAP_PAIR_STR_STR;
         }
+#if FF_API_OLD_FILTER_OPTS
+        if (strchr(mapping, ',')) {
+            av_log(ctx, AV_LOG_WARNING, "This syntax is deprecated, use "
+                   "'|' to separate the mappings.\n");
+            separator = ',';
+        }
+#endif
     }
 
     if (mode != MAP_NONE) {
-        char *comma = mapping;
+        char *sep = mapping;
         map_entries = 1;
-        while ((comma = strchr(comma, ','))) {
-            if (*++comma)  // Allow trailing comma
+        while ((sep = strchr(sep, separator))) {
+            if (*++sep)  // Allow trailing comma
                 map_entries++;
         }
     }
@@ -187,7 +183,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
         static const char err[] = "Failed to parse channel map\n";
         switch (mode) {
         case MAP_ONE_INT:
-            if (get_channel_idx(&mapping, &in_ch_idx, ',', MAX_CH) < 0) {
+            if (get_channel_idx(&mapping, &in_ch_idx, separator, MAX_CH) < 0) {
                 ret = AVERROR(EINVAL);
                 av_log(ctx, AV_LOG_ERROR, err);
                 goto fail;
@@ -196,7 +192,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
             s->map[i].out_channel_idx = i;
             break;
         case MAP_ONE_STR:
-            if (!get_channel(&mapping, &in_ch, ',')) {
+            if (!get_channel(&mapping, &in_ch, separator)) {
                 av_log(ctx, AV_LOG_ERROR, err);
                 ret = AVERROR(EINVAL);
                 goto fail;
@@ -206,7 +202,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
             break;
         case MAP_PAIR_INT_INT:
             if (get_channel_idx(&mapping, &in_ch_idx, '-', MAX_CH) < 0 ||
-                get_channel_idx(&mapping, &out_ch_idx, ',', MAX_CH) < 0) {
+                get_channel_idx(&mapping, &out_ch_idx, separator, MAX_CH) < 0) {
                 av_log(ctx, AV_LOG_ERROR, err);
                 ret = AVERROR(EINVAL);
                 goto fail;
@@ -216,7 +212,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
             break;
         case MAP_PAIR_INT_STR:
             if (get_channel_idx(&mapping, &in_ch_idx, '-', MAX_CH) < 0 ||
-                get_channel(&mapping, &out_ch, ',') < 0 ||
+                get_channel(&mapping, &out_ch, separator) < 0 ||
                 out_ch & out_ch_mask) {
                 av_log(ctx, AV_LOG_ERROR, err);
                 ret = AVERROR(EINVAL);
@@ -228,7 +224,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
             break;
         case MAP_PAIR_STR_INT:
             if (get_channel(&mapping, &in_ch, '-') < 0 ||
-                get_channel_idx(&mapping, &out_ch_idx, ',', MAX_CH) < 0) {
+                get_channel_idx(&mapping, &out_ch_idx, separator, MAX_CH) < 0) {
                 av_log(ctx, AV_LOG_ERROR, err);
                 ret = AVERROR(EINVAL);
                 goto fail;
@@ -238,7 +234,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
             break;
         case MAP_PAIR_STR_STR:
             if (get_channel(&mapping, &in_ch, '-') < 0 ||
-                get_channel(&mapping, &out_ch, ',') < 0 ||
+                get_channel(&mapping, &out_ch, separator) < 0 ||
                 out_ch & out_ch_mask) {
                 av_log(ctx, AV_LOG_ERROR, err);
                 ret = AVERROR(EINVAL);
@@ -409,8 +405,8 @@ AVFilter avfilter_af_channelmap = {
     .init          = channelmap_init,
     .query_formats = channelmap_query_formats,
     .priv_size     = sizeof(ChannelMapContext),
+    .priv_class    = &channelmap_class,
 
     .inputs        = avfilter_af_channelmap_inputs,
     .outputs       = avfilter_af_channelmap_outputs,
-    .priv_class    = &channelmap_class,
 };
index ada967e..e87d629 100644 (file)
@@ -55,10 +55,6 @@ static int init(AVFilterContext *ctx, const char *arg)
     int nb_channels;
     int ret = 0, i;
 
-    s->class = &channelsplit_class;
-    av_opt_set_defaults(s);
-    if ((ret = av_set_options_string(s, arg, "=", ":")) < 0)
-        return ret;
     if (!(s->channel_layout = av_get_channel_layout(s->channel_layout_str))) {
         av_log(ctx, AV_LOG_ERROR, "Error parsing channel layout '%s'.\n",
                s->channel_layout_str);
@@ -78,7 +74,6 @@ static int init(AVFilterContext *ctx, const char *arg)
     }
 
 fail:
-    av_opt_free(s);
     return ret;
 }
 
@@ -144,11 +139,11 @@ AVFilter avfilter_af_channelsplit = {
     .name           = "channelsplit",
     .description    = NULL_IF_CONFIG_SMALL("Split audio into per-channel streams"),
     .priv_size      = sizeof(ChannelSplitContext),
+    .priv_class     = &channelsplit_class,
 
     .init           = init,
     .query_formats  = query_formats,
 
     .inputs  = avfilter_af_channelsplit_inputs,
     .outputs = NULL,
-    .priv_class = &channelsplit_class,
 };
index 9159b9e..2b8b8cd 100644 (file)
@@ -656,13 +656,19 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
     AVDictionaryEntry *e;
     int ret=0;
     int anton_options =
+        !strcmp(filter->filter->name,  "afade"     ) ||
         !strcmp(filter->filter->name,  "aformat") ||
         !strcmp(filter->filter->name,  "amix"      ) ||
+        !strcmp(filter->filter->name,  "apad"      ) ||
+        !strcmp(filter->filter->name,  "aphaser"   ) ||
         !strcmp(filter->filter->name,  "ass")     ||
         !strcmp(filter->filter->name,  "asyncts"   ) ||
         !strcmp(filter->filter->name,  "blackframe") ||
+        !strcmp(filter->filter->name,  "blend"     ) ||
         !strcmp(filter->filter->name,  "boxblur"   ) ||
         !strcmp(filter->filter->name,  "cellauto") ||
+        !strcmp(filter->filter->name,  "channelmap") ||
+        !strcmp(filter->filter->name,  "channelsplit") ||
         !strcmp(filter->filter->name,  "colormatrix") ||
         !strcmp(filter->filter->name,  "crop"      ) ||
         !strcmp(filter->filter->name,  "cropdetect") ||
index 434b470..d279e3a 100644 (file)
@@ -453,8 +453,6 @@ static const AVFilterPad blend_outputs[] = {
     { NULL }
 };
 
-static const char *const shorthand[] = { NULL };
-
 AVFilter avfilter_vf_blend = {
     .name          = "blend",
     .description   = NULL_IF_CONFIG_SMALL("Blend two video frames into each other."),
@@ -465,5 +463,4 @@ AVFilter avfilter_vf_blend = {
     .inputs        = blend_inputs,
     .outputs       = blend_outputs,
     .priv_class    = &blend_class,
-    .shorthand     = shorthand,
 };
index 7f9f24d..e2b6143 100644 (file)
@@ -1 +1 @@
-channelmap=map=1\,2\,0\,5\,3\,4:channel_layout=5.1
+channelmap=map=1|2|0|5|3|4:channel_layout=5.1