You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avcodec/dovi_rpudec: skip unknown ext blocks instead of erroring out
Should allow for forward compatibility with newer versions. Signed-off-by: Kacper Michajłow <kasper93@gmail.com>
This commit is contained in:
committed by
Niklas Haas
parent
ef167512ab
commit
e74dbb02eb
@ -188,8 +188,7 @@ static int parse_ext_v1(DOVIContext *s, GetBitContext *gb, AVDOVIDmData *dm)
|
|||||||
dm->l255.dm_debug[i] = get_bits(gb, 8);
|
dm->l255.dm_debug[i] = get_bits(gb, 8);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
av_log(s->logctx, AV_LOG_WARNING,
|
avpriv_request_sample(s->logctx, "Dolby Vision DM v1 level %u", dm->level);
|
||||||
"Unknown Dolby Vision DM v1 level: %u\n", dm->level);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -274,8 +273,7 @@ static int parse_ext_v2(DOVIContext *s, GetBitContext *gb, AVDOVIDmData *dm,
|
|||||||
dm->l254.dm_version_index = get_bits(gb, 8);
|
dm->l254.dm_version_index = get_bits(gb, 8);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
av_log(s->logctx, AV_LOG_WARNING,
|
avpriv_request_sample(s->logctx, "Dolby Vision DM v2 level %u", dm->level);
|
||||||
"Unknown Dolby Vision DM v2 level: %u\n", dm->level);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -328,12 +326,15 @@ static int parse_ext_blocks(DOVIContext *s, GetBitContext *gb, int ver,
|
|||||||
switch (ver) {
|
switch (ver) {
|
||||||
case 1: ret = parse_ext_v1(s, gb, dm); break;
|
case 1: ret = parse_ext_v1(s, gb, dm); break;
|
||||||
case 2: ret = parse_ext_v2(s, gb, dm, ext_block_length); break;
|
case 2: ret = parse_ext_v2(s, gb, dm, ext_block_length); break;
|
||||||
default: return AVERROR_BUG;
|
default:
|
||||||
|
avpriv_request_sample(s->logctx, "Dolby Vision DM v%d", ver);
|
||||||
|
goto skip;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
skip:
|
||||||
parsed_bits = get_bits_count(gb) - start_pos;
|
parsed_bits = get_bits_count(gb) - start_pos;
|
||||||
if (parsed_bits > ext_block_length * 8)
|
if (parsed_bits > ext_block_length * 8)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
Reference in New Issue
Block a user