Skip to content

Commit fb5e8ea

Browse files
committed
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 <[email protected]>
1 parent d38fc25 commit fb5e8ea

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

libavformat/iamf_parse.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,8 @@ static int param_parse(void *s, IAMFContext *c, AVIOContext *pb,
539539
if (constant_subblock_duration == 0) {
540540
subblock_duration = ffio_read_leb(pb);
541541
total_duration += subblock_duration;
542-
}
542+
} else if (i == nb_subblocks - 1)
543+
subblock_duration = duration - i * constant_subblock_duration;
543544

544545
switch (type) {
545546
case AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN: {

libavformat/iamf_reader.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ static int parameter_block_obu(AVFormatContext *s, IAMFDemuxContext *c,
178178
if (!param_definition->mode && !constant_subblock_duration) {
179179
subblock_duration = ffio_read_leb(pb);
180180
total_duration += subblock_duration;
181-
}
181+
} else if (i == nb_subblocks - 1)
182+
subblock_duration = duration - i * constant_subblock_duration;
182183

183184
switch (param->type) {
184185
case AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN: {

0 commit comments

Comments
 (0)