From patchwork Thu Sep 17 10:31:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 22455 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 26F5F44B783 for ; Thu, 17 Sep 2020 13:31:25 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 018E668BAFD; Thu, 17 Sep 2020 13:31:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5EDD468B942 for ; Thu, 17 Sep 2020 13:31:18 +0300 (EEST) Received: by mail-wm1-f68.google.com with SMTP id w2so1457573wmi.1 for ; Thu, 17 Sep 2020 03:31:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=Plaq4eFIpeMYW66oLxa83B2hlC50e/Yai/mOkUrIXOU=; b=eoS5hsW8l11Vid+dif13numrykzfyPDTnNTz4Cyg4dVcRlyO1CtxJyKIGg7R0fy/wK MXJXSwnxY9DYObKQ7cSVl0VGqfet9WCYPllQev86h697cASIO2W8KGO8jW435w5X7QF+ nG5cCUCjZpp93xmR1b7zrl3APGNDLqnhWGcagQOV401VisBq39d0x6Wpa0iW/XAGcTyp NOW0kPa43uiYfO/J+y/E8jFgGQN2KZObP/u4e2Rt/DeXg/Ijjr7na5jiOKtjxUVANR7i oZ+3Ovek2zANIJ0KL0PDoFBnsoRficL7nyXAqwREtdS6EVmWWPpmpiUjkv3twPdx6rf9 7vVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=Plaq4eFIpeMYW66oLxa83B2hlC50e/Yai/mOkUrIXOU=; b=gJF9yULnK61RYZyBGRY/qxF8n9sihRagjMngrb7f50bqUqH1s8pEPvMqNxlQssIiB3 Ns9jFT5kqdJtmuqJd4dKtNl599ISKhTB9G2GuMEFFgvCIrof5T074mPTiqCz9x6EcYoV HitYF0rLjxkZ6wXXKGgfAlibyvY7j/laM4vb8UnEr1rN7SZZx2BvWyvyEqhgStJJ/215 1vmJkf5bAWYzsOR1/0RiTcaq28qKuq0pTsBe4LU80H67rpGSC1SA7iWfbuSUINSBrsXC 0W23BPPpxnBCn4ErT2rl94LzFN1wRILBSIb9JKRoSRJjy3FGVfDxZwa+GLvVabnWoBEb iwJg== X-Gm-Message-State: AOAM533PXDAf1wODNxSCj18LPh/thVqxyXpg3BO82UaB8imylyWL61LG 4lndrWaqOSy1OzE0Bds5gX/to/7tdDpxpw== X-Google-Smtp-Source: ABdhPJzzoYGtpPC31RYtIfRql7j+TCipQUPZUmsV1SKXMtcoU94UOzy7XLK4vXxa5KAfybSnwbaxvA== X-Received: by 2002:a7b:c1d3:: with SMTP id a19mr8998461wmj.19.1600338677474; Thu, 17 Sep 2020 03:31:17 -0700 (PDT) Received: from localhost.localdomain ([94.250.162.52]) by smtp.gmail.com with ESMTPSA id f14sm1755379wrt.53.2020.09.17.03.31.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2020 03:31:16 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Thu, 17 Sep 2020 12:31:06 +0200 Message-Id: <20200917103106.29078-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avformat/aviobuf: fix broken logic in ffio_ensure_seekback() 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This removes big CPU overhead for demuxing chained ogg streams. Signed-off-by: Paul B Mahol --- libavformat/aviobuf.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index a77517d712..ce9b7d59c9 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -996,20 +996,20 @@ int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size) uint8_t *buffer; int max_buffer_size = s->max_packet_size ? s->max_packet_size : IO_BUFFER_SIZE; - int filled = s->buf_end - s->buffer; ptrdiff_t checksum_ptr_offset = s->checksum_ptr ? s->checksum_ptr - s->buffer : -1; - buf_size += s->buf_ptr - s->buffer + max_buffer_size; - - if (buf_size < filled || s->seekable || !s->read_packet) + if (buf_size <= s->buffer_size || s->seekable || !s->read_packet) return 0; + buf_size += s->buffer_size; + buf_size = FFMAX(buf_size, max_buffer_size); + av_assert0(!s->write_flag); buffer = av_malloc(buf_size); if (!buffer) return AVERROR(ENOMEM); - memcpy(buffer, s->buffer, filled); + memcpy(buffer, s->buffer, s->buffer_size); av_free(s->buffer); s->buf_ptr = buffer + (s->buf_ptr - s->buffer); s->buf_end = buffer + (s->buf_end - s->buffer);