<div dir="ltr">thanks for your prompt answer. </div><br><div class="gmail_quote"><div dir="ltr">On Sun, Mar 20, 2016 at 5:10 AM Sebastian Dröge <<a href="mailto:sebastian@centricular.com">sebastian@centricular.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On So, 2016-03-20 at 01:53 +0000, Iván Aponte wrote:<br>
> Hello, <br>
><br>
> I am programming  a sink plugin which basically gets the memory from<br>
> a buffer, maps it to the gpu (since we have zerocopy available) and<br>
> executes a cuda kernel. I am using the basesink class as a base for<br>
> my sink.   I have some questions:  <br>
><br>
> Should I unref the buffer at the end of the render function or is it<br>
> automatically unreffed when the render function returns ? <br>
<br>
render() only gives you a reference for the scope of the function call<br>
and will unref it afterwards. If you need to keep another reference<br>
around, you need to ref() it.<br>
<br>
> Why  gst_buffer_ref is potentially a memory copy operation? is this<br>
> true even if it is in the render function of basesink ? I just don't<br>
> want the memory to get freed.<br>
<br>
ref() is not going to copy the buffer, where did it say that it might<br>
copy? What can happen though is that ref() causes a copy elsewhere.<br>
<br>
Reason for that is that only a buffer with a reference count of exactly<br>
one is considered writable. If something wants to write to a buffer<br>
with a higher reference count, a copy would have to be done first.<br>
gst_buffer_make_writable() would do that.<br>
<br>
In case of your sink you wouldn't really have to worry about that.<br>
<br>
> Is the memory in GstMapInfo is contiguous?<br>
<br>
It's contiguous virtual memory, not necessarily physically contiguous.<br>
It's behaving like a memory area returned by malloc().<br>
<br>
>  Does gst_buffer_map implies a   memory copy operation  ?<br>
<br>
It might, depending of the underlying memory and if the buffer has 1 or<br>
multiple GstMemory stored inside it.<br>
<br>
In many cases it is doing nothing other than giving you a pointer. If<br>
it is backed by normal system memory and there is exactly one GstMemory<br>
in the buffer.<br>
<br>
But for example memory based on GL textures might involve downloading<br>
data from the GPU and then uploading it again on unmap. (which might be<br>
async, or not, the implementation decides that).<br>
<br>
--<br>
Sebastian Dröge, Centricular Ltd · <a href="http://www.centricular.com" rel="noreferrer" target="_blank">http://www.centricular.com</a><br>
<br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</blockquote></div><div dir="ltr">-- <br></div><div dir="ltr">Iván Aponte<div>+58 412 2774713</div></div>