From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 334754F52C for ; Fri, 27 Feb 2026 14:03:05 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'wcZTIdNRHXbdYAO+Xf1rFoJ9Z/JyM6hKQip2K3WO8+k=', expected b'cTpa788m9SMusnvRV8dhZFPSBZU5qXyjGry1881DGwI=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1772200968; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=wcZTIdNRHXbdYAO+Xf1rFoJ9Z/JyM6hKQip2K3WO8+k=; b=Qg1s4/w6Ca24PZ7wqyBs/C9e6DQI0D3auYeuGxmfu1tI+T2LE1WeMAetaiYrZUnf56FmO McoaFoUlWZ5b5QUItUskbFQc8fOX0Axbfknmf9X6YojvAn91vXhHZQfHxwiV/t39xtZpV6j MOQ/ZxKhni/2lWMXlT5rWihx4Q6zUpHa53OEUmCY6EpKeVFj1GdA0D4rptsxGOkEW9Ky46e j2gUCGTPD/fFhxCn5ZClDb+9+He5HwnF3bQxXwTkWCMIL/+sfRo6sTC564ZTkzWxx/xSMns 1xrocHANh6yWWHcDeqFYBh6B6mQGuZBLi98vFtdBbP5nwYmBgX/SA9zADsgw== Received: from [172.18.0.3] (unknown [172.18.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id DBF876913A6; Fri, 27 Feb 2026 16:02:48 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1772200952; b=HLEaegHumBl2spSIunxerNazwTTDcINf/HtI5inTIKkKcQIfHOEnuDby5hOeAwq/VyoFA UWbUkHA38ncR5wRY+V72Wkg4u28dMdDtRiK3EVryYmNalJXj/5twl2Q/gLSL0OCitieWleC DqSpeyU6skmGW8if5kSBYKPqJV8PUyiT7Ypf9j9+Fr0AkqEU1ggMCo8JZjBlb+PW5O5Pnig r5c4jU6rp3EEDXKU8swqrkiZ0oTbjETl6H0qQogIKS8+tSvfWf4hkO1CMIZJHJhlc9gpvaf X7K4ImWQCvtDIlnh1cUOgpgzMUr+7tO/StghcUmHweDFirr0A74rOnFs8E3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1772200952; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=G2WX5ZTIviL1Na+3/nL7tt4m++4/NO6pdLvYNH5LOiU=; b=KfgnRWZJ05mCkmka+8CyMhYRClMpbe1wLTIWDDsM8b4WQ08bY/p9Kty0yaHH6exztchA3 9hym1hzG7L8UWisTduuMIg9rc3tcXPAKNyyuJa0Rnmj9v1ogPf+FZaqO9vzTbl/6zT+7I8d PwzQcf2ZrwKllnXGOt6i6dBSJBP/z81bhufwJfjh5Sa1BXuVo8MxBMSeoxNpHTKrPlbw5vB NtnLYOlbo6Bp/WXvK/TLa37KLRdxzw0xOy4YPCS04SDYD5MyUyJikALAngFHugbo8+cPYsH 2YrNBik4wZs2uSK7f5fM1ElOWa8JOWC+F3sgRxih5+qlm5O2YrN0gsw6pXIg== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1772200934; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=cTpa788m9SMusnvRV8dhZFPSBZU5qXyjGry1881DGwI=; b=ZdfdhJXFth64HwgYfivGvQvf6O4lZPqWcPak1UCpfxxn9c8jzT8OtutaviHgv4J2ljYdX 5+GsK+1loTnQeclLpO7CQ36Uq5SxNjdS6Fzkb+Iz+xZsWSEy+qJj/cFiU7ED9CNUSHhCESB 8CUEaDLAen2AhzkwuMdzw+2cT87aWGs9j1FbaF/PAdZPPXqnNU9kwTt7JJWSHEUYJXzVfhO Z8TiPQQeDTMdCuD8yje/vLopu0G7Afoa8QtJthl9/pvD2lEg3NWe2Zm/Dxtp0COjto+ZOoH DO3fBynu4H8seAPqKLV7jI3DBjLg9tKFtZWV16Y7PxgTBlUJjpuvHRAKx1UA== MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Feb 2026 14:02:14 -0000 Message-ID: <177220093511.25.11819804172800900153@29965ddac10e> Message-ID-Hash: LHJ2ADJ4Q7OQ35FAY77DY5ELL3CTC3XG X-Message-ID-Hash: LHJ2ADJ4Q7OQ35FAY77DY5ELL3CTC3XG X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PR] avformat/mov: IAMF fixes (PR #22310) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: James Almer via ffmpeg-devel Cc: James Almer Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #22310 opened by James Almer (jamrial) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22310 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22310.patch >>From 51aef95ba156b7848eca5445f0f59b091c3b1004 Mon Sep 17 00:00:00 2001 From: James Almer Date: Fri, 27 Feb 2026 10:38:14 -0300 Subject: [PATCH 1/2] avformat/mov: fix setting iamf stream id offsets If we were to add the highest id of a non iamf stream as offset to iamf stream ids, and one of the latter was 0, then an id overlap would ocurr. Signed-off-by: James Almer --- libavformat/mov.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 46dac965a2..09eacb4e89 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -10759,7 +10759,7 @@ static int mov_parse_lcevc_streams(AVFormatContext *s) static void fix_stream_ids(AVFormatContext *s) { - int highest_id = 0; + int highest_id = 0, lowest_iamf_id = INT_MAX; for (int i = 0; i < s->nb_streams; i++) { const AVStream *st = s->streams[i]; @@ -10767,7 +10767,21 @@ static void fix_stream_ids(AVFormatContext *s) if (!sc->iamf) highest_id = FFMAX(highest_id, st->id); } - highest_id += !highest_id; + + for (int i = 0; i < s->nb_stream_groups; i++) { + AVStreamGroup *stg = s->stream_groups[i]; + if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT) + continue; + for (int j = 0; j < stg->nb_streams; j++) { + AVStream *st = stg->streams[j]; + lowest_iamf_id = FFMIN(lowest_iamf_id, st->id); + } + } + + if (highest_id < lowest_iamf_id) + return; + + highest_id += !lowest_iamf_id; for (int i = 0; highest_id > 1 && i < s->nb_stream_groups; i++) { AVStreamGroup *stg = s->stream_groups[i]; if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT) -- 2.52.0 >>From 16ee3d8d99a2f2e83a2559e958e19ede813b29f8 Mon Sep 17 00:00:00 2001 From: James Almer Date: Fri, 27 Feb 2026 10:41:31 -0300 Subject: [PATCH 2/2] avformat/mov: fix cases where we discard iamf packets from enabled streams Given the entire iamf struct is inside a single Track, if the first iamf stream (which is the one sharing the index and id from the Track) was to be disabled, then packets from every iamf stream would be discarded. Fix this by actually going through the entire iamf Sample and discarding those from the disabled streams only. Signed-off-by: James Almer --- libavformat/iamf_reader.c | 3 +++ libavformat/mov.c | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libavformat/iamf_reader.c b/libavformat/iamf_reader.c index 418ab5d1c1..1b963ee311 100644 --- a/libavformat/iamf_reader.c +++ b/libavformat/iamf_reader.c @@ -95,6 +95,9 @@ static int audio_frame_obu(AVFormatContext *s, const IAMFDemuxContext *c, memcpy(side_data, c->recon, c->recon_size); } + if (st->discard == AVDISCARD_ALL) + pkt->flags |= AV_PKT_FLAG_DISCARD; + pkt->stream_index = st->index; return 0; } diff --git a/libavformat/mov.c b/libavformat/mov.c index 09eacb4e89..bc91102c4d 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -11338,7 +11338,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) sample->size = FFMIN(sample->size, (mov->next_root_atom - sample->pos)); } - if (st->discard != AVDISCARD_ALL) { + if (st->discard != AVDISCARD_ALL || sc->iamf) { int64_t ret64 = avio_seek(sc->pb, sample->pos, SEEK_SET); if (ret64 != sample->pos) { av_log(mov->fc, AV_LOG_ERROR, "stream %d, offset 0x%"PRIx64": partial file\n", @@ -11374,6 +11374,12 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) return ret; } size -= ret; + + if (pkt->flags & AV_PKT_FLAG_DISCARD) { + av_packet_unref(pkt); + ret = 0; + continue; + } pkt->pts = pts; pkt->dts = dts; pkt->pos = pos; pkt->flags |= flags; pkt->duration = duration; -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org