From 871c69a28bf4f34d7d4fe8c0c4a91c7ecffccc96 Mon Sep 17 00:00:00 2001 From: James Almer Date: Wed, 11 Dec 2024 23:34:32 -0300 Subject: [PATCH] avformat/iamf_parse: fix setting duration for the last subblock in a parameter definition When subblock durations are constant, the last block may be smaller and the value needs to be calculated. Signed-off-by: James Almer (cherry picked from commit fb5e8ea9719c8afcd0d9e3a51e370c06c361d9ba) --- libavformat/iamf_parse.c | 3 ++- libavformat/iamf_reader.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libavformat/iamf_parse.c b/libavformat/iamf_parse.c index 57ccf1c199..3486104aba 100644 --- a/libavformat/iamf_parse.c +++ b/libavformat/iamf_parse.c @@ -534,7 +534,8 @@ static int param_parse(void *s, IAMFContext *c, AVIOContext *pb, if (constant_subblock_duration == 0) { subblock_duration = ffio_read_leb(pb); total_duration += subblock_duration; - } + } else if (i == nb_subblocks - 1) + subblock_duration = duration - i * constant_subblock_duration; switch (type) { case AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN: { diff --git a/libavformat/iamf_reader.c b/libavformat/iamf_reader.c index 7ad61cb246..9f3469b64f 100644 --- a/libavformat/iamf_reader.c +++ b/libavformat/iamf_reader.c @@ -178,7 +178,8 @@ static int parameter_block_obu(AVFormatContext *s, IAMFDemuxContext *c, if (!param_definition->mode && !constant_subblock_duration) { subblock_duration = ffio_read_leb(pb); total_duration += subblock_duration; - } + } else if (i == nb_subblocks - 1) + subblock_duration = duration - i * constant_subblock_duration; switch (param->type) { case AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN: {