[FFmpeg-cvslog] af_channelmap: switch to an AVOptions-based system.
Anton Khirnov
git at videolan.org
Thu Apr 11 02:14:44 CEST 2013
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Feb 25 21:21:29 2013 +0100| [ba8efac977f4276f05274947b2b67d144cbc965a] | committer: Anton Khirnov
af_channelmap: switch to an AVOptions-based system.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ba8efac977f4276f05274947b2b67d144cbc965a
---
doc/filters.texi | 6 +++---
libavfilter/af_channelmap.c | 41 ++++++++++++++++++-----------------------
tests/filtergraphs/channelmap | 2 +-
3 files changed, 22 insertions(+), 27 deletions(-)
diff --git a/doc/filters.texi b/doc/filters.texi
index 0e7acda..c75b0ee 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}- at 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 a7e73f0..d028e28 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 7f9f24d..e2b6143 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
More information about the ffmpeg-cvslog
mailing list