From patchwork Fri Dec 31 11:36:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 32965 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp13891003iog; Fri, 31 Dec 2021 03:36:57 -0800 (PST) X-Google-Smtp-Source: ABdhPJy/hfCG10gOkxICR6WC46WFsohniIaFiecTNmXCT1zOK69izCnTdFdzQU4OTutk5Laf6yiL X-Received: by 2002:a17:907:90c1:: with SMTP id gk1mr27445475ejb.517.1640950617252; Fri, 31 Dec 2021 03:36:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1640950617; cv=none; d=google.com; s=arc-20160816; b=eUpt4yEaPipS82910thC9ApAJnemABJf8KDqp82hGbfq63LBx9GAJynd1e3sitkkP5 iLgSKo5gKbRfu/yWWs5xKm7XzoEhA2SX9+fmr/TK+AoxwXZ/xymbKluTumShZ4Jel93L CluNERbf72ac8QEgH1jZzh/bGzfc5mAx/B5zEuaJVM+P8LtynCf+AKqHhqZ0QELo3cqq zBwRbYnk2RDCVheDFZEPcNECM2znZAq78CjepTV4fWbpWuML5mDSahxGW01j0SBiKx4o MtKA2+mNzlMmWBTGZL+pgetq0MT110ZcMK82bg3RVn4OLrPRYSHwHhk//IHdGDo7Vx/g /igw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:from:message-id :dkim-signature:delivered-to; bh=CNQG/jUEgUWs5tTik6alEWzaBSKz8uaDCrKgrlRvnpA=; b=Nzvl3O/1Bqkh/5u/EnD93apwx6UZQq1yb3QPFVMHfjFyVuNFNXY7GyaiHDHztYQnvB ykw00VxkNLEHMzb9ofYIh9CFNjwkDc0OYFoK7UUoJwWlaNecgz98niA6qdI9ygw7+674 ak1sWsWsWnlObKA6FiQi+KDujUBV4pHL31TCXCMddfJ6xwcDDCkE2BPDVG90DovUyaLb 94V5CkF6zLSoUEJQAtN1Zzqe/awwnLZwO8DYicI4nC9RKehhdnUwwLlALJMT1t62fyE6 uEslaaMxHytKD+K84lC6D5dCZT7zbUun0/OwTy1nPgFc7Qo7Fa0xSBdKT/4riYuFZ5p7 rz8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="YC//MHtn"; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i26si11724832ejx.436.2021.12.31.03.36.56; Fri, 31 Dec 2021 03:36:57 -0800 (PST) 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=@foxmail.com header.s=s201512 header.b="YC//MHtn"; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C76B868AFCC; Fri, 31 Dec 2021 13:36:27 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-252.mail.qq.com (out162-62-57-252.mail.qq.com [162.62.57.252]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 02C4168AFAA for ; Fri, 31 Dec 2021 13:36:18 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1640950569; bh=U+crNSxTn/L39JrfIcgwcl6mhLIvbvOQLJvmPp0VPxQ=; h=From:To:Cc:Subject:Date; b=YC//MHtn7ldDfSMeFhNZL/rNmpunjvdS8uQUgUiSsuUk0e/pQRe1LKHuIWlO72/Mo YnCDhlXlwp17I4jOzOjUMEjZTChhKlPUvshpV7V1FTJT3ecHSxIjov/4xadrEa798i pPKolhhq2Q3OOMwDZ2LxlbPFyEByDCEj11MxhSjg= Received: from ZHILIZHAO-MB2.tencent.com ([113.108.77.69]) by newxmesmtplogicsvrsza5.qq.com (NewEsmtp) with SMTP id 9089FEB7; Fri, 31 Dec 2021 19:36:08 +0800 X-QQ-mid: xmsmtpt1640950568tm51a3gfk Message-ID: X-QQ-XMAILINFO: MpO6L0LObisWnHIJU+YV+mVDzJzIgNE9BF0W9uxnSlb1lPwWqPGYf/1+IJ1+3P 7NHTTUPUfTckFYq84DpjkqCMY87oMk6gs3cX7VTfsYDN/HN6jGHAS7Sf/7dRYHseyE2bNqw1oVqQ oo/muMJwL7SgDWLCawh9KB76QjjN+1JU7z8tF5mvHkiR4CU3Zim0lGaZTiLoK3mIwtl3UfrA58Nf dPsGuelQC9xZUL7sYfxYYoSilpsj4LwP/GPhLIz5kHkfZhgsOckhVTOV6hbjsIuk3lyfmaJ4kh0v K+JmiTOleiJbjR5TC7i3xj7NczJtku35QY5j82Dm1UvN3n3WsB6C5QKUpSyQkiyYYUwjrYg7IwyY YGLDgBNtnJPdpOg6eaqw0V5D7E1YigU8Nb8nn/9AH2IE/LsNf7PbM/phFJ0rrIvYXa4I820yYs7A 7nKrfTJUQ6OuldUsIzxU6UKW9O333pvVlYOf4dniApV4B0ZAjcEPHIjndiZ834SeH1CIpbGMRt1z 8OUdgL9oT2XqV4uXnWHyhPDSLhD92ijNo9GrJTiV1fZNt1ia3L8uWueXGSJPdrPX1JWeSTTqv7H7 UA9QgqGd2dLm1y81Y3cFqg7Akzfma1rOMzmCwSsvuAzr3lZ4QHglNki16vrpyqk9zeCdv3axjdim Dg/tyhJeCF6q6VU/oDdiB/Eispygr/cqZvmCzZsMwrDdREmegMfHIRmQDtEfLV0adippDK8pyGHa 6usBFguMf2oge8xEXTx5JhO1U5vXy++M2DgrrdeoJD+UrXtdGkJgB52IFuKCuiQOeMMRu+ARblAR rjX63RwSOaToio2hOUmo9x/b4lOYSfc/kWa98v3N1YEpNGJnGlbR+s2Wjs4x9B8yI= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 31 Dec 2021 19:36:07 +0800 X-OQ-MSGID: <20211231113610.85358-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/4] avformat/movenc: fix assert failure in get_cluster_duration() 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: xmz7TQNPXFr9 When editlist is disabled, the workaournd method of shift dts to zero and increase the first sample duration doesn't work if the timestamp is larger than mp4 spec restriction (e.g., sample_delta in stts entry). Further more, it triggers get_cluster_duration() assert failure. This patch will drop large offsets between multiple tracks. --- libavformat/movenc.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 0f912dd012..f5bb785b01 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -5917,7 +5917,18 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) * to signal the difference in starting time without an edit list. * Thus move the timestamp for this first sample to 0, increasing * its duration instead. */ - trk->cluster[trk->entry].dts = trk->start_dts = 0; + if (pkt->dts + pkt->duration <= INT32_MAX) { + trk->cluster[trk->entry].dts = trk->start_dts = 0; + } else { + /* Impossible to write a sample duration >= UINT32_MAX. + * Use INT32_MAX as a tight restriction. + */ + trk->start_dts = pkt->dts; + av_log(s, AV_LOG_WARNING, + "Track %d starts with a nonzero dts %" PRId64 + " which will be shifted to zero\n", + pkt->stream_index, pkt->dts); + } } if (trk->start_dts == AV_NOPTS_VALUE) { trk->start_dts = pkt->dts;