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 AB92F4F53B for ; Fri, 27 Feb 2026 15:25:45 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'tar4Cex21ujUxq6G2EdtN6NO/JF1jpHwxk7kpO3BiPo=', expected b'ST/sMz2qpS9CzvKDveGMB1EWgQUqklq2+YufzCV5DjU=')) 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=1772205930; 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=tar4Cex21ujUxq6G2EdtN6NO/JF1jpHwxk7kpO3BiPo=; b=ZbsqoEn3aWEaFj/6ImpNGgamamm5ydzbJvB1qtm1IrUMazcPtfmgSFb0D/GlPvhmkUclw io+OrcODDqJPxSksCtvn8ZUuSnuQXISEsiJxFBM5a1S/l//FS/IwWw8WFjPhUqpa5bN21yF 0F3jElxSe7DzKYRMFtEA/lWbJHnnqrORmUKFA7LeQSgsRT8oYSvagnXvwUmOLPlFS1bMnHe vtpqWaXhOkCzUAt3A0N9uiHpCpJEuF/ZqIUSv7ZRu4My9o1zdZ8/p3AlUoc9/lxhyJhwUNh SSb/UKlBijAeD885cXzMYCz/HsfanZ8B7sf6En/ceh9PHiG2Qqgf2Vo/lrhQ== Received: from [172.18.0.3] (unknown [172.18.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id CB1D0691384; Fri, 27 Feb 2026 17:25:30 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1772205917; b=TAaK++tTq1+MaHsQr1ApUAO4P8tA1XiyjbnKz/Lw6RDgnUhwajRc7AyOlD5WRxdiEXmB+ ElZDoqjS7tE2Uj9EEycsUbrts/3xyc+paOdkcYupzmdABJyLK7HzjQTsXie3/PDOn4xwloJ lquXichw0bhfuabnZgaGm8AXMN27LjEuO7yQCX528R6u7aEa/ErAcgJRiNLWE6G9ootZ3N4 yTCKI1g7eBymzNnt7RnjVgXRbBA9GP2cXOiq3a58nOD81Y3kzD8Opa7D8PvoBQLi475FCIO gEVwfCl2geYu4cYNwCBnA5hi3sTdAqrsStH62m97aB+C6WJ52Qs8ST+KfXpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1772205917; 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=mas0rQcVbYgp5UVEB70zQGQ4nYojDbrZQlaftpBZCwY=; b=JqZJv1TmPo3jzgVlK9RjvGPbccxkk22aotswKEcjT99NKX6MjKxdyu6GXO6CoALiUnbti ZfRIIlKJh9W14lCO7SwezL0rl0U9B1B3PqQ/e+3UD8jnVORYZGVn4H4DFrfRV0GScH8HrPn hwdXSc6G879A6ycTlbVKBp5VZzBQvfXiktMc7m5E7iiIodYuhK8JSnLraCN5WoKJnLbQJXN BNzVmNiepIr5if6JY+a9C77f0ISx5NVyhputwgy7crsXl+pj33m7EpBEXuIG71armZLpB/C kmaOG3S04Kkm8ca1FDl3aIa1w8wY76JzbActmVt3OTgi5gfDh6lVORAuuSjA== 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=1772205908; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=ST/sMz2qpS9CzvKDveGMB1EWgQUqklq2+YufzCV5DjU=; b=Wo4W1iXA6JHdKTKLYUbs/kMx8n3TuZGwGpczgk3qFrksMSVEh0vdyL3hRWj58laHZdADo GUJs8UMS4RPQon8cRfWjNaNr/flmcGq6Kk2zURa7ryM+wmfBEzgqxaJ1YmPhmrdrnCKbj03 S5JBu7irB/6zn8YKv/QjuuiD+liOUxx0/1sxHGFq2HY04/EVnQPz5OMqerFDr10M9TG69/R aOHlxqaZK1BGMHho8MnTZSNaOeRxrljdcg7O+IYgSb07oNuHLKeTweQ35NqazjPsPWB2Iek y9CRU602k+86DAkW9wN8qzLoLI7x5vWjfJtkIwsChr0TJyMS90OWg10neVAw== MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Feb 2026 15:25:08 -0000 Message-ID: <177220590856.25.16454870749586848962@29965ddac10e> Message-ID-Hash: 4QHIS7P3EAHPFSXX34C2NOK5Z2NABJO3 X-Message-ID-Hash: 4QHIS7P3EAHPFSXX34C2NOK5Z2NABJO3 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] [release/8.0] Backport IAMF in mp4 fixes (PR #22312) 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 #22312 opened by James Almer (jamrial) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22312 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22312.patch >>From 415c801ab54e520524fd3388e5a201cf52dcfc4c 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 (cherry picked from commit 51aef95ba156b7848eca5445f0f59b091c3b1004) --- libavformat/mov.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index f3945c2be2..d722fc3deb 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -10573,7 +10573,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]; @@ -10581,7 +10581,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 f092a66b5ac1d0db12a8cebba7afb2a64558c431 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 (cherry picked from commit 16ee3d8d99a2f2e83a2559e958e19ede813b29f8) --- 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 f7abdf4207..2098f264aa 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 d722fc3deb..49498eda77 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -11153,7 +11153,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", @@ -11189,6 +11189,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