summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-02-15 19:41:41 +0100
committerNicolas George <nicolas.george@normalesup.org>2012-02-15 20:04:05 +0100
commitbd5080b1b00032c656c6e5893755a92cb0221a2d (patch)
treeb364d2b56f7f3f09f29c1edfc2c576f3dbba5a87 /libavfilter
parentcba4e2cbbcb8abb45fff1e0255934bb577ab799f (diff)
af_pan: comment a tricky piece of code.
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/af_pan.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libavfilter/af_pan.c b/libavfilter/af_pan.c
index 9f293a61eb..119111d68c 100644
--- a/libavfilter/af_pan.c
+++ b/libavfilter/af_pan.c
@@ -64,14 +64,17 @@ static int parse_channel_name(char **arg, int *rchannel, int *rnamed)
int len, i, channel_id = 0;
int64_t layout, layout0;
+ /* try to parse a channel name, e.g. "FL" */
if (sscanf(*arg, " %7[A-Z] %n", buf, &len)) {
layout0 = layout = av_get_channel_layout(buf);
+ /* channel_id <- first set bit in layout */
for (i = 32; i > 0; i >>= 1) {
if (layout >= (int64_t)1 << i) {
channel_id += i;
layout >>= i;
}
}
+ /* reject layouts that are not a single channel */
if (channel_id >= MAX_CHANNELS || layout0 != (int64_t)1 << channel_id)
return AVERROR(EINVAL);
*rchannel = channel_id;
@@ -79,6 +82,7 @@ static int parse_channel_name(char **arg, int *rchannel, int *rnamed)
*arg += len;
return 0;
}
+ /* try to parse a channel number, e.g. "c2" */
if (sscanf(*arg, " c%d %n", &channel_id, &len) &&
channel_id >= 0 && channel_id < MAX_CHANNELS) {
*rchannel = channel_id;