From patchwork Sun Sep 10 04:45:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "tiejun.peng" X-Patchwork-Id: 5071 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.36.26 with SMTP id f26csp1723456jaa; Sat, 9 Sep 2017 21:46:54 -0700 (PDT) X-Google-Smtp-Source: AOwi7QA7sdjVFYYpr786s9nIVsC7uImmhtrXijTidM1q2p7xhyRQbTZp7ZWJgSUwCLeDYIIn3UMg X-Received: by 10.28.154.19 with SMTP id c19mr942698wme.59.1505018814535; Sat, 09 Sep 2017 21:46:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1505018814; cv=none; d=google.com; s=arc-20160816; b=ILcafdvA12wwS1zfgvjESL3NvfcLRoqbnSRKupQ3g89OLFzytz/8cAqJmdD2fdw4G0 HutSeVZ3FhzscBUz09eeQ1sD4kBtWsxlQGRQPZjZ2mkiGPKY5OqYaOV5PJPKdk6cmYCY WPRdkDZy/mrFmDwoXVr9r3H1RJ7vaelodahKf+VCk0ro+qg5JK8m0/BrmZjWmgnx2beG 58K9dAAG82Ro0a2EIspcmNUDnHdJTrgf6G40I0i3ExlMP5EW0JTIbU3G1HleEmQGrIQG xCDAsvduPeNk/Y2/DAXTo1zDgp0u7hiQ7mYpxPKUd7Mcd5O5G6f4BCw9h5/c/tiJUKUk y+YA== 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:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:date:to:from :dkim-signature:delivered-to:arc-authentication-results; bh=rrALR/VQfkxn6/HtpJDpAFIPoqe4XOY/b86jp+0iE6U=; b=F1TvQ9pT+a5A/LfaQgA8uodQE72TxauEDixSlPeW46HDd7fmF6E5kmUXk4IluZBxaR 92NAy2LMrDvsRZ4Gm/9uqGFjIw/XcN1nbe3jgTP19iuIZGKS7kD3n3GFF0Eus+2sLclG U/yRkzyYMjvzTv9NrNBaWuiNGn7M+m5xG27NInfvDufzLDxzrIO0Jzd3VUoZAANEYzEG KsqaM8nEJj87j1wavZisCjkhjpq6epSXFln1KAJrVOx2csT6QRcGisiBa1mpghQmeLke 6uNTZH++m1lIYZAc9B8Tt/klIw90n9HrWNjcHz1ZEGVmgoam7/x2ZM6kyAyzPgRitqCR tjlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=CrSkvEuq; 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 h142si4724009wma.113.2017.09.09.21.46.53; Sat, 09 Sep 2017 21:46:54 -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=CrSkvEuq; 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 DEBD0689AD0; Sun, 10 Sep 2017 07:46:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtpbg323.qq.com (smtpbg323.qq.com [14.17.32.33]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C6E45680C0B for ; Sun, 10 Sep 2017 07:46:37 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1505018764; bh=ycNaRCTtXe2Snb3s/BeUEbGPUmqsbKAFTGm7+Ls26ME=; h=From:To:Cc:Subject:Date:Message-Id; b=CrSkvEuqo4r0JQ0Et+fDXrTG/TmvEAolZRhI+OXFxrkZE/kud9Bd8ECyMiW+qF3g7 FcylyNKfO//I4kX0dBiU0Hyz0vKKld3kzTO6HvL7dM7yD2i8+HUO0JtSY/7mSFfzuB b6p1UbfV5SzVP7DuA4sPDcOZjL11wnsCikITU3O4= X-QQ-mid: esmtp15t1505018763tan9pkfjh Received: from localhost.localdomain (unknown [223.73.1.80]) by esmtp5.qq.com (ESMTP) with id ; Sun, 10 Sep 2017 12:45:43 +0800 (CST) X-QQ-SSF: C100000000000010F3120F00000000T X-QQ-FEAT: jPIikJM0fyPfaHKia8efn0T00xZqdxbFpJrG67Gu3MrURQHsD8s/OYifLaZTy X3yVha7MIWuqYEPzZqufNpbQlVN6yH/Ni9O2bFSrooa5y6aGVhN5pbcKjIUIiKo/KIXp+mP xmYmMyqZlLm3hTi6zlZJMCq9i9ak8ESXFZoGoP0q+TyTKbEYMu/eqA2BVndy1lzufNZAUm4 wTl13FS957kQOlCbn6zJMXhXwzic7KLt6ycB2sPDWkrvkbcMYdG1DIHFwYI+JksHAzLI7Yd gB0xyQdaHy+o+d X-QQ-GoodBg: 0 From: "tiejun.peng" To: ffmpeg-devel@ffmpeg.org Date: Sun, 10 Sep 2017 12:45:19 +0800 Message-Id: <1505018719-15091-1-git-send-email-tiejun.peng@foxmail.com> X-Mailer: git-send-email 2.7.4 X-QQ-SENDSIZE: 520 Feedback-ID: esmtp:foxmail.com:bgforeign:bgforeign1 X-QQ-Bgrelay: 1 Subject: [FFmpeg-devel] [PATCH] libavformat/avidec: subtitle stream disable some non-interleaved process 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 Cc: "tiejun.peng" MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" non-interleaved process call avio_seek frequently, it will cause some performance issues especially in network play scene, such as http/ftp protocol. Signed-off-by: tiejun.peng --- libavformat/avidec.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index b8a31dc..0220ea1 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -1520,7 +1520,8 @@ resync: } ast->seek_pos= 0; - if (!avi->non_interleaved && st->nb_index_entries>1 && avi->index_loaded>1) { + /* subtitle stream no need the next process, because subtitle's pkt->dts is always 0 */ + if (!avi->non_interleaved && st->nb_index_entries>1 && avi->index_loaded>1 && st->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE) { int64_t dts= av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q); if (avi->dts_max - dts > 2*AV_TIME_BASE) { @@ -1646,6 +1647,10 @@ static int check_stream_max_drift(AVFormatContext *s) AVStream *st = s->streams[i]; AVIStream *ast = st->priv_data; int n = st->nb_index_entries; + /* when stream is subtitle, don't change min_dts, because subtitle stream's dts is always 0 */ + if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) + continue; + while (idx[i] < n && st->index_entries[idx[i]].pos < pos) idx[i]++; if (idx[i] < n) { @@ -1661,6 +1666,10 @@ static int check_stream_max_drift(AVFormatContext *s) AVStream *st = s->streams[i]; AVIStream *ast = st->priv_data; + /* when stream is subtitle, don't change max_dts, because subtitle stream's dts is always 0 */ + if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) + continue; + if (idx[i] && min_dts != INT64_MAX / 2) { int64_t dts; dts = av_rescale_q(st->index_entries[idx[i] - 1].timestamp /