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 B7EE94DC53 for ; Fri, 2 Jan 2026 20:12:03 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'B+Q/+0t0TmbsGzV07pGgBRF3XCl2idW2/1WISpwvph8=', expected b'/YdtZVCdRuTrupPEKFduUG4gkaMp66sxUAI9r/GXpao=')) 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=1767384714; 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=B+Q/+0t0TmbsGzV07pGgBRF3XCl2idW2/1WISpwvph8=; b=vRrdBaBXpBLKtlTJiAAjoCU/1Ak7IWnlfG+dKejXFNf+7UYM6kqBgeiDczFubSHvxSu/v yIa854gjOGA6Azxncu+ChLRWwu59m/4IMdU2tAOLjM5nkcRIkpYeYof/9uPX7/flBMs4EKs P4Jd02KiDDqSUn1t4Z2BgcGHofYnvwoA3fOffoKHaTHF7bnfafJh96O22Jl99URzZd2aZTA LhawEsZIz/eECkdvmHPKAR7m8zLdy5f1AlPd5h4AvHCvJgFXl8ZbiHe5lI7V9F1nPp4aXnd vSlznvn9kZLLLZ0z62uvFyFTwRS2PzUYIAPvyBIzdw17jEMHe8F3u1OCayEw== Received: from [172.20.0.4] (unknown [172.20.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 439E5690D54; Fri, 2 Jan 2026 22:11:54 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1767384697; b=pzCK6/4njrOy60BuscCk/v1kaghSrI1Ma03wkJtEaSlHIWB5ScUgk9SYKlHzlezc0A2p5 M6H2ACAz+HeI2LJGsEoxe4nc7g8qwB684RGVaSDpuoDd2Fc2STp1ZzBKp2vXQ+0oeHhQJ0q 5KFq3293zzGW7Gl0lep3xCDNbTcBvkR6RNHQShJXKTl2jBVMhirnqaU/r5Gl2Zg2Ty1hWxE gavXMJyLs/9mZqhuQYmnljkLLgYMqaHRuBK2JQT17WkfTOicALqKeEMU144ZeFYwvQgaH/l Fbt+ak1108AGKv1h9jdQsDwNH8n6c2tZ/5bhwnk/LkaL4BQsWKyChTGFn2dA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1767384697; 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=LU0YG+MDOt14wEa6DhKYTl6tQgdk4Lcn3rJWz0U2s4k=; b=QJFEK7KNIJaMlLqcmTORpyV+BD0F2dLa3tu7VcPsY8MDouETQ2iDo38vME4EiHqfjPKR6 JAdHhkVhX5Ht/koQeCV7ytGcPgW9Z6OgP6uBw5R3iPiG/t/AToKVjb7OU2+wGhmGXScjZWr EjcOlLpWYl0OEs6e86UlHYnrH0Cnk9OGcBHoZmuEIepmsEX58sITQdx8teKTj+fxGRxqb0m rzQNvuWip/gATWjJxRS00Vo03oYH2yxQY+ZfZtmL3Lcyowew//JxZNVoW6PUZSv+was62x1 KHmHWG5piczWpYv9xvd+Dcq37agaAwe1jEVRQvRu/4J9Zny5aQ4wi7wsCFzw== 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=1767384689; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=/YdtZVCdRuTrupPEKFduUG4gkaMp66sxUAI9r/GXpao=; b=4gj0+9PfShCeGjIpTt/C5jdEs+tqn7yvyBggP0+msboJ1XaFJ+xETJ1E57QBQk2Y3I53q WhAQRNzk3mxj1bdY6R+MX0lwJdeaWs7+v998NsAtsoyzAEc9RnrslGbTBSnaYwdUrsiNctd ZIcAlZGn9TB4SYFkmUwy/VOGGbfqfYpEFrY1lpAvYBkDmE1yYVHX+8Gp/cOkDsaaq/Zd/U6 JJUORPhfxxSr1Awzb2XbEuPDpOy7GHtj+CTgDeDPz57cXADc7GY0XmQN9f1kZcbUKYNsIV0 hO+v30xXW+z3bfRcOdvLh/0lbDkNdOMC2I+Pk79Jqpb8OL5BcgnlYQSh/Mmg== Received: from de3a2b3407a2 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 52B9A690CDB for ; Fri, 2 Jan 2026 22:11:29 +0200 (EET) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Fri, 02 Jan 2026 20:11:29 -0000 Message-ID: <176738468950.25.2180570751360007369@4457048688e7> Message-ID-Hash: SHAE277JLVF2QHILYVDNZAGWXNXDUZ4W X-Message-ID-Hash: SHAE277JLVF2QHILYVDNZAGWXNXDUZ4W 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] libavformat/mov.c: Fix seek in fragmented mp4 files where the audio and video streams are written to seperate fragments (PR #21363) 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: toots via ffmpeg-devel Cc: toots Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #21363 opened by toots URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21363 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21363.patch >>From 7ec826f46ffba3a0ad8952642a0d995b9d8e2e49 Mon Sep 17 00:00:00 2001 From: Romain Beauxis Date: Fri, 2 Jan 2026 14:09:54 -0600 Subject: [PATCH] libavformat/mov.c: Fix seek in fragmented mp4 files where the audio and video streams are written to seperate fragments --- libavformat/mov.c | 13 +++++++++++++ tests/fate/mpeg4.mak | 6 ++++++ tests/ref/fate/mpeg4-fragmented-seek | 6 ++++++ 3 files changed, 25 insertions(+) create mode 100644 tests/ref/fate/mpeg4-fragmented-seek diff --git a/libavformat/mov.c b/libavformat/mov.c index 009ddfec80..71ecb2f19d 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1728,6 +1728,19 @@ static int64_t get_frag_time(AVFormatContext *s, AVStream *dst_st, return frag_stream_info->sidx_pts; } + // Check if the requested stream is present in the fragment with valid timing + int stream_present = 0; + for (i = 0; i < frag_index->item[index].nb_stream_info; i++) { + if (dst_st->id != frag_index->item[index].stream_info[i].id) + continue; + if (get_stream_info_time(&frag_index->item[index].stream_info[i]) != AV_NOPTS_VALUE) { + stream_present = 1; + break; + } + } + if (!stream_present) + return AV_NOPTS_VALUE; + for (i = 0; i < frag_index->item[index].nb_stream_info; i++) { AVStream *frag_stream = NULL; frag_stream_info = &frag_index->item[index].stream_info[i]; diff --git a/tests/fate/mpeg4.mak b/tests/fate/mpeg4.mak index d6cce97a70..c914f61731 100644 --- a/tests/fate/mpeg4.mak +++ b/tests/fate/mpeg4.mak @@ -21,5 +21,11 @@ fate-m4v: CMD = framecrc -flags +bitexact -idct simple -i $(TARGET_SAMPLES)/ FATE_MPEG4-$(call FRAMECRC, M4V, MPEG4, MPEG4VIDEO_PARSER FPS_FILTER) += fate-m4v-cfr fate-m4v-cfr: CMD = framecrc -flags +bitexact -idct simple -i $(TARGET_SAMPLES)/mpeg4/demo.m4v -vf fps=5 +# Test seeking in fragmented MP4 with separate audio/video fragments +# Seeks to 1.04s and extracts 1 frame - should land on I-frame at 1.0s with fix, +# lands at start (0s) without fix due to get_frag_time() bug +FATE_MPEG4-$(call FRAMECRC, MOV, H264, AAC_DECODER) += fate-mpeg4-fragmented-seek +fate-mpeg4-fragmented-seek: CMD = framecrc -use_mfra_for pts -ss 1.04 -copyts -noaccurate_seek -i $(TARGET_SAMPLES)/mpeg4/fragmented.mp4 -frames:v 1 -an + FATE_SAMPLES_AVCONV += $(FATE_MPEG4-yes) fate-mpeg4: $(FATE_MPEG4-yes) diff --git a/tests/ref/fate/mpeg4-fragmented-seek b/tests/ref/fate/mpeg4-fragmented-seek new file mode 100644 index 0000000000..5204e169aa --- /dev/null +++ b/tests/ref/fate/mpeg4-fragmented-seek @@ -0,0 +1,6 @@ +#tb 0: 1/25 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 320x240 +#sar 0: 1/1 +0, 25, 25, 1, 115200, 0x19fdc3e8 -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org