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 BA0124F52E for ; Fri, 27 Feb 2026 15:26:30 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'+4IdGrjOAZym0mZOerJSl8Lc/uvfVlzwulkbSH4eai4=', expected b'3WCukLcdKs1k1pgCrlAddeE4TfjdD4ZVMvmMKSzUzV8=')) 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=1772205962; 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=+4IdGrjOAZym0mZOerJSl8Lc/uvfVlzwulkbSH4eai4=; b=kNuVvLfUg7O4tVjxUTA+yUEwrYnH0pQ002Sod/w7yYj4Y/sbqhsALzsZFoUSr8/ONS3Lb UNpNzlJw9GYpYHy6YlpXH70WMNWen8USwVwG73q7xX9YySOvgtClKp2Y4hM+S29dFzFjb1m xWNE76KORyKPIgai8gZCBi/KOD+RXCLGmENOyK0MpQ8onScvyXoCBByaGWFD3UrnsTNa1b3 McfzE4Yb02vz6L80+LxDlpNL3Z3kpINoduWN7CmBnSe5n4PBlNw0Le7VrXY83z+a68cWM61 hSsD3jpI3BrNwlyYgYwW02her1axW7zXzk9Zgv3gDg4sQBZfXew3A97ERBrw== Received: from [172.18.0.3] (unknown [172.18.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 0202269141B; Fri, 27 Feb 2026 17:26:02 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1772205947; b=k0DaQpDW2KK/3OBvab8LKmkPqAFZqDcyCxBwv0kvbn1wWocP15BsvxQY8qYc880BdqpTL w+dZuqJzxZH95lyy7kX9dDEpiMPKOFBPPE2Pl29xm+Jsn07RRySfzrL4ckJ5/rreVAncjQq 7ej5jrBf8qlSdvozr+Vf+n+WHUmBvSE6QFTt7cb+H5yZnZ+ZyDFBQ3yQrI6bBTvfjNVYj9y OwiFzqzlkLlA/cTeZ3ttkxh1BFOTRcaHQDmIwhNYQf4J02Pi5i1cRYaG0FzP9anTm3hlPf3 NmRkW5MCQDUwXHbSkhNOHXPuj2x3xEYez1bkDx6JYF68ltHtxMSUDJa4sK7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1772205947; 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=tqqx6AK4hRPFSHgRzwNA95PcUh5XfPHAjQemA9HFzoY=; b=Vyv3wQo9k+vU7Ga9Vm9RyThGvlRCdVhpRUAvTWTlzT+XSQeuMNyoHR/zsgHaDM+Fb97ts 8ZpJdDVOvsLcPNeXZqWPUhhTNj81yIGmMhHI2QcC+IWTXI/wCaEEaO0HuwLGYGFzmwk2/se Fdi4knWtzyRKKOP8Vy9Yr0LiwPiiC7eYScs7BhmEHXCLzCPaS1gwOM73q9+dpe26nIKBUf2 YwdjZFLyOh12Ee7dl61jIoctKgFEeHmjAf2bPVT1J4n5+3884Cn4NznqQxW5AeaYfE38bn9 eJNwXmXEIoScUGRW2VolQeWXX8rfh55AEeh/Ic5tyFU/hGmRbmR1eWuMg+qQ== 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=1772205939; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=3WCukLcdKs1k1pgCrlAddeE4TfjdD4ZVMvmMKSzUzV8=; b=ggKrQlIv2ixaIj1VSCrk/o+G2Z84AIsLSTF7lSavnDbKCndDomYUw5EEG2ymV2IJSVv+q WQOzMWjb5e3z1a7kmrIqGs3KUvAMU9h63uyNwTtD7sBh7zMmZ23y5Y72zjLgOSJFmNIOlgG 4yYAjUQOe4ttuHetNsAFyc60RI7nx3V5gWy8UsZqHDjZ/jaOE5vkSI5GzQXCPeuw1UW+xQz i/OYDb8r2ednvsVS+jaH9iu6DL2CAzKJYPvzrjTKT2oXpHulqhMxjdhlGXBvCp0JoqAA3Tv txNW/5b24v01L5dQk0X18pWtO7erDr5UaGYKlgqG+JLO4pNGCdpviGPLe12Q== MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Feb 2026 15:25:35 -0000 Message-ID: <177220593937.25.12681404477821675333@29965ddac10e> Message-ID-Hash: B3VNLGKC2VS3UEQLGNLSBIC3Z4WVH63Y X-Message-ID-Hash: B3VNLGKC2VS3UEQLGNLSBIC3Z4WVH63Y 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/7.1] Backport IAMF in mp4 fixes (PR #22313) 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 #22313 opened by James Almer (jamrial) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22313 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22313.patch >>From 37deee5cab866a6694414524f6ec67cba43fb880 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 7c7aced6ca..6fddce9552 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -10182,7 +10182,7 @@ static AVStream *mov_find_reference_track(AVFormatContext *s, AVStream *st, 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]; @@ -10190,7 +10190,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 654607e18c10fed40e08c143f9dc40a51ecd201c 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 5cbe89ca68..9a8371d9e3 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 6fddce9552..f025487baf 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -10729,7 +10729,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", @@ -10765,6 +10765,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