From patchwork Fri Dec 17 10:24:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 32681 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp1399208iog; Fri, 17 Dec 2021 02:25:04 -0800 (PST) X-Google-Smtp-Source: ABdhPJxGGXdDR3PrGMxVybj78DU7dqcWkUdon7GpSY9fApk4LUe3Uhlma9ozA8TzNwX7EbvFquzO X-Received: by 2002:a05:6402:2026:: with SMTP id ay6mr2171134edb.202.1639736704635; Fri, 17 Dec 2021 02:25:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639736704; cv=none; d=google.com; s=arc-20160816; b=z8V5T8Rp2lhNdFu9YVJBAICzoLBTyIIzlviK/mxyDWzCvWmPZ3nfiOtp5QkUuQPbTP ORRcvMvSg0t3A5lA7G+XSgCIzMRF4aLINaSQ3Piby2IkGsO3+z7Mo/s5K341PbF+PVgh JyR00W4FaTm/ZLhlzP6L/9UCFKBapVxhElzNjCIdUf2MREZTJDcr8kbau2j3JepdsMvn 9k4jQRg2Gb9WaEpp3CQ1tSbUj1ez5aadkiB0d7SG1M0IRRdfCPGClewCYOBs+NJUOknB fAptQejxJSWr1NyhSlHNOwE8TYNnj1rS1InTQxI3W3sIrTccLbezWzprF4t7Rdn4pWsO r4KQ== 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=ZK4u+L7IRuy7woWewVjBcuomfF0zB3LDFGIv1KHqpyk=; b=qg/PPLqAjP9mp6lBCBR/iRmiPQI0ftQ9I6zrGetdVMsRdl+fivkFMYPQIx5IW1HY17 FSW1HOojMTM1ujskR4o2iUQe9n1t7uvJFJV5SqUtQXmQVNiuBrZlh0X4Tip6c/Ca9eZc ArC8/Hdvo3H41gU+7PHMmwIwcRrbXSRgnRL7KTfNDhthLOzK4ZDwMbytcOGiXv//4mZx RECdhdkM0gT42DWPGP79IuTrjujnpJYNxFNvrXzp95FMTAOleZrvLH7uOFDRIgYx8ce0 A7NB2rjL2vtVVMcQrz+/ggCcLr3nf2hm+l7EyJFNDA6ujgeZnHksaw0gXDpjaUISgMmQ Cd/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=xrRggkBX; 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 di11si4750945ejc.132.2021.12.17.02.25.03; Fri, 17 Dec 2021 02:25:04 -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=xrRggkBX; 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 14A4068A83D; Fri, 17 Dec 2021 12:24:59 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-251-53.mail.qq.com (out203-205-251-53.mail.qq.com [203.205.251.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 250AF68A2B2 for ; Fri, 17 Dec 2021 12:24:50 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1639736685; bh=GiVdHfCXcvjALhL/3N4G1xIy29G3xirrLB4DRUjlfQc=; h=From:To:Cc:Subject:Date; b=xrRggkBX/6wDJ65SHbe1gkSaWZB8lL4KNqe00wir6EXcMcc6lrHVCHkjbgy0ZKy6X r3fKBTrHZ7YNzTTmy7XTBqa6mDyRpy6SyAgUzrTuS7M4K3vUZx3XyB2YtRJEW6pEqy iwPt2tAsfewAZAPSsuTTBK8/jtFGi63o2tTwmFEQ= Received: from ZHILIZHAO-MB2.tencent.com ([113.108.77.58]) by newxmesmtplogicsvrszc11.qq.com (NewEsmtp) with SMTP id 60919CC0; Fri, 17 Dec 2021 18:24:09 +0800 X-QQ-mid: xmsmtpt1639736649tywqsk7wg Message-ID: X-QQ-XMAILINFO: OGCswexgy68R0pHFqsEvWCrbQctzrks9/JzuKxwN21Fn3rNe+W2qkIezlR1VRJ gfQaYd3SaRDJ/8zOLBBkFnvvf2GRyg83mdh0bNK61y0CzxVqZ7037nHoXEjUIosatqxnSnkvHDPw WV+vv/r/QBYpnxfY/7CfqKsPnHhqmS/zTBU47pTTcKwRmQ1Vvd6fMcGhIBYu7GnZODLH3mGQjuHn DrJqBlgBHTKRYxYh7SV8pIuZf3S8cubomrPd9eFv1D/anyds5rTYwWemTznpGkrpLd36H9Wyh5Eb 7LrbQpAylsx4ewUp8o0RIxvyWfM8prfUVG+YRdV2DifZ5gVWStc5uA2iE0XAwz/MaEoeGGdY3L5D a3MQMaBn9UXnpGJeZI9zY3MdulrGghOoWHydzMNYsh+e3DrXwHNMajZgtptK7B4CIlL2GbFE/MvU +v0qc77H+ENooHsdK1I/E5wR8VieyP1Ygu9bVk6HNeclC/XigPSDDrqNn50JBswZfu6FkzS4rTeM Gyh2nvOv6xPJnGZSDKFZdXJEIgpkogEGJfTJmJ5FPzQZcde3oB7CU2OzT3+oIIwOI5azEOZ7LWOk aXBu2MFMrsIqKBZFQUBbwrSmv+I7IO1CSPhmQhok/fVJjGsP459ufZV7DIoI0igLSs/OTRg/7691 hF5rz8yZRCoImd9u0iKJc3izNb0cIC5DLaB6knx3HGQyuPNVh7E8DCADPGlekY7i7Mg1ZH7K4wYg PkyZkiN8yLNGZvBuKkKpKtRYyYex+8HRBZSnG9h7uuMGXPn7KSI6AoCRa3nUKbij2QbtBe2Q4QRR 1ApbjOWCkRnIoCQexNY0IabvOp8QkMoEmnBmmwpg+BVUjs6y+f1Ay1FxSkm9EE2gYVvZb2rzs48g == From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 17 Dec 2021 18:24:10 +0800 X-OQ-MSGID: <20211217102410.3570-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] 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: DGftqMYNFs7r 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..dd92c0f26d 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 < 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;