From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id A965A447ED for ; Sun, 25 Sep 2022 04:30:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 76FE268BB5A; Sun, 25 Sep 2022 07:30:27 +0300 (EEST) Received: from out203-205-221-221.mail.qq.com (out203-205-221-221.mail.qq.com [203.205.221.221]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6523268BB37 for ; Sun, 25 Sep 2022 07:30:20 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1664080217; bh=axzCXBRZ8EHSxqrLo8uaJEjPF8LegGjru/xaYclDDBg=; h=From:To:Cc:Subject:Date; b=XxC8RnMHRwMfijUk9Gg7vH21JNBumrezTtxjR/UXp089W2l3vKI3jYLyTUbKHqWg1 u2ZHyAkzfPTGmYN3DrFaVXdXet2/HN/GqtMJ6dfkDkDxJrD559e+YaNRW8fsT6kFCg PrPsmbLSDffwCgbkGy7LB2Oh5voxiWW0dHB/hTN4= Received: from localhost.localdomain ([121.35.186.57]) by newxmesmtplogicsvrsza9.qq.com (NewEsmtp) with SMTP id 7462EC45; Sun, 25 Sep 2022 12:29:06 +0800 X-QQ-mid: xmsmtpt1664080146toexdyyvk Message-ID: X-QQ-XMAILINFO: NUygYfydBsqcS0wtvuPO2wQM5bep4Uajud8nscwdjeXN0/2d0GNMxDSiDNtAoO 1G8ze+tuGSSLpq1T6wrOCRyNhRpY0WIperzndi46qPnGwMQLbI9DU5dOzjHui340yFursEjNPZyV jw+x3EyXoo7dI4DN/oW/aIOzSGnlMARuYM8QYhQFx0ZYjvTe/G/NTYPKPjBFPZjm6tIuO2+wlkzB tm9c78ZEY10Z6Ox8Y57+ypzCKJ4UXZx3Cd+tyI6unoCXGyaqUQIzaa9ElDz9n+3z37oq3WuSWkHr u6svAi7MyiCjIAIe2Op+Ka8JWuUpcdhtTTFrVtDUnRjqbDl66cSaHYUoHvGkkOhsoZXUrq+/9/up xuOVkrM5Jdn2DE2uV2yUM5xu/nPIKiOy6K6kYp3sXmtf2rKCa71bCwgKvnXp6SXtZN5mCNObMQq+ 0rRveTDrvnT7+uF9GICNwoaynpcD0EoW/LQZcJOLxynHS+xAcQWl1lGca5M062i4lQSwbW1ZAsuD zhKGVjdAG4vwpXgopGIRIJsQXUVxlcXi2WZZO8FCesVd9R/BnZREqGyy+ihLf+eQuyh+vLg4bJBQ 6QQ8N1FsOc9oAGPOyr9mk6kxhgLHLUyYTz+aHoziPenQUNdAICuApZS71CVAOLT/QZRd4WU+1BKV R1ecjhpX6dc30Pl/gRXEeR3P8azoT88nBMvdgljwgij7DKEpawaJHXhtV0PrGfa6nhXEWYex2eo1 I8FtO2iCDq5gNhzX2yIwqefYusEWUHHMwMMdtuiWA8eZsOgiTmdjGMpMrKpOT7QgoA27Ckz5yjii BwaqeGBTBQlIMa9Pr1Xnqd069ZDB364jQbLcBry0MuuvhA3RPLShUhQgEZyspi8Sm/VDCFg+dduD qgXZgVbiqITGmzcW1as84fHZOnsojjhE4teJbhKkA5OJej7xrH8FXNGedGNgxWKLsOq2QTBFh6qn sEXMcHB6bG7asRjpNMuA== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 25 Sep 2022 12:28:40 +0800 X-OQ-MSGID: <20220925042841.522188-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/mp3dec: avoid seek back and forth 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Zhao Zhili avio_seek() is called inside check(). Seeking to 'off' then seeking to 'off + i' is unefficient, and it can loop 64 * 1024 times in the worst case. When probe a malformed file over HTTP, it looks like stucked forvever. ffio_ensure_seekback() doesn't solve the issue when the stream is seekable but slow. --- libavformat/mp3dec.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c index 458d6dbd03..a9e494452d 100644 --- a/libavformat/mp3dec.c +++ b/libavformat/mp3dec.c @@ -408,18 +408,11 @@ static int mp3_read_header(AVFormatContext *s) ffio_ensure_seekback(s->pb, i + 1024 + 4); frame_size = check(s->pb, off + i, &header); if (frame_size > 0) { - ret = avio_seek(s->pb, off, SEEK_SET); - if (ret < 0) - return ret; ffio_ensure_seekback(s->pb, i + 1024 + frame_size + 4); ret = check(s->pb, off + i + frame_size, &header2); if (ret >= 0 && (header & MP3_MASK) == (header2 & MP3_MASK)) { - av_log(s, i > 0 ? AV_LOG_INFO : AV_LOG_VERBOSE, "Skipping %d bytes of junk at %"PRId64".\n", i, off); - ret = avio_seek(s->pb, off + i, SEEK_SET); - if (ret < 0) - return ret; break; } else if (ret == CHECK_SEEK_FAILED) { av_log(s, AV_LOG_ERROR, "Invalid frame size (%d): Could not seek to %"PRId64".\n", frame_size, off + i + frame_size); @@ -429,10 +422,15 @@ static int mp3_read_header(AVFormatContext *s) av_log(s, AV_LOG_ERROR, "Failed to read frame size: Could not seek to %"PRId64".\n", (int64_t) (i + 1024 + frame_size + 4)); return AVERROR(EINVAL); } + } + if (i == 64 * 1024) { ret = avio_seek(s->pb, off, SEEK_SET); - if (ret < 0) - return ret; + } else { + av_log(s, i > 0 ? AV_LOG_INFO : AV_LOG_VERBOSE, "Skipping %d bytes of junk at %"PRId64".\n", i, off); + ret = avio_seek(s->pb, off + i, SEEK_SET); } + if (ret < 0) + return ret; off = avio_tell(s->pb); // the seek index is relative to the end of the xing vbr headers -- 2.25.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".