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; From patchwork Fri Dec 31 11:36:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 32964 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp13890914iog; Fri, 31 Dec 2021 03:36:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJxGBNiRCDZaSQhAZpBRAVzkBy3XuS7ttOcAgdvRBhgs3TEQfjulwmEvUVDsorMThoLn/GMi X-Received: by 2002:a17:906:7c7:: with SMTP id m7mr28128104ejc.49.1640950608215; Fri, 31 Dec 2021 03:36:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1640950608; cv=none; d=google.com; s=arc-20160816; b=ExgVAGMK29Ncd5na62cfET84t1DtLikGkEMzgE6OO3sOg/lxniVKTikATgTtLmiZfS y1Ui1iSHNMKzre5PSby56sZ1MaNjGeXzjtOTS7nYYWZAr+Y2AT4YFXGDDHuC2IqVd20V VuyP1qT8r9HZXXd2r/bRcVZo1v1We/0Inv3WDhyjuToo4MjDbU2WxvdRnajW2qXbEaNd tylM+32V1MEf9i0JwICYRq4SdycTfnW3dkfo3iPpLI5QBqPQSpC4O5mt6iafI9JGpD6p 5r3FbwNrzlcryxt295qPdFZfbP9Kdo0hP3Q9h0SDR/+nwCfY1erwmA+LalOKIYrHkyMR 5V1g== 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:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=Bnz3jlW6P9QJTtPsey4c1PYBgw2A+B5kjrbMo57pv2I=; b=ZZA8g9sXxJR6jSftOQ6NnTMW4Vo3uqfGD9pdRXYHNnbtpu7CPPRM0GIwXiZb6//u39 WFz8d6T/RaN6LdvrzKtCPZx8k5fpANBcDLGWbvWiWjB2mVITvGm50+NI/23nejqwbE/Q +4ySOQY6X4Twj0bacbo89jt7qeB6tH1VHwSiMc3gFUTyesM+bNkwX9IB2YkqKISp5Q/5 RxV0NB1tlrf1HQuneCRx7J/6apyZKAah1EzKlMlO8xzNNgn/X8k4bjFXk2jRIMhR+wvl vbKyrdaqDwHb4k7TNTGAftaKbnnrU5agp/jX7OrodgKBZ3IZK1eey/VgTu8LMMlIeN5W trAw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=jGFzFeky; 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 m13si9579735edq.512.2021.12.31.03.36.47; Fri, 31 Dec 2021 03:36:48 -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=jGFzFeky; 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 A974068B01D; Fri, 31 Dec 2021 13:36:26 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-190.mail.qq.com (out203-205-221-190.mail.qq.com [203.205.221.190]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2D6F268A8FD for ; Fri, 31 Dec 2021 13:36:15 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1640950570; bh=SJTKUSVehm7iRXQ5DpmqfwzjOYXi+S6b6dvWKe9K6CA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=jGFzFekyv/DBRr67fWqLHCigqK+WlP4cnLDrCPRkjNifcUUuDtG96pncDDiHEgM5K 1RU3TYwJDrj2ORpEn0+LYM+dbf0Wu5OUJ3Pa9/F3Rq03Ak2Z23nNesNqRTciUhJhvl IIQ+VaQ9NcdWAOv3iw0HNGCSA/ZXRw7ce1a6yVLY= 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: xmsmtpt1640950569t4916s8wj Message-ID: X-QQ-XMAILINFO: N6qfSVgljG6XtE5f5yltuUdNm+TtxVoVNJ3Dlf10sNZp4mE6lBfxYizsscFAvO GLTwxTpBHxViw7mgqs9xXNQyFaMoT6JO7GNBnFJp0zCRmCHf2Iv8QgR3eZ9tmAQ05XkoNPw1uSGS Hq6QufIcJuaIZ1Nnyej9lbca4E6jOsZSGPqh5dzQhXgAY8qQpE5OiW6ryH3XZ6RUgusJcVfEUXi3 DfMDsb6DoR/4njtVcJgK3rMjEKgp8mFpVKNX/Up3sIWsOyuqzf6ogRRA8Z27wNPKfiOI6SoC04bo vuqzQ6mcz0VE8d8R0T7XA8OdheCXmfsaLkvsJMJaGwDe3B72L/aWtBVIbXiUSZxTSEPKhpWM2Kmh qxtW2/7Kyy5kLs94gUavXq5P+RnX3MaSb82wn6alzsFiFFEy3UPMFr/ujueuLaBYa2428RVkOKa5 fDdJBjYc6zTO0ZTz+da55g/VDDHZNckdHLM1V5FzvneUWHui4CONyBqYplwrxyNA6z7XhWnJO4v/ Lh3J256aAVBNfSZWD8ejcMCqLwKSkOCX3TuCTMoy4+LtUDoeqtMcVHff2PsnJz5m5E15QCalJwbl BjJHjW0pnNWqpSNcfcSJ3j/BiGw0uae6AbFLjIlipBmPQpFqCNhVkbgXVp9PVr5hd8owzdPS2Pxu NmslhbjiV/TeatgsIqAbAl/e7mx7SD0rzMb4AN9q4ejw7ZJSy0uifSxDbvf9OJS6EuXp1CDQuyDa LhQ6djLib0FDSGPU8wjusAGMQNNQOzk/q9lB3AEK1/dfKC3RzO4HEr5ZLarTM71ti0JTki5MiYfj 9rvPD2HcugojYSW32PDrFlq/t5OTP4LE1cFsxON7SkFE/Rrg/KwUW5lbzX1Bgqg9mCzLhTDIa8pQ == From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 31 Dec 2021 19:36:08 +0800 X-OQ-MSGID: <20211231113610.85358-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211231113610.85358-1-quinkblack@foxmail.com> References: <20211231113610.85358-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 2/4] avformat/movenc: add missing timestamp check when peek from interleave queues 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: Cv3yovqGSU0w --- libavformat/movenc.c | 80 +++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index f5bb785b01..9b3bd99e97 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -5403,6 +5403,45 @@ static int mov_write_squashed_packets(AVFormatContext *s) return 0; } +static int check_pkt_time(AVFormatContext *s, int stream_index, + int64_t *pkt_pts, int64_t *pkt_dts, + int64_t *pkt_duration) { + MOVMuxContext *mov = s->priv_data; + MOVTrack *trk = &mov->tracks[stream_index]; + int64_t ref; + uint64_t duration; + + if (trk->entry) { + ref = trk->cluster[trk->entry - 1].dts; + } else if ( trk->start_dts != AV_NOPTS_VALUE + && !trk->frag_discont) { + ref = trk->start_dts + trk->track_duration; + } else + ref = *pkt_dts; // Skip tests for the first packet + + if (trk->dts_shift != AV_NOPTS_VALUE) { + /* With negative CTS offsets we have set an offset to the DTS, + * reverse this for the check. */ + ref -= trk->dts_shift; + } + + duration = *pkt_dts - ref; + if (*pkt_dts < ref || duration >= INT_MAX) { + av_log(s, AV_LOG_ERROR, "Application provided duration: %"PRId64" / timestamp: %"PRId64" is out of range for mov/mp4 format\n", + duration, *pkt_dts + ); + + *pkt_dts = ref + 1; + *pkt_pts = AV_NOPTS_VALUE; + } + + if (*pkt_duration < 0 || *pkt_duration > INT_MAX) { + av_log(s, AV_LOG_ERROR, "Application provided duration: %"PRId64" is invalid\n", *pkt_duration); + return AVERROR(EINVAL); + } + return 0; +} + static int mov_flush_fragment(AVFormatContext *s, int force) { MOVMuxContext *mov = s->priv_data; @@ -5429,12 +5468,15 @@ static int mov_flush_fragment(AVFormatContext *s, int force) if (!track->end_reliable) { const AVPacket *pkt = ff_interleaved_peek(s, i); if (pkt) { - int64_t offset, dts, pts; + int64_t offset, dts, pts, duration; ff_get_muxer_ts_offset(s, i, &offset); pts = pkt->pts + offset; dts = pkt->dts + offset; + duration = pkt->duration; if (track->dts_shift != AV_NOPTS_VALUE) dts += track->dts_shift; + if (check_pkt_time(s, pkt->stream_index, &pts, &dts, &duration)) + continue; track->track_duration = dts - track->start_dts; if (pts != AV_NOPTS_VALUE) track->end_pts = pts; @@ -5627,40 +5669,8 @@ static int mov_auto_flush_fragment(AVFormatContext *s, int force) static int check_pkt(AVFormatContext *s, AVPacket *pkt) { - MOVMuxContext *mov = s->priv_data; - MOVTrack *trk = &mov->tracks[pkt->stream_index]; - int64_t ref; - uint64_t duration; - - if (trk->entry) { - ref = trk->cluster[trk->entry - 1].dts; - } else if ( trk->start_dts != AV_NOPTS_VALUE - && !trk->frag_discont) { - ref = trk->start_dts + trk->track_duration; - } else - ref = pkt->dts; // Skip tests for the first packet - - if (trk->dts_shift != AV_NOPTS_VALUE) { - /* With negative CTS offsets we have set an offset to the DTS, - * reverse this for the check. */ - ref -= trk->dts_shift; - } - - duration = pkt->dts - ref; - if (pkt->dts < ref || duration >= INT_MAX) { - av_log(s, AV_LOG_ERROR, "Application provided duration: %"PRId64" / timestamp: %"PRId64" is out of range for mov/mp4 format\n", - duration, pkt->dts - ); - - pkt->dts = ref + 1; - pkt->pts = AV_NOPTS_VALUE; - } - - if (pkt->duration < 0 || pkt->duration > INT_MAX) { - av_log(s, AV_LOG_ERROR, "Application provided duration: %"PRId64" is invalid\n", pkt->duration); - return AVERROR(EINVAL); - } - return 0; + return check_pkt_time(s, pkt->stream_index, &pkt->pts, &pkt->dts, + &pkt->duration); } int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) From patchwork Fri Dec 31 11:36:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 32962 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp13890742iog; Fri, 31 Dec 2021 03:36:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJxOJzfaGWf2h1ItXE6wSlfjmecmp28ZVoJKY3nofyf5WZmSqFrhvUgxVQ6BMpUOIM4uW/hx X-Received: by 2002:a17:906:dc94:: with SMTP id cs20mr27336759ejc.316.1640950588618; Fri, 31 Dec 2021 03:36:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1640950588; cv=none; d=google.com; s=arc-20160816; b=Kern1oiWo44N94jyVqLDctN8LM1TSPSF4qorCb8ttBZh6smwsbnqYPlKZbcAqoE1BB lkI2o4bAMN6UlgrYVkYAv4RIWFO4LODeRTfT0YGifaJS5fRqIEYOQBFL5VKyhMDEHIcT g3MR407EC4qJBmXAnSGo7SnVg6DZmDmE82hCZIO+nag4EeVmyC7DNvJv7jP0UeaGaG1n 1UoNMPylK8NGPHcHCxQZN7CeMr/WK5N7GdmgnIvQD6rrGrDvcnKaoVJ/CDR64VidF1Ik D9Ie5eK+kAgiqOWyfNpd2q6+GiLR1IVfApIpV7xkihxzU3H4C540OBw8BJXBDX40rUKT Xgpw== 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:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=iNype+BI1M3k4dg5tJLZWu4LXhal9XRBX9HHHcLFkNo=; b=L7j7ewMeDS86u08ypBaiKP9Oaw+M9eUjyyfln68I9/YK7manMhPBUtMZCwoj7rd38Y iEHlgNlFkCeymm1BCuYz5sW15J5fHYmXbT7NFfLQc8e6yyyG/B5s70rKFItmh3uHvut7 ui5+p7tyD477+xJQuYh+GfJ9Zgfr8ah09ySM5cfcTs0v9wj5dBxtzx342qFxylKmk+I7 4DLg9efs6wiElHM3rIWtn4c48T6eAgEKsA1MjCgpRw/sllXamG7KyMTX72tHxlsVcWwh vgq7C6udcgieVzS4hG/5maLLXATTkLceTT/l+ZsPt+NTKBXqI0hNR+WCPr+iUirzLMz6 MB7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=HtOcFRJw; 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 d20si13510331edz.619.2021.12.31.03.36.28; Fri, 31 Dec 2021 03:36:28 -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=HtOcFRJw; 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 4E15A68B008; Fri, 31 Dec 2021 13:36:24 +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 2B0AA68A8F5 for ; Fri, 31 Dec 2021 13:36:14 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1640950571; bh=KUpr7ouQB4tBLTUWMdyxWj3KssVUQuqY3gd+XYMvEo8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=HtOcFRJwJ+z1Kvr32KprbtkyiGg9DOzgkevnDrEOaIgu+FUnWJZU38bfw6z+WhReq e3I7qqMbKKX0xyIyKmbMm6DSVPftQQmF18Iuqkg31kZJZ4XUNyS/8KmB1Hd5QTnVYH 1eL7cNJk3yvcwK1pNDkCsOhILrCudILdHfxXCx1w= 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: xmsmtpt1640950570t1oob1r97 Message-ID: X-QQ-XMAILINFO: MX+1SEN3H+wAOKqLoJljE3mC1C4TNxFrJSYVgy0UK04slCjK3BGk8eFHaglFJJ Y/I9RgBMh07tdESqURGYEQnEvunE7aedgwVIUSsii/VPnQf1xha9uxb7bcu0JZnw6306EcSMIozd LH5fCQqJGJK/G98I5roXqDDWwk5Uu1mSC8FQnvoUGUO3JHl7iqmKiENiGc+YIJCvuv6PuaGSIMEJ Fmjz9/DhmosxIsKuJhFSm9/CghbPQWYMXoEG0lQhDlWa6iEf6sdzWLDqkmogzI+sbWJl6iDx4sGO vp4wjdAwxrewzDuvJj1pql7v229/sUJn8QcyhDPXXzwPvT+QiE0NELj4kXVS+PsHRvnGKvxj4uHq h5QGQsLWTmZbQhPoBa6XXLHnraQfUoYGmcm0oOPPqBi+z8AxtPk1K3Dt3YIXOeNrK9uZ7bbjiqHR iDtp28MTbDkganCrcaFGUXOJv1FLwUJtDI4OjKTy312EUA2bx9F4rgjutZBfb5siMgYHwwyPhCZW Lu+c5HLSK4QMdefjE08+FajKXyVEBibQFCwRkBWi3C5nzagS8tjoswQ8fJ6Ior4IjcGP42i3vDkt wANwU1HPwlJr0pJYaZghZTJ3rEQ9mFIy9sclIw6a6OXipi0aIhXAbHwOW6XTeh4+AZLHb7o3wYSO 0tCT/iqDAuKYrrlpBhiSXXwEGE7u60HGUrfcguVrlBCvTD6Tew5lNwuCr0a7h4h3CYOgvyEoehhy J6keqwaZPuYFtFn6eXxCS/a9N/us6t4m9qMTl3WxigOSgze/5Ya4LhODxQc9Qn2YyckMdo08wN20 WMg5fI0A/c57SxjHFHGUN+M6hMHDoZZtwsQSAPRLsfyw8txNps/WpNZPUnX9qVmLI= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 31 Dec 2021 19:36:09 +0800 X-OQ-MSGID: <20211231113610.85358-3-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211231113610.85358-1-quinkblack@foxmail.com> References: <20211231113610.85358-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 3/4] avformat/movenc: check track start_dts before use it 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: kqQKicxo4sAV --- libavformat/movenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 9b3bd99e97..faae684fdb 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -5465,7 +5465,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force) // tracks may need to be filled in. for (i = 0; i < s->nb_streams; i++) { MOVTrack *track = &mov->tracks[i]; - if (!track->end_reliable) { + if (!track->end_reliable && track->start_dts != AV_NOPTS_VALUE) { const AVPacket *pkt = ff_interleaved_peek(s, i); if (pkt) { int64_t offset, dts, pts, duration; From patchwork Fri Dec 31 11:36: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: 32963 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp13890840iog; Fri, 31 Dec 2021 03:36:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJw+6MtoSEI12Lu6lFiNH0s2d73stKLS4mSMd2ovsdqlFYJz0jz1tdBzQP0sULQBGRbII3X2 X-Received: by 2002:a50:9d48:: with SMTP id j8mr34949134edk.192.1640950599574; Fri, 31 Dec 2021 03:36:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1640950599; cv=none; d=google.com; s=arc-20160816; b=CO3jKtB9+GuGko7aMkSV6G4mcAJscOIVspm5NfLZskaf5wvPlQwNYWyCg1VQXQ7grG hEUuNbcxuwMU1Y9rZwICMvGOyJWbemOyIUUXrSer6yrkjPLb84PcNK/7h+hPn9WZoANN z5bU+qCvhtnJg3cEde3y1by2M2jrL/8WQluWQY9nJOiBrk5UFZ5IEWoVgBdY2dGPmjHN r6nQdYz45LR8mVq6zZxNKwXhBLrR9rPwljlcVC9Knn1smojbM0Hf7lw8n18t3seWnTwu hnM4OW7C+WzVfNOVNGZIhS5XnSSqd4/SG3PFSlljr6JsPMwKQsWRlVfdsfXv0yrd4g8e IUIA== 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:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=G+p2MTkxSF/KUb3HFZJRKMrzJ4sxYUFOTJjRVydyOr8=; b=MnHkIwDCvIfhWE3vTF8qdK90ngA7PAfnts3azS/No6aMQb9SsuSgrz1yXJCrhk3ON+ CYj1ZGE+hWkVrmY4zH35Wa83kmOuVkdtOF59osQxycDpzNCxVTMOtAw+ffV1mb2TjH2A 18Bj7Np/xg3SF5IegbZlojD7ZGrY95RCzO2z6qtcgWccPo7EoRtL20OCTV+taWY+/UA9 CWOJBl6lAtRFeH7Rm3qxpqw8Oz3OwGUVt1DcmwLT1ugZWqWQUq9gG60zarkuKvzmax06 c+zV9qE2eZvL2Row8OSkxPR6+zjKdO+KFJ3QfmSLYXnRMN6Djm8g0cf0mrAyxjFr8mm0 CZDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=A12De5YD; 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 gn22si15028034ejc.845.2021.12.31.03.36.39; Fri, 31 Dec 2021 03:36:39 -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=A12De5YD; 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 5F10768B012; Fri, 31 Dec 2021 13:36:25 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-251-27.mail.qq.com (out203-205-251-27.mail.qq.com [203.205.251.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 306D368AFAA for ; Fri, 31 Dec 2021 13:36:14 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1640950571; bh=ttNiJALYmnX83gSR6vaqmzhI4CHuI9pKcT8TzSkK0cA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=A12De5YDuzMLBBJTB+YqSgqWzuAiBYE2p9em6U+zHdo6NA5z9BsufO+xA6pCEAZqO Qhs/sCdeMHfryz3AOH4p/nUnVek42+pIfDXHwn3+yxdkVr4sjbbD+mlX1xczfyOd8k VRPfS2DgY01WaX2z6vo6wma28VTwyAI3qsw8iaZ0= 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: xmsmtpt1640950570thxhwynb7 Message-ID: X-QQ-XMAILINFO: NDRjUSQj2Mff24k5zUIN9p9yJItpgnOASIK1i0p3R1H1N6tvlVlZo1v8Eh+1RM 9dsp3ucfAn2nt3GpUTOX+puzRxlv74Lk+pz9PAeD6hiDmqBJzyocq8BtEppQeqOug18EUrnpvLqb M2i7wqQqC66PAKyDPgGVNVCe1bB8Gm5YIabY7qz1Y6tPOLk+Ls3QQvcjOHfYqRgqmdr/rD7M/qoR nDFz2xuyvN7wDJaZ/ugONC6WyCSbpaaOyQDacMxoqv7IKgDKc+wl8tQyPsdKuIe4yRpIlgaKqyED Z90S9HJrVXamjt51UqiXJ9jLX916cEp4TpI3zthT/wdjPhFVPknR0Hie2+jRUYc6JRFBo0S3TnKf vU5L64BfzNyB2mfbZzHgx8JpxUYbRJ5u5g7+8U4pJ0GRwwPa2FGEB8mqobvOE75YAGGaLORSOcfv 84jPxp62PWAjWp68VMUt1+YCmi/R75ZTlehojHEjp72bpunX/osZe8I7BVStarYRfWX2NWdqjkrs gklO0wWmhQriO4YgaSI1USvXQnr2ENam3l1Sg2Ctsvr9careQdajtwQPjzN6rht/JLzE1EIwnMN+ 1uDy7vjPWdIBoKXOf7ED6qqVocYpgF45fFl3NCkzJJl+HsGh7Wd2V5P7n5ZmJkArxulFlpDjdbZj OL+NSrXLMnNnFsceJCjqGHj/px9QfYVlB2s+56HJup44R2IKffAh1YJtQKcX77LHesa/pjKvanYJ a3PSahyc45/t+dZlFr9vF2qevfkYTBhtmw0pqUdJ1r/ujthQxnrMYPQkqkv4dllMi+zGgMXulsRC 2+Z775y+Wj85uFMp/zuHiCcFcIB0pICs1JuEpj2xPE8GmOkYlJlz/umLW/APiTCNZDI05EC3SLzg == From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 31 Dec 2021 19:36:10 +0800 X-OQ-MSGID: <20211231113610.85358-4-quinkblack@foxmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211231113610.85358-1-quinkblack@foxmail.com> References: <20211231113610.85358-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 4/4] avformat/tests/movenc: test dealing with abnormal timestamp 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: hTXuXge+bpmp --- libavformat/tests/movenc.c | 30 +++++++++++++++++++++++++++++- tests/ref/fate/movenc | 14 ++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/libavformat/tests/movenc.c b/libavformat/tests/movenc.c index 2af72f11c7..79de20ee75 100644 --- a/libavformat/tests/movenc.c +++ b/libavformat/tests/movenc.c @@ -248,11 +248,14 @@ static void init(int bf, int audio_preroll) static void mux_frames(int n, int c) { int end_frames = frames + n; + int has_audio = 0; while (1) { uint8_t pktdata[8] = { 0 }; av_packet_unref(pkt); - if (av_compare_ts(audio_dts, audio_st->time_base, video_dts, video_st->time_base) < 0) { + if (av_compare_ts(audio_dts, audio_st->time_base, video_dts, video_st->time_base) < 0 || + (frames == end_frames && !has_audio)) { + has_audio = 1; pkt->dts = pkt->pts = audio_dts; pkt->stream_index = 1; pkt->duration = audio_duration; @@ -787,6 +790,31 @@ int main(int argc, char **argv) finish(); close_out(); + // Abnormal difference of timestamp between two streams. + do_interleave = 1; + init_out("streams-timestamp-offset"); + av_dict_set(&opts, "movflags", "frag_keyframe+empty_moov", 0); + av_dict_set(&opts, "frag_duration", "650000", 0); + init_fps(0, 0, 30); + audio_dts = INT_MAX - audio_duration / 2; + mux_gops(1); + finish(); + close_out(); + do_interleave = 0; + + // Abnormal timestamp jump. + do_interleave = 1; + init_out("streams-timestamp-jump"); + av_dict_set(&opts, "movflags", "frag_keyframe+empty_moov", 0); + av_dict_set(&opts, "frag_duration", "650000", 0); + init_fps(0, 0, 30); + mux_gops(1); + audio_dts = (int64_t)(INT_MAX) * 3 / 2; + mux_gops(1); + finish(); + close_out(); + do_interleave = 0; + av_free(md5); av_packet_free(&pkt); diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc index 81ea75f372..a5614f49a7 100644 --- a/tests/ref/fate/movenc +++ b/tests/ref/fate/movenc @@ -151,3 +151,17 @@ write_data len 900, time 0, type sync atom moof write_data len 908, time 1000000, type sync atom moof write_data len 148, time nopts, type trailer atom - 3be575022e446855bca1e45b7942cc0c 3115 empty-moov-neg-cts +write_data len 36, time nopts, type header atom ftyp +write_data len 1123, time nopts, type header atom - +write_data len 280, time 0, type sync atom moof +write_data len 288, time 666667, type boundary atom moof +write_data len 129, time nopts, type trailer atom - +60d2f9877f29bd154b0047dfbca8e36a 1856 streams-timestamp-offset +write_data len 36, time nopts, type header atom ftyp +write_data len 1123, time nopts, type header atom - +write_data len 588, time 0, type sync atom moof +write_data len 472, time 666667, type boundary atom moof +write_data len 280, time 1000000, type sync atom moof +write_data len 288, time 1666667, type boundary atom moof +write_data len 205, time nopts, type trailer atom - +15951eb265243ad827446117f3a24099 2992 streams-timestamp-jump