From bd5080b1b00032c656c6e5893755a92cb0221a2d Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Wed, 15 Feb 2012 19:41:41 +0100 Subject: af_pan: comment a tricky piece of code. --- libavfilter/af_pan.c | 4 ++++ 1 file changed, 4 insertions(+) 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; -- cgit v1.2.3