<div dir="ltr">I'm writing an element which is supposed to act much like a GstFileSrc but reads the file over a TCP socket with HTS protocol. The documentation for GstBaseSrc's 'fill' pure virtual method is very brief and I'm not really sure how to handle the offset parameter.<div><br></div><div>I looked at <a href="https://gitlab.freedesktop.org/gstreamer/gstreamer/blob/master/plugins/elements/gstfilesrc.c">gstfilesrc.c</a>'s implementation, but I'm still a bit puzzled, because of the way it handles the special value of -1 (GST_BUFFER_OFFSET_NONE). When performing the actual read it simply reads from the file's current position. But the debugging message doesn't handle this special case:</div><div><span class="gmail-n"><br></span></div><div>    <span class="gmail-n"> <font face="monospace"> GST_LOG_OBJECT </font></span><font face="monospace"><span class="gmail-p">(</span><span class="gmail-n">src</span><span class="gmail-p">,</span> <span class="gmail-s">"Reading %d bytes at offset 0x%"</span> <span class="gmail-n">G_GINT64_MODIFIER</span> <span class="gmail-s">"x"</span><span class="gmail-p">,</span></font></div><div><font face="monospace"><span class="gmail-n" style="">      to_read</span><span class="gmail-p" style="">,</span> <span class="gmail-n" style="">offset</span> <span class="gmail-o" style="">+</span> <span class="gmail-n" style="">bytes_read</span><span class="gmail-p" style="">);</span></font></div><div><font face="monospace" size="1"><span class="gmail-p"><br></span></font></div>So if it doesn't manage to get all the requested bytes in a single r<font face="monospace">ead()</font> and has to loop with <font face="monospace">bytes_read</font> non-zero, the offset shown in the message won't really make sense. Then, after reading the data, it does much the same thing again for the end offset:<div><span class="gmail-n"><br></span></div><div><span class="gmail-n">  <font face="monospace">GST_BUFFER_OFFSET</font></span><font face="monospace"> <span class="gmail-p">(</span><span class="gmail-n">buf</span><span class="gmail-p">)</span> <span class="gmail-o">=</span> <span class="gmail-n">offset</span><span class="gmail-p">;</span></font></div><div><font face="monospace"><span class="gmail-n"> GST_BUFFER_OFFSET_END</span> <span class="gmail-p">(</span><span class="gmail-n">buf</span><span class="gmail-p">)</span> <span class="gmail-o">=</span> <span class="gmail-n">offset</span> <span class="gmail-o">+</span> <span class="gmail-n">bytes_read</span><span class="gmail-p">;</span></font></div><div><br></div><div>Shouldn't it set both to -1 in this case?</div><div><br></div><div>I guess it's OK to mark the buffer as not having an offset, but seeing as the method "knows" the file offset it read from, it could just as easily set a valid offset. So why does it mark the buffer this way? Why would a downstream element want a buffer with an unknown offset? <div><br></div><div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">TH<div><br></div></div></div></div></div></div>