mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-25 08:42:39 +00:00
avfilter/formats: do not allow unknown layouts in ff_parse_channel_layout if nret is not set
Current code returned the number of channels as channel layout in that case, and if nret is not set then unknown layouts are typically not supported. Also use the common parsing code. Use a temporary workaround to parse an unknown channel layout such as '13c', after a 1 year grace period only '13C' will work. Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
c4618f842a
commit
977fd88419
@ -664,22 +664,26 @@ int ff_parse_channel_layout(int64_t *ret, int *nret, const char *arg,
|
||||
{
|
||||
char *tail;
|
||||
int64_t chlayout;
|
||||
int nb_channels;
|
||||
|
||||
chlayout = av_get_channel_layout(arg);
|
||||
if (chlayout == 0) {
|
||||
chlayout = strtol(arg, &tail, 10);
|
||||
if (!(*tail == '\0' || *tail == 'c' && *(tail + 1) == '\0') || chlayout <= 0 || chlayout > 63) {
|
||||
if (av_get_extended_channel_layout(arg, &chlayout, &nb_channels) < 0) {
|
||||
/* [TEMPORARY 2016-12 -> 2017-12]*/
|
||||
nb_channels = strtol(arg, &tail, 10);
|
||||
if (!errno && *tail == 'c' && *(tail + 1) == '\0' && nb_channels > 0 && nb_channels < 64) {
|
||||
chlayout = 0;
|
||||
av_log(log_ctx, AV_LOG_WARNING, "Deprecated channel count specification '%s'. This will stop working in releases made in 2018 and after.\n", arg);
|
||||
} else {
|
||||
av_log(log_ctx, AV_LOG_ERROR, "Invalid channel layout '%s'\n", arg);
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
if (nret) {
|
||||
*nret = chlayout;
|
||||
*ret = 0;
|
||||
return 0;
|
||||
}
|
||||
if (!chlayout && !nret) {
|
||||
av_log(log_ctx, AV_LOG_ERROR, "Unknown channel layout '%s' is not supported.\n", arg);
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
*ret = chlayout;
|
||||
if (nret)
|
||||
*nret = av_get_channel_layout_nb_channels(chlayout);
|
||||
*nret = nb_channels;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -39,6 +39,9 @@ int main(void)
|
||||
"-1c",
|
||||
"60c",
|
||||
"65c",
|
||||
"2C",
|
||||
"60C",
|
||||
"65C",
|
||||
"5.1",
|
||||
"stereo",
|
||||
"1+1+1+1",
|
||||
|
@ -77,6 +77,9 @@ quad(side)
|
||||
-1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, -1c);
|
||||
0 = ff_parse_channel_layout(0000000000000000, 60, 60c);
|
||||
-1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, 65c);
|
||||
0 = ff_parse_channel_layout(0000000000000000, 2, 2C);
|
||||
0 = ff_parse_channel_layout(0000000000000000, 60, 60C);
|
||||
-1 = ff_parse_channel_layout(FFFFFFFFFFFFFFFF, -1, 65C);
|
||||
0 = ff_parse_channel_layout(000000000000003F, 6, 5.1);
|
||||
0 = ff_parse_channel_layout(0000000000000003, 2, stereo);
|
||||
0 = ff_parse_channel_layout(0000000000000001, 1, 1+1+1+1);
|
||||
|
Loading…
Reference in New Issue
Block a user