libavfilter/formats: Fix parsing of channel specifications with a trailing 'c'.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
6b547180b9
commit
7cbb52ecab
@ -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)
|
|||||||
-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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user