From patchwork Wed Jul 6 06:59:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 36691 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b27:b0:88:1bbf:7fd2 with SMTP id l39csp3985960pzh; Wed, 6 Jul 2022 00:00:19 -0700 (PDT) X-Google-Smtp-Source: AGRyM1u8kedwFesOfSSUTLXiYEDbUeQIXboQdwact2drx3BwDhVAnV1TTroxc9WYo+zQ3/NM9Ah9 X-Received: by 2002:a17:907:7b84:b0:726:c8a0:c9e7 with SMTP id ne4-20020a1709077b8400b00726c8a0c9e7mr36686668ejc.375.1657090818847; Wed, 06 Jul 2022 00:00:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657090818; cv=none; d=google.com; s=arc-20160816; b=lhevl3VDptkBkDrty//T5VmF6ZOCV3Qgu+xQhcMn7Y7RXBDDMrdnmnU8qbsfEXjbt9 TZeqJeloVtW4eY6ysR8Gz8V/vDcF1RfvyWv1hg6LVx7OKrPJb1Jvi4qemeqi9jSaSkxF Y71l2Y86/9Ntgh1l9yXMswNdNB0IyJ5loDzhWkBp3rPIRfcyDAZ1kxnYuaLEA8HHr7zS UtQ/gb4tkYZu3CVIIwHepRHXsv3eMF/4x/+Yjzy7oEp40QTLJ64XEtxwvazTN6gi0Wbt i9oGMgGv/KXNePiHZtk9uvFqqkCInDMOn+o6iMLfh7MkX9syErV8jN0UKxQZHp9RKv7G 8nww== 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=anouXph+FBbBkmLjLoSD9QBraeuENY00NCcb6zhjpL4=; b=ORsyuoQNeTlb2Mm+cTVjwWMIHH9KccIpTHt0Gz0bBFX+tevNZbM5oGmF77UvtpxTGa kVGbe3wcUZ2kNcvDmAWkg4dmrusb1szkpsIoSjMb8ktqjX3Kcy4Ya98lGLkXWBkgcSgx s2pvt3e2iz1JW83cfG7sdg4RiEGmLs7XKemx3amG3C1HrbpM1e42CEmKkhGYtO0cTAft OCde50uFwLHLjOLmP/QXtXJxMWw+W7+gh2qwHBWBdY8fpoRC+f/EfmQBu/q6H+Lk2Z6m NbxHJFXVXaDQORjXd/pvpccFQwE5vyyN8QxcCd32BVefxhaaT85ujitl30Yb6Yl8WmAr aZsQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=GGgwlnCT; 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 he15-20020a1709073d8f00b00726508419d9si29572551ejc.929.2022.07.06.00.00.16; Wed, 06 Jul 2022 00:00:18 -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=@foxmail.com header.s=s201512 header.b=GGgwlnCT; 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 7E8E468BA52; Wed, 6 Jul 2022 10:00:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4675C68B867 for ; Wed, 6 Jul 2022 10:00:04 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1657090796; bh=sbMh406oqq+NW1gvyaTjuzdMFuzUHoOtC3w+fgscLes=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=GGgwlnCT+JERCZIqa1YnyVvTmu6ycAz0CI0jU5cg+uIcHpnjBCqvAZwetz0L1+coL FiTkkwD9xvOInfbuf2ZQ3w6jB8w61aOa/zWyXni143L6o2ItAkVxzI1vbIHgF3Y3Wy 8CX3I0jL+vh3NzMjUxg6Rej38B8Kb2Y8OxXeVees= Received: from ZHILIZHAO-MB2.tencent.com ([113.108.77.70]) by newxmesmtplogicsvrszc10.qq.com (NewEsmtp) with SMTP id EF63C6CB; Wed, 06 Jul 2022 14:59:54 +0800 X-QQ-mid: xmsmtpt1657090794tkveurmfq Message-ID: X-QQ-XMAILINFO: OUMxvQDaATieyxshVKgV88Sr99vBIHRxYkB3+tMlpkyxN4E1hgTxUNxSPzp57p WHhGoL22FYGvFQhGY+KqHT0fJsZz3AXAXHPmPj0D5QPzKM/qAV3RSc4zwRkzifM3KuOv+RQzeC4a tvrXD/Qzk05b5RrgY8F05M1eQ8TKfQEa4QhUbgInNBJTkee0Zlvr+V/BzVWLB0hWgJmHrqrE7xdQ qFqNbw79T2G0NffwtQWBffNZinfwLH+qp0o9RCSQyYPE8S4lKHpz3ooJcFVCk82ibU74KQMHKTd3 B8sUt51SQjS7aSRNC/07EOfJTokhMxwDn1KsEBy4Gk34ncpvg9Err+EmxKYQ0082N/zcwGR6IBKE 5HxA65AgbothrVXI+KEb3tubKgIUt/ecX3DrmuYDSROHQ6illrlpUH9iKRMk8Ixse0TxoCRUJ2pq FGOLDojjFWtOammtSL/BFOR62kxpAMH/ySs6fq9JlVQHZx61Gv002nc7DLcDeoqLsfjnC+2QGMyF SuTTb4djgilrW6dU6EiNOhHs2tvI4VTIBnWyvCTnNjyZuzHr33yJweYxlPXtRwcgSxU82OqVWXaL w78ODcHSqyBsMr64z9sxkfYWelOUt0t2elJSj0v0T4zxTEdx8miF4A9pRGlJ1NK486iAeVA+WxW/ R7BmWAGMLsKsLrfrmTYuw3iY4M4gmrISFrqG2GG9nLg0sVpbF0y4RJyw19dIOl4WB3Tw4PtjgTJs 70Yc4NF4rl/+6tVIlRc1xnFo6ehFDP2J4jkzJij9RzG6dS+21SGjzo3gCN0GFI+a/uTzjeZkBZIR lnVbXK67I4RmI6vyUmVwW/0aRbpc9i5EkdWPZvQS51ppi9tqRW525ZAQ+2NaXEZSfMyss6yAIA/c 8u2onsp5bNKOL7zS09gapnKK72hEdu2HLcxPhTdIYQ3ipXbERryM9kS7KZuXBpn4nlSXR6M5842X p1D+mPKx7S6OGlsBidlA== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Jul 2022 14:59:44 +0800 X-OQ-MSGID: <20220706065944.18019-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <807fffd6-8a8f-e8db-43f2-a3a0c447dbd9@gyani.pro> References: <807fffd6-8a8f-e8db-43f2-a3a0c447dbd9@gyani.pro> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avformat/mov: discard data streams with all zero sample_delta 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: fsC2P3ulI1TA From: Zhao Zhili Streams with all zero sample_delta in 'stts' have all zero dts. They have higher chance be chose by mov_find_next_sample(), which leads to seek again and again. For example, GoPro created a 'GoPro SOS' stream: Stream #0:4[0x5](eng): Data: none (fdsc / 0x63736466), 13 kb/s (default) Metadata: creation_time : 2022-06-21T08:49:19.000000Z handler_name : GoPro SOS With 'ffprobe -show_frames http://example.com/gopro.mp4', ffprobe blocks until all samples in 'GoPro SOS' stream are consumed first. Signed-off-by: Zhao Zhili --- v2: suggest how to override discard flag in log message. libavformat/mov.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index 88669faa70..a3e4f05481 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -3062,6 +3062,21 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, MOVAtom atom) st->nb_frames= total_sample_count; if (duration) st->duration= FFMIN(st->duration, duration); + + // All samples have zero duration. They have higher chance be chose by + // mov_find_next_sample, which leads to seek again and again. + // + // It's AVERROR_INVALIDDATA actually, but such files exist in the wild. + // So only mark data stream as discarded for safety. + if (!duration && sc->stts_count && + st->codecpar->codec_type == AVMEDIA_TYPE_DATA) { + av_log(c->fc, AV_LOG_WARNING, + "All samples in data stream index:id [%d:%d] have zero " + "duration, stream set to be discarded by default. Override " + "using AVStream->discard or -discard for ffmpeg\n", + st->index, st->id); + st->discard = AVDISCARD_ALL; + } sc->track_end = duration; return 0; }