1
0
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:
Kacper Michajłow
2025-07-26 00:41:55 +02:00
committed by Niklas Haas
parent ef167512ab
commit e74dbb02eb

View File

@ -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;