From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id E67F8492D6 for ; Tue, 28 Jan 2025 17:32:37 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9CD7E68B972; Tue, 28 Jan 2025 19:32:34 +0200 (EET) Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8053068B887 for ; Tue, 28 Jan 2025 19:32:27 +0200 (EET) Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-21670dce0a7so124667365ad.1 for ; Tue, 28 Jan 2025 09:32:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738085545; x=1738690345; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=N45NYTGaSesYi+P7KrCrIL66jABMTFPCTFPs5GQoVf8=; b=bAMkLomQ99XsNAmzaP+Dzq4Z4oNUTW9vKNg61b7g0/UnAlLpkpSNVyO/FFzBKVBZY+ QmwCAAIcbb0hqzsJHcXPvjEP/iYm3nXKStHMWNoKEi9rCrJnIv0xXpq0tJ9Ucdk1PIj3 PSZtIhpdN/wqVo3KT05S4mM27UC3lurNaIbPPCNNqiq2hZDTBrwlVLblQrGUu9KrFB8G PNl6KZzIrloeH3Vx3MWyIHP7AG3hD6XM6igu/fJ/n0engEZNmEkgvEPi3est9BqCMsaA PS3R+E31NlSmrRWNrw2gTwT8C4xz3xhQnGkH0gnkkjvqFvFtmDx6Nlnq3BwMxG6XdRgm y4xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738085545; x=1738690345; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=N45NYTGaSesYi+P7KrCrIL66jABMTFPCTFPs5GQoVf8=; b=mv5sEmOXvHc+xgruPPL38p18ocIxsCHb2YSrFBLj/XWuavML/QBIx9BEbNaG5uPlhf ed0hroNakpazWM4mKC0uROCL9WaLXCPSax97J4XGyjjF1zqw9Bve4XjGxIBfxVazRlLO 8QQUZ7XvQjHFTjXKIqjX+zz84uLsJZRJ5ldQVArN/23HEyT6BhB8qVvTjtMilvMML7DC wgg/6aZrqYBOEfKzW6VyMRtzfQMJYoarawu/PlvQw53TqzGOdNV+LUQiupsdJm3xm7S/ ZC8pRpjS/nwOUpb73hRVrfeK0anL+A6mCw0345GbLkeKoonqUnaVafyapt5M/1tBeWvF J7HQ== X-Gm-Message-State: AOJu0Yzw/uVTFis+vKEjPJfg46Su/viACYny7+2x2mjzbv5VvPjWEnZk hekjlKnGbYTIotEKvWoJjLvkLPOq59se1TwxVMA1YYKYK6FrCLfWH/uP4A== X-Gm-Gg: ASbGncuesegN0kvXxQ5n+cPwLQ/SgyJH1mom+yMY71R1K1CTCrIJHVZRF2qweMwyDuu Cu1iUT+I0LgXnEh15Rmz0CCRhf1FjhgMAXozuo7IYWbIHe5aknZgc5sVh8R2GzyTPvTPREJjxKl cQILNaYGcWdyKrUv91OEsx2UGlyo81AIlG38CrpHycRDrSM3IIv5WRRMYdCK/UsI2gYEy/sbaSB 1LAxtL2UR1/p1mRQQC0pH0BsrCCLb8yyj/cC4YLxNbU0EPcjOtDfNnEC2tkXr6AHbBbcAR5pirT vgnRyli7dUbDZO0moKUcd7RnXeQbOy1hO6o2 X-Google-Smtp-Source: AGHT+IEEWsfxmmHCfv9HY6mcSWGQr5h5oCfSQy4d8mNsf+1KyQ0dtF6odVHKl3BgeRH/upnaBjiVlg== X-Received: by 2002:a17:902:ea10:b0:216:4e9f:4ec9 with SMTP id d9443c01a7336-21c355c2906mr748409125ad.38.1738085545467; Tue, 28 Jan 2025 09:32:25 -0800 (PST) Received: from kobl184048m.localdomain ([50.35.88.47]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21da3ea4222sm84362045ad.96.2025.01.28.09.32.25 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 28 Jan 2025 09:32:25 -0800 (PST) From: Srikanth Kiran Kotagiri X-Google-Original-From: Srikanth Kiran Kotagiri To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 Jan 2025 09:32:18 -0800 Message-Id: <20250128173218.36879-1-srikantk@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] libavformat/mov.c: fix seek issues for fragmented mp4 files X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Srikanth Kiran Kotagiri Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Srikanth Kiran Kotagiri For Fragmented MP4 files where the audio and video streams are written to seperate fragments, the -ss option will cause the file pointer to be set to the first available fragment. This is due to an interaction in search_frag_timestamp() function and get_frag_time() functions. With this change, we first verify that the fragment does not actually contain the requested fragment before just sending AV_NOPTS_VALUE. --- libavformat/mov.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index c016ce8e41..c50e6ee35b 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -87,6 +87,7 @@ typedef struct MOVParseTableEntry { static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom); static int mov_read_mfra(MOVContext *c, AVIOContext *f); static void mov_free_stream_context(AVFormatContext *s, AVStream *st); +static int mov_switch_root(AVFormatContext *s, int64_t target, int index); static int mov_metadata_track_or_disc_number(MOVContext *c, AVIOContext *pb, unsigned len, const char *key) @@ -1666,6 +1667,7 @@ static int64_t get_frag_time(AVFormatContext *s, AVStream *dst_st, MOVStreamContext *sc = dst_st->priv_data; int64_t timestamp; int i, j; + int stream_present; // If the stream is referenced by any sidx, limit the search // to fragments that referenced this stream in the sidx @@ -1680,6 +1682,27 @@ 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 + 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 ( mov_switch_root(s,-1,index) < 0) + return AV_NOPTS_VALUE; + 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]; -- 2.39.5 (Apple Git-154) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".