<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <meta name="generator" content="pandoc" />
  <title></title>
  <style type="text/css">code{white-space: pre;}</style>
</head>
<body>
<p>For starters I should have mentioned that the patch which this email is a reply to is a <em>“would be nice to have”</em>, given that we have modules that handle caching - though at a broader spectrum.</p>
<p>It is <em>“would be nice to have”</em> in the sense that having basic block handling in terms of seeking in the core for trivial cases is not exactly complicated, and it can help speed up performance.</p>
<p>On 2016-10-24 02:13, Filip Roséen wrote:</p>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;color:#500050">
<pre><code> If a seek request happens to refer to a position within the already
 read block, simply update the block so that it refers to the desired
 data.

 There is really no need for us to discard the block, only to ask the
 underlying stream to give us a new one (when we have the data we want
 already).</code></pre>
</blockquote>
<p>I forgot to mention that the patch of course does not take backward seeking within the current block into account, mostly because that requires us to store the original value of either <code>p_block->i_buffer</code>, or <code>p_block->p_buffer</code>, somewhere (which I thought would belong in a different patch, starting small - and fixing the other case later).</p>
<p>As a note, one might think that we can just rely on <code>p_block->p_start</code> and <code>p_block->i_size</code>, but there is nothing guaranteeing that there is actually valid data at those locations (which is why we would need to store the original vlaue of <code>p_block->i_buffer</code> or <code>p_block->p_buffer</code>).</p>
<p>Anyhow, I just realized that it’s 3:30am.. so I should probably get me some rest.</p>
<p>Peace,<br />
Filip</p>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;color:#500050">
<pre><code> ---
  src/input/stream.c | 14 ++++++++++++++
  1 file changed, 14 insertions(+)

 diff --git a/src/input/stream.c b/src/input/stream.c
 index 6c614f8..a2ef6b6 100644
 --- a/src/input/stream.c
 +++ b/src/input/stream.c
 @@ -576,6 +576,20 @@ int vlc_stream_Seek(stream_t *s, uint64_t offset)
              return VLC_SUCCESS; /* Nothing to do! */
      }

 +    if( priv->block &&
 +        priv->offset < offset &&
 +        priv->offset + priv->block->i_buffer > offset )
 +    {
 +        /* seeking within current block */
 +        size_t skipped = offset - priv->offset;
 +
 +        priv->block->p_buffer += skipped;
 +        priv->block->i_buffer -= skipped;
 +        priv->offset = offset;
 +
 +        return VLC_SUCCESS;
 +    }
 +
      if (s->pf_seek == NULL)
          return VLC_EGENERIC;

 -- 
 2.10.0
 </code></pre>
</blockquote>
</body>
</html>