From patchwork Tue Apr 17 19:59:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 8480 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.85 with SMTP id c82csp2334758jad; Tue, 17 Apr 2018 13:00:46 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+yEz8dqUDnFLbpeSlEI4FX7/eivOnyFNYDXOw6uOgaSDeHvdsuPlH+P4iniBGectmwxbek X-Received: by 10.223.197.209 with SMTP id v17mr2732864wrg.45.1523995246072; Tue, 17 Apr 2018 13:00:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523995246; cv=none; d=google.com; s=arc-20160816; b=hbFvUUHTHlhMs97dlEYwfV0ugVdmuaIIJ2Fh659V/aNPlCmck1mXQQaB1vXBNYPzGM i5ilV2AuZ5yOb2fjrpOgcJ8/2qg8XSJfa47TZvLZZKAsfJufxYsgO4FeZsKrFe9gj1BX PkXD2pQ4dJsWw72xyBpU/gSceAroW7LB58rSp/ADlR+S+zNzNubthjKKRxgfWTD55CRx 6eQI3j2nyvemhUQabIU4W7lY5MeTT/Ok7MzvctiI46BQ0ZoKETdNUfhnTjqE5d6mizzu MSbPtdHmgTgumM4tCd4QhDW3PnsX3hT9qkEaiK9zSErrZLuvVAojNWv+iEwaN+QnOfML +vPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=jxZmMhXype55soJt0vW0bIIERvMjiO5/d+sjY5qZIp0=; b=HSnYoTbT+NYvmJf8f9u5GiYB9MPs8zis5Y0fP2w7u/sp5x1CJPPQeKzN1wffCMEVqI c2vFN3ApOjq1lDrdakn1v8kTYANj7D3lsYyjnC7svaqlJJxXFr2JOxtUKGh8AiWL249b nD0wjSL8eNv7gwJFMpbSOB61gm5uOcERQ6YYr3N58BqSNZ0OqxRMNvS6Os4qDKsSkbB5 yyj3xK230PGZGS38mvaPvpuWjNLF2uQPfjP6jjYKrW+/DcAHnNMrtVejvb0KdGM/mcfZ 8qJCbrcSAK7pAPs3G6AXcJe0j3/TeLQpxEH+ke56/vpRDpVRG3sA7D3Oriu38wZ+sGog nNDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Ucc1+dJV; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m27si12005926wrm.408.2018.04.17.13.00.45; Tue, 17 Apr 2018 13:00:46 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Ucc1+dJV; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 02FA2689D37; Tue, 17 Apr 2018 23:00:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52FB1680863 for ; Tue, 17 Apr 2018 23:00:10 +0300 (EEST) Received: by mail-wr0-f194.google.com with SMTP id z73so38763551wrb.0 for ; Tue, 17 Apr 2018 13:00:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=uWDgQ8AgAPAl5AC0RNUhECgTOhtwEhNPXQX3R7skJ5o=; b=Ucc1+dJVdhGbhnYJKk7DKFyxZphTGaFCDI0amcO1OZp2osKfvTKRdlfXDWFllXXRjA FNkZ9Hb6nl59muhuozyg1AmQzb/vfM8VeFkpWv24puAlu67jprmvZzgDwNGipL+jt87Q kpbOB3A2FpaWhvZn1C4MmGuajXXM6i5USpHzq2lMg40A1CimUxGQmStHw5RPmHqcksTW yBYrglY0XR2z9QiztsNiw2vOL6vCpqd/6OprYiVTXmQXXb6iB9hPoBOY1kuJd/56olLP Dd6yuewLwjKQ5Zc+SW4viEIUp5KWgJj8WgFcPcOnXhvopjIqhq4fSL/vygE1ZlKoQfkx e8DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=uWDgQ8AgAPAl5AC0RNUhECgTOhtwEhNPXQX3R7skJ5o=; b=AQXEyvvxUclTnk4x5XRGYvDHQ4jN2qP30nAo/PnGacY4lxkrUo6BQEpNR+qACD9eqt IXZszz8Xe9e7zExqC6MDUI+G1/EbLEdiAZHabsHB7Cwt93oXd1SYQYWiATxtfZ2HS+vc qsVLE/fQ/5uxzbMbcxBuMdsJwsmNhc5NWFlpDYCMwTm4feBVf1QwdaJplKaimVAOsGeR 3B+k7nlMkKvFmSggOVhbuODAx6QNARE5M5ldZeDGorZ01iYtSYP5oAxnW6WtKA4OOpwU m34PTZXlWbHrd0p8EManYDPcJuL8z4/EUHcNBY6WC1SuUSOfVy/1ecDTJab7LDU4zWDW SDgQ== X-Gm-Message-State: ALQs6tDYIS/99qOfQADBsCTIYjgo6aSMu0M4G2C2ghzuEfwxRPqp7bIF e1/6xt7sQ3NrDK+OWD5l4f2RB+Bg X-Received: by 10.28.6.14 with SMTP id 14mr1897616wmg.42.1523995236389; Tue, 17 Apr 2018 13:00:36 -0700 (PDT) Received: from vimeo-vm.localdomain ([81.2.156.226]) by smtp.gmail.com with ESMTPSA id u5sm7665760wmd.40.2018.04.17.13.00.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Apr 2018 13:00:35 -0700 (PDT) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Tue, 17 Apr 2018 20:59:48 +0100 Message-Id: <1523995188-52827-1-git-send-email-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 1.8.3.1 Subject: [FFmpeg-devel] [PATCH] mov: Properly abide by the track's media duration X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The track's media duration from the mdhd atom takes precedence over both the stts and elst atom for calculating and setting the track's total duraion. Technically, we shouldn't be using the stts atom at all for calculating stream durations. This fixes incorrect stream and final packet durations on files with edit lists that are longer than the media duration. Signed-off-by: Derek Buitenhuis --- Personally I'd have removed the incorrect setting of the stream duration in the stts reading code... --- libavformat/mov.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 1340bf3..8a8cd6d 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2931,7 +2931,7 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, MOVAtom atom) st->nb_frames= total_sample_count; if (duration) - st->duration= duration; + st->duration= FFMIN(st->duration, duration); sc->track_end = duration; return 0; } @@ -3670,8 +3670,8 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) } } - // Update av stream length - st->duration = edit_list_dts_entry_end - start_dts; + // Update av stream length, if it ends up shorter than the track's media duration + st->duration = FFMIN(st->duration, edit_list_dts_entry_end - start_dts); msc->start_pad = st->skip_samples; // Free the old index and the old CTTS structures