Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
ba8efac9
Commit
ba8efac9
authored
Feb 25, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
af_channelmap: switch to an AVOptions-based system.
parent
b2b25b06
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
22 additions
and
27 deletions
+22
-27
filters.texi
doc/filters.texi
+3
-3
af_channelmap.c
libavfilter/af_channelmap.c
+18
-23
channelmap
tests/filtergraphs/channelmap
+1
-1
No files found.
doc/filters.texi
View file @
ba8efac9
...
@@ -310,7 +310,7 @@ This filter accepts the following named parameters:
...
@@ -310,7 +310,7 @@ This filter accepts the following named parameters:
Channel layout of the output stream.
Channel layout of the output stream.
@item map
@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
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
@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.
channel (e.g. FL for front left) or its index in the input channel layout.
...
@@ -324,14 +324,14 @@ output channels preserving index.
...
@@ -324,14 +324,14 @@ output channels preserving index.
For example, assuming a 5.1+downmix input MOV file
For example, assuming a 5.1+downmix input MOV file
@example
@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
@end example
will create an output WAV file tagged as stereo from the downmix channels of
will create an output WAV file tagged as stereo from the downmix channels of
the input.
the input.
To fix a 5.1 WAV improperly encoded in AAC's native channel order
To fix a 5.1 WAV improperly encoded in AAC's native channel order
@example
@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
@end example
@section join
@section join
...
...
libavfilter/af_channelmap.c
View file @
ba8efac9
...
@@ -123,26 +123,13 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
...
@@ -123,26 +123,13 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
{
{
ChannelMapContext
*
s
=
ctx
->
priv
;
ChannelMapContext
*
s
=
ctx
->
priv
;
int
ret
;
int
ret
;
char
*
mapping
;
char
*
mapping
,
separator
=
'|'
;
int
map_entries
=
0
;
int
map_entries
=
0
;
char
buf
[
256
];
char
buf
[
256
];
enum
MappingMode
mode
;
enum
MappingMode
mode
;
uint64_t
out_ch_mask
=
0
;
uint64_t
out_ch_mask
=
0
;
int
i
;
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
;
mapping
=
s
->
mapping_str
;
if
(
!
mapping
)
{
if
(
!
mapping
)
{
...
@@ -165,13 +152,20 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
...
@@ -165,13 +152,20 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
else
else
mode
=
MAP_PAIR_STR_STR
;
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
)
{
if
(
mode
!=
MAP_NONE
)
{
char
*
comma
=
mapping
;
char
*
sep
=
mapping
;
map_entries
=
1
;
map_entries
=
1
;
while
((
comma
=
strchr
(
comma
,
','
)))
{
while
((
sep
=
strchr
(
sep
,
separator
)))
{
if
(
*++
comma
)
// Allow trailing comma
if
(
*++
sep
)
// Allow trailing comma
map_entries
++
;
map_entries
++
;
}
}
}
}
...
@@ -188,7 +182,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
...
@@ -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
"
;
static
const
char
err
[]
=
"Failed to parse channel map
\n
"
;
switch
(
mode
)
{
switch
(
mode
)
{
case
MAP_ONE_INT
:
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
);
ret
=
AVERROR
(
EINVAL
);
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
goto
fail
;
goto
fail
;
...
@@ -197,7 +191,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
...
@@ -197,7 +191,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
s
->
map
[
i
].
out_channel_idx
=
i
;
s
->
map
[
i
].
out_channel_idx
=
i
;
break
;
break
;
case
MAP_ONE_STR
:
case
MAP_ONE_STR
:
if
(
!
get_channel
(
&
mapping
,
&
in_ch
,
','
))
{
if
(
!
get_channel
(
&
mapping
,
&
in_ch
,
separator
))
{
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
ret
=
AVERROR
(
EINVAL
);
ret
=
AVERROR
(
EINVAL
);
goto
fail
;
goto
fail
;
...
@@ -207,7 +201,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
...
@@ -207,7 +201,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
break
;
break
;
case
MAP_PAIR_INT_INT
:
case
MAP_PAIR_INT_INT
:
if
(
get_channel_idx
(
&
mapping
,
&
in_ch_idx
,
'-'
,
MAX_CH
)
<
0
||
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
);
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
ret
=
AVERROR
(
EINVAL
);
ret
=
AVERROR
(
EINVAL
);
goto
fail
;
goto
fail
;
...
@@ -217,7 +211,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
...
@@ -217,7 +211,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
break
;
break
;
case
MAP_PAIR_INT_STR
:
case
MAP_PAIR_INT_STR
:
if
(
get_channel_idx
(
&
mapping
,
&
in_ch_idx
,
'-'
,
MAX_CH
)
<
0
||
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
)
{
out_ch
&
out_ch_mask
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
ret
=
AVERROR
(
EINVAL
);
ret
=
AVERROR
(
EINVAL
);
...
@@ -229,7 +223,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
...
@@ -229,7 +223,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
break
;
break
;
case
MAP_PAIR_STR_INT
:
case
MAP_PAIR_STR_INT
:
if
(
get_channel
(
&
mapping
,
&
in_ch
,
'-'
)
<
0
||
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
);
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
ret
=
AVERROR
(
EINVAL
);
ret
=
AVERROR
(
EINVAL
);
goto
fail
;
goto
fail
;
...
@@ -239,7 +233,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
...
@@ -239,7 +233,7 @@ static av_cold int channelmap_init(AVFilterContext *ctx, const char *args)
break
;
break
;
case
MAP_PAIR_STR_STR
:
case
MAP_PAIR_STR_STR
:
if
(
get_channel
(
&
mapping
,
&
in_ch
,
'-'
)
<
0
||
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
)
{
out_ch
&
out_ch_mask
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
av_log
(
ctx
,
AV_LOG_ERROR
,
err
);
ret
=
AVERROR
(
EINVAL
);
ret
=
AVERROR
(
EINVAL
);
...
@@ -409,6 +403,7 @@ AVFilter avfilter_af_channelmap = {
...
@@ -409,6 +403,7 @@ AVFilter avfilter_af_channelmap = {
.
init
=
channelmap_init
,
.
init
=
channelmap_init
,
.
query_formats
=
channelmap_query_formats
,
.
query_formats
=
channelmap_query_formats
,
.
priv_size
=
sizeof
(
ChannelMapContext
),
.
priv_size
=
sizeof
(
ChannelMapContext
),
.
priv_class
=
&
channelmap_class
,
.
inputs
=
avfilter_af_channelmap_inputs
,
.
inputs
=
avfilter_af_channelmap_inputs
,
.
outputs
=
avfilter_af_channelmap_outputs
,
.
outputs
=
avfilter_af_channelmap_outputs
,
...
...
tests/filtergraphs/channelmap
View file @
ba8efac9
channelmap=map=1
\,2\,0\,5\,3\,
4:channel_layout=5.1
channelmap=map=1
|2|0|5|3|
4:channel_layout=5.1
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment