From patchwork Sat Sep 22 17:32:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Nagy X-Patchwork-Id: 10449 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:1286:0:0:0:0:0 with SMTP id 6-v6csp777282jap; Sat, 22 Sep 2018 10:32:49 -0700 (PDT) X-Google-Smtp-Source: ACcGV61nk5Qzw2SxcMpqJD996RKU0pJ4pQ4zdcLGfqo3xfHfhLWisYrTGcSM3qvPoXCxgRZwMelu X-Received: by 2002:a5d:634d:: with SMTP id b13-v6mr2513726wrw.163.1537637569029; Sat, 22 Sep 2018 10:32:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537637569; cv=none; d=google.com; s=arc-20160816; b=bM5PpveKClKcq2Wh9XTd2kScL3BHQ76wu1NGp2jBxi4agdhZO28G1ZVgc6o39N+C+0 dehXh/TRR/okikxnii9zAnCf0FBzKQhU5qP5X715KSvnFdMrnfoL41mCPGVG3vxYX/jX r2cUHfQgGGhQN3U/zq4pG6HHOzRUMRMIsAA8K/hQEPXD2kXRV6Ye6VcYbHwA+pY1hkxt lNA0k2AThW6Z0rD0EYlTJGNKu4iHZSY+Huw/836EjL+d4Xhm9zSFJx1xsbE/8Y7s4jYr 5tW0tL6PdBU6bc/dFfhpcPDz4zP31/h7B0Kq1N+aQ4dhksdX5ahuekZ9gqpuYU+FMUS1 DQiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:to:message-id:date:from:in-reply-to:references :mime-version:dkim-signature:delivered-to; bh=QJGUNVHlVTqkvKoqYKjG+0PxdEUBu/bdUo6YzZ6Lxz4=; b=fqQYYCdxyRPYDB2qD6PogbVuY0uYF1xo0nZ4pykFzdhCBugHOj6Dem9KOL5Olehshf Kg0cY89Dqfz6KhbLSGwiDbkl6BcEeAhMVe/rVrGNrL3eK/irjPLk80l8o3rV+DyUEloO LILIxql8mkO7pm/b/syuX8Y8kftMxgKO5O2JBnOGCkR2Z5/GFyuYGDm2IVmTo3AVvY9M bb4f3a013sgeClGI1iZ1YI9CyTFvRFYotf9iU3q0EoZk6y/9h5JD0+Gipv1r+EhkHhFc +iP63AlWlbr9R4k8bGnNgX24MTcIpln+MVY4fvYWJNZHvEVcKalppNtV6NuyiFpT0OCv e+Xw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=YowjbKIP; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r7-v6si8507147wrp.189.2018.09.22.10.32.48; Sat, 22 Sep 2018 10:32:48 -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=@gmail.com header.s=20161025 header.b=YowjbKIP; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9030B68A10B; Sat, 22 Sep 2018 20:32:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f50.google.com (mail-yw1-f50.google.com [209.85.161.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1C61E68077B for ; Sat, 22 Sep 2018 20:32:26 +0300 (EEST) Received: by mail-yw1-f50.google.com with SMTP id 14-v6so6446356ywe.2 for ; Sat, 22 Sep 2018 10:32:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=CuPpj9KU8ex4mdaB5w5TArB3OQzm3WK0wZwGCDIWp64=; b=YowjbKIPK5Iz9FmRerGYjSrlA5ojv6eUKk2mXIZWJxHXINYhRiFddtZdDWZH/F4LyD j2ihZJEnqSV5XRUrFHTheXTt1fG1vPJO7gKjV8MYGSJSjHs/5IkztH3PmfUUDMyhm/jB PV9yeL+7SMfmKe8hfoQDUdoVQiO4GnVF1YX2sdP2fTXxMTh64DQg55kgYq4I9vt8F1kg UicZ+OzZscryhN1fxJdSJh7M85RSLLUHPBQA2HBmAu713uLUzCLBmD80/E9KkX0cY8V/ QO530MXgllslf8zQfpS5vKEvAgqhqFaIUfPu+kqISgvkANgwVFZuKVJioyW5COMCGZU9 txHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=CuPpj9KU8ex4mdaB5w5TArB3OQzm3WK0wZwGCDIWp64=; b=VpIQQ+k2hilRvROwKvL15HKgcraLfOA02DPylON0KDrPrWuuyrEXIg13iRagg11EjF V+jmzLU9Sdai3epLxXqmbVm3YKR9gk7e5pwjW9Z4Km1zmOXP6ncFZhe30TBSgmGvpjoY FPKTt1sMh7nJYSBMTUXHPOZWyc39EhZa9s2xZdSTW0DWx2GQHEiHNoKsvWinjYrbNbhX apY4f3m9nQE6T37GE1zQ+z6BynXTZnnbk3AMF3ivw+vog/XWXSsEitsabNz7qIYP+vO2 SS57IZis4aPK5YGszSzy73N9U8zoxZmqoYkaiSF0l+GPTIOXTaU75sVK1CQCLd7PN1Xu R6xg== X-Gm-Message-State: APzg51BNppewzqNYvDfok4ttQix+ZC2kdFwdEglaki0MvwKxvLSl88Hy Q99NEUkPksHy49Imij3p+xWLEvWpITA78eMt0WBPf+2R X-Received: by 2002:a81:4642:: with SMTP id t63-v6mr10858ywa.441.1537637559750; Sat, 22 Sep 2018 10:32:39 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Robert Nagy Date: Sat, 22 Sep 2018 19:32:28 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] cache: read ahead to avoid excessive small requests 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" diff --git a/libavformat/cache.c b/libavformat/cache.c index 66bbbf54c9..48ff5ab363 100644 --- a/libavformat/cache.c +++ b/libavformat/cache.c @@ -153,6 +153,38 @@ fail: return ret; } +static int cache_read_ahead(URLContext *h) +{ + Context *c= h->priv_data; + int64_t r, read_ahead, pos; + uint8_t buf[32768]; + + pos = c->logical_pos; + read_ahead = c->read_ahead_limit < 0 + ? 512 * 512 + : FFMIN(512 * 512, c->read_ahead_limit); + + while (read_ahead > 0) { + r = ffurl_read(c->inner, buf, FFMIN(read_ahead, sizeof(buf))); + if (r == AVERROR_EOF) { + c->is_true_eof = 1; + av_assert0(c->end >= c->logical_pos); + } + if (r<=0) + break; + c->inner_pos += r; + + add_entry(h, buf, r); + c->logical_pos += r; + c->end = FFMAX(c->end, c->logical_pos); + read_ahead -= r; + } + + c->logical_pos = pos; + + return r < 0 ? r : 0; +} + static int cache_read(URLContext *h, unsigned char *buf, int size) { Context *c= h->priv_data; @@ -215,6 +247,10 @@ static int cache_read(URLContext *h, unsigned char *buf, int size) c->logical_pos += r; c->end = FFMAX(c->end, c->logical_pos); + // Fake filling thread to avoid excessive + // small reads. + cache_read_ahead(h); + return r; }