From 312151bb9af62a29429821e13871311f670e9d5a Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Fri, 26 Dec 2014 01:23:54 +0100
Subject: [PATCH] avformat/cache: avoid lseek() on reading from the cache if
 possible

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
---
 libavformat/cache.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libavformat/cache.c b/libavformat/cache.c
index 9a0c4bba038..f1e623a04d6 100644
--- a/libavformat/cache.c
+++ b/libavformat/cache.c
@@ -156,8 +156,12 @@ static int cache_read(URLContext *h, unsigned char *buf, int size)
         av_assert0(entry->logical_pos <= c->logical_pos);
         if (in_block_pos < entry->size) {
             int64_t physical_target = entry->physical_pos + in_block_pos;
-            //FIXME avoid seek if unneeded
-            r = lseek(c->fd, physical_target, SEEK_SET);
+
+            if (c->cache_pos != physical_target) {
+                r = lseek(c->fd, physical_target, SEEK_SET);
+            } else
+                r = c->cache_pos;
+
             if (r >= 0) {
                 c->cache_pos = r;
                 r = read(c->fd, buf, FFMIN(size, entry->size - in_block_pos));
-- 
GitLab