Commit 7cbb52ec authored by Simon Thelen's avatar Simon Thelen Committed by Michael Niedermayer

libavfilter/formats: Fix parsing of channel specifications with a trailing 'c'.

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 6b547180
...@@ -637,23 +637,20 @@ int ff_parse_channel_layout(int64_t *ret, int *nret, const char *arg, ...@@ -637,23 +637,20 @@ int ff_parse_channel_layout(int64_t *ret, int *nret, const char *arg,
void *log_ctx) void *log_ctx)
{ {
char *tail; char *tail;
int64_t chlayout, count; int64_t chlayout;
if (nret) {
count = strtol(arg, &tail, 10);
if (*tail == 'c' && !tail[1] && count > 0 && count < 63) {
*nret = count;
*ret = 0;
return 0;
}
}
chlayout = av_get_channel_layout(arg); chlayout = av_get_channel_layout(arg);
if (chlayout == 0) { if (chlayout == 0) {
chlayout = strtol(arg, &tail, 10); chlayout = strtol(arg, &tail, 10);
if (*tail || chlayout == 0) { if (!(*tail == '\0' || *tail == 'c' && *(tail + 1) == '\0') || chlayout <= 0 || chlayout > 63) {
av_log(log_ctx, AV_LOG_ERROR, "Invalid channel layout '%s'\n", arg); av_log(log_ctx, AV_LOG_ERROR, "Invalid channel layout '%s'\n", arg);
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
if (nret) {
*nret = chlayout;
*ret = 0;
return 0;
}
} }
*ret = chlayout; *ret = chlayout;
if (nret) if (nret)
......
...@@ -69,11 +69,11 @@ quad(side) ...@@ -69,11 +69,11 @@ quad(side)
-1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, blah); -1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, blah);
0 = ff_parse_channel_layout(0000000000000004, 1, 1); 0 = ff_parse_channel_layout(0000000000000004, 1, 1);
0 = ff_parse_channel_layout(0000000000000003, 2, 2); 0 = ff_parse_channel_layout(0000000000000003, 2, 2);
0 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, 64, -1); -1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, -1);
0 = ff_parse_channel_layout(000000000000003C, 4, 60); 0 = ff_parse_channel_layout(0000000000000000, 60, 60);
0 = ff_parse_channel_layout(0000000000000041, 2, 65); -1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, 65);
0 = ff_parse_channel_layout(0000000000000000, 1, 1c); 0 = ff_parse_channel_layout(0000000000000004, 1, 1c);
0 = ff_parse_channel_layout(0000000000000000, 2, 2c); 0 = ff_parse_channel_layout(0000000000000003, 2, 2c);
-1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, -1c); -1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, -1c);
0 = ff_parse_channel_layout(0000000000000000, 60, 60c); 0 = ff_parse_channel_layout(0000000000000000, 60, 60c);
-1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, 65c); -1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, 65c);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment