diff options
author | Anton Khirnov <anton@khirnov.net> | 2013-02-25 21:21:29 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2013-04-09 19:09:40 +0200 |
commit | ba8efac977f4276f05274947b2b67d144cbc965a (patch) | |
tree | 5cf9ad72894c0bd38b942b1e472057954942970f | |
parent | b2b25b0659fa047da6266d2ce165d43011136b30 (diff) | |
download | ffmpeg-ba8efac977f4276f05274947b2b67d144cbc965a.tar.gz |
af_channelmap: switch to an AVOptions-based system.
-rw-r--r-- | doc/filters.texi | 6 | ||||
-rw-r--r-- | libavfilter/af_channelmap.c | 41 | ||||
-rw-r--r-- | tests/filtergraphs/channelmap | 2 |
3 files changed, 22 insertions, 27 deletions
diff --git a/doc/filters.texi b/doc/filters.texi index 0e7acda7b1..c75b0ee37f 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -310,7 +310,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. @@ -324,14 +324,14 @@ output channels preserving index. For example, assuming a 5.1+downmix input MOV file @example -avconv -i in.mov -filter 'channelmap=map=DL-FL\,DR-FR' out.wav +avconv -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 -avconv -i in.wav -filter 'channelmap=1\,2\,0\,5\,3\,4:channel_layout=5.1' out.wav +avconv -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav @end example @section join diff --git a/libavfilter/af_channelmap.c b/libavfilter/af_channelmap.c index a7e73f0ccb..d028e28e55 100644 --- a/libavfilter/af_channelmap.c +++ b/libavfilter/af_channelmap.c @@ -123,26 +123,13 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args) { ChannelMapContext *s = ctx->priv; int ret; - char *mapping; + 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) { - av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args); - return ret; - } - mapping = s->mapping_str; if (!mapping) { @@ -165,13 +152,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++; } } @@ -188,7 +182,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; @@ -197,7 +191,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; @@ -207,7 +201,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; @@ -217,7 +211,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); @@ -229,7 +223,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; @@ -239,7 +233,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,6 +403,7 @@ 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, diff --git a/tests/filtergraphs/channelmap b/tests/filtergraphs/channelmap index 7f9f24d178..e2b61435df 100644 --- a/tests/filtergraphs/channelmap +++ b/tests/filtergraphs/channelmap @@ -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 |