<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Hmm that is not the solution. It still
fails after some minutes, reporting the same error as before. I am
trying to find the right way to manipulate the buffer numbers now.<br>
<br>
<br>
On 07/26/2013 01:13 PM, Peter Rennert wrote:<br>
</div>
<blockquote cite="mid:51F267EE.0@cs.ucl.ac.uk" type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<div class="moz-cite-prefix">Rob,<br>
<br>
Well spotted!<br>
<br>
It works for me. I am monitoring the memory only with htop at
the moment, but it seems to be stable. I think the memory leak
stems from the fact that max_buffers is set to 0, so it will
always make the buffer bigger and bigger. I think that is
generally a bad idea. This might affect also plain v4l2src
applications.<br>
<br>
Try this patch to get rid of the memory leak:<br>
<br>
diff --git a/sys/v4l2/gstv4l2bufferpool.c
b/sys/v4l2/gstv4l2bufferpool.c
<br>
index 1e74fc7..282ac2b
100644
<br>
--- a/sys/v4l2/gstv4l2bufferpool.c<br>
+++ b/sys/v4l2/gstv4l2bufferpool.c<br>
@@ -411,7 +411,7 @@ gst_v4l2_buffer_pool_set_config
(GstBufferPool * bpool, GstStructure * config)<br>
if (max_buffers == 0 || num_buffers < max_buffers) {<br>
/* if we are asked to provide more buffers than we have
allocated, start<br>
* copying buffers when we only have 2 buffers left in
the pool */<br>
- copy_threshold = 2;<br>
+ copy_threshold = 15;// 2;<br>
} else {<br>
/* we are certain that we have enough buffers so we
don't need to<br>
* copy */<br>
diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c<br>
index 107ea21..0c5d91a 100644<br>
--- a/sys/v4l2/gstv4l2src.c<br>
+++ b/sys/v4l2/gstv4l2src.c<br>
@@ -529,7 +529,8 @@ gst_v4l2src_decide_allocation (GstBaseSrc *
bsrc, GstQuery * query)<br>
update = TRUE;<br>
} else {<br>
pool = NULL;<br>
- min = max = 0;<br>
+ min = 0;<br>
+ max = 100;<br>
size = 0;<br>
update = FALSE;<br>
}<br>
<br>
<br>
On 07/25/2013 09:52 PM, Robert Krakora wrote:<br>
</div>
<blockquote
cite="mid:CA+DpathKMXgiFwMmzdbQLjoj6w-PC27NUw8AVk2bq5Wc9g9G1A@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>Hi Peter,<br>
<br>
I also wanted to note that when you apply the aforementioned
"hack" to emulate the default operation of v4l2src in
version 0.10 ("always-copy=true") with the pipeline below,
your system will run out of memory due to a memory leak. It
will then kill off the gst-launch process instantiated to
run your pipeline. However, your pipeline will run for
quite a bit (a lot longer than the previous 36 seconds noted
by Yusuf a couple of months ago).<br>
<br>
gst-launch-1.0 uvch264src device=/dev/video0 name=src
auto-start=true src.vfsrc ! queue ! fakesink src.vidsrc !
queue ! video/x-h264 ! fakesink<br>
<br>
</div>
Best Regards,<br>
<br>
Rob Krakora<br>
<br>
</div>
<div class="gmail_extra"> <br>
<br>
<div class="gmail_quote">On Thu, Jul 25, 2013 at 4:27 PM,
Robert Krakora <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:rob.krakora@messagenetsystems.com"
target="_blank">rob.krakora@messagenetsystems.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div>Hi Peter,<br>
<br>
</div>
I forgot to mention that the file that needs
modification is named gstv4l2bufferpool.c and is under
sys/v4l2 under plugins-good.
<div class="im"> <br>
<br>
if (max_buffers == 0 || num_buffers <
max_buffers) {<br>
/* if we are asked to provide more buffers
than we have allocated, start<br>
* copying buffers when we only have 2 buffers
left in the pool */<br>
copy_threshold = 100; //2;<br>
} else {<br>
/* we are certain that we have enough buffers
so we don't need to<br>
* copy */<br>
copy_threshold = 0;<br>
}<br>
</div>
</div>
<div class="HOEnZb">
<div class="h5">
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">On Thu, Jul 25, 2013 at
4:21 PM, Robert Krakora <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:rob.krakora@messagenetsystems.com"
target="_blank">rob.krakora@messagenetsystems.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0
0 .8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div dir="ltr">
<div>
<div>Hi Peter,<br>
<br>
</div>
In version 0.10 v4l2src used to have a
property to force buffers from it's pool to
always be copied prior to being pushed out.
This property was called "always-copy" and
defaulted to "true". It seems that this was
removed in version 1.x. If you go to
version 1.x good plugins and change
"copy_threadhold" from 2 to 100 you
effectively get the same behaviour with 1.x
in this regard (same as "always-copy=true"
default in 0.10 v4l2src) and there is no
error after 30 some odd seconds that causes
the stream to abort.<br>
<br>
if (max_buffers == 0 || num_buffers
< max_buffers) {<br>
/* if we are asked to provide more
buffers than we have allocated, start<br>
* copying buffers when we only have
2 buffers left in the pool */<br>
copy_threshold = 100; //2;<br>
} else {<br>
/* we are certain that we have
enough buffers so we don't need to<br>
* copy */<br>
copy_threshold = 0;<br>
}<br>
<br>
</div>
Best Regards,<br>
<br>
Rob Krakora<br>
<br>
</div>
<div>
<div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">On Thu, Jul 25,
2013 at 1:06 PM, Robert Krakora <span
dir="ltr"><<a
moz-do-not-send="true"
href="mailto:rob.krakora@messagenetsystems.com"
target="_blank">rob.krakora@messagenetsystems.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin:0 0 0
.8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div dir="ltr">
<div>
<div>
<div>Hi Peter,<br>
<br>
</div>
I did some work yesterday on
this and enabled logging on
uvcvideo.ko and was able to
correlate the buffer sizes
reported by it and by the
uvch264src plugin. <span
style="background-color:rgb(255,255,0)">Below</span>
is the frame that failed...the
size in the kernel module was
the same as the size of the
buffer once it got back up to
the application to v4l2src and
uvch264src.<br>
<br>
uvcvideo: Frame complete (EOF
found).<br>
uvcvideo: EOF in empty payload.<br>
uvcvideo: uvc_v4l2_poll<br>
uvcvideo:
uvc_v4l2_ioctl(VIDIOC_DQBUF)<br>
uvcvideo: HD Pro Webcam C920:
PTS 1029592232 y 2948.098587 SOF
2948.098587 (x1 2149480048 x2
2179588048 y1 193593344 y2
199426048 SOF offset 39)<br>
uvcvideo: HD Pro Webcam C920:
SOF 2948.098587 y 927116325 ts
589.071670 buf ts 589.232519 (x1
197984256/205/906 x2
204537856/49/995 y1 1000000000
y2 1099975668)<br>
<span
style="background-color:rgb(255,255,0)"><span>uvcvideo:
uvc_dequeue_buffer -
buf->bytesused = 220410</span></span><br>
uvcvideo:
uvc_v4l2_ioctl(VIDIOC_QBUF)<br>
<br>
</div>
Best Regards,<br>
<br>
</div>
Rob<br>
</div>
<div class="gmail_extra">
<div>
<div><br>
<br>
<div class="gmail_quote">On Thu,
Jul 25, 2013 at 12:22 PM,
Peter Rennert <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:p.rennert@cs.ucl.ac.uk"
target="_blank">p.rennert@cs.ucl.ac.uk</a>></span>
wrote:<br>
<blockquote
class="gmail_quote"
style="margin:0 0 0
.8ex;border-left:1px #ccc
solid;padding-left:1ex">A
bit of an update today.<br>
<br>
To figure out what is going
on normally and what is
different in the diseased
frame I printed out the
debug line [line 508] that
was already in the code,
augmented with the total
size of the buffer. The
original line was:<br>
<br>
GST_DEBUG_OBJECT (self,<br>
"Found APP4 marker
(%d). JPG: %d-%d - APP4: %d
- %d", segment_size,<br>
last_offset, i, i,
i + 2 + segment_size);<br>
<br>
I print for each time in the
loop (before the sanity test
that will fail finally):<br>
<br>
printf("Found APP4 marker
(%d). JPG: %d-%d - APP4: %d
- %d - size: %d\n",
segment_size,<br>
last_offset, i, i,
i + 2 + segment_size,
(int)size);<br>
<br>
What I get for a normal
frame is about this. The
total buffer size changes
and also the size of the
first APP4 chunk, however, I
always seem to get 4 blocks
for each frame. The segment
size of the first marker
differs between the
individual frames, while the
2nd, 3rd and 4th markers are
the same size all the time
as far as I can tell:<br>
<br>
Found APP4 marker (13010).
JPG: 0-8 - APP4: 8 - 13020 -
size: 166660<br>
<br>
Found APP4 marker (65533).
JPG: 13020-13020 - APP4:
13020 - 78555 - size: 166660<br>
<br>
Found APP4 marker (65533).
JPG: <a
moz-do-not-send="true"
href="tel:78555-78555"
value="+17855578555"
target="_blank">78555-78555</a>
- APP4: 78555 - 144090 -
size: 166660<br>
<br>
Found APP4 marker (22566).
JPG: 144090-144090 - APP4:
144090 - 166658 - size:
166660<br>
<br>
<br>
The frame that causes the
failure of the system has
the following output:<br>
<br>
Found APP4 marker (12084).
JPG: 0-8 - APP4: 8 - 12094 -
size: 165485<br>
<br>
Found APP4 marker (65533).
JPG: 12094-12094 - APP4:
12094 - 77629 - size: 165485<br>
<br>
Found APP4 marker (65533).
JPG: 77629-77629 - APP4:
77629 - 143164 - size:
165485<br>
<br>
Found APP4 marker (22566).
JPG: 143164-143164 - APP4:
143164 - 165732 - size:
165485<br>
<br>
<br>
As you can see it seems as
the last segment reaches out
of the total size of the
buffer. As the last segment
seems to be always of a
length 22566, I think for
some reason (that does not
happen in gstreamer 0.10) a
piece of the h264 stream is
missing in this particular
buffer.<br>
<br>
The number of bytes getting
lost is not the same for
different trials, neither is
the cut-off. For my second
trial I got:<br>
<br>
Found APP4 marker (22566).
JPG: 144796-144796 - APP4:
144796 - 167364 - size:
165815<br>
<br>
So where are these bytes?
And why are they missing so
regularly?
<div>
<div><br>
_______________________________________________<br>
gstreamer-devel mailing
list<br>
<a
moz-do-not-send="true"
href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a
moz-do-not-send="true"
href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel"
target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
</div>
</div>
<div>-- <br>
<font color="#888888"><font
color="blue">Rob Krakora<br>
MessageNet Systems <br>
101 East Carmel Dr. Suite 105
<br>
Carmel, IN 46032 <br>
<a moz-do-not-send="true"
value="+13175661677">(317)566-1677</a></font></font><font
color="#888888"><font
color="blue"> Ext 212<br>
<a moz-do-not-send="true"
value="+13176630808">(317)663-0808</a>
Fax </font></font> </div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
<font color="#888888"><font color="blue">Rob
Krakora<br>
MessageNet Systems <br>
101 East Carmel Dr. Suite 105 <br>
Carmel, IN 46032 <br>
<a moz-do-not-send="true"
value="+13175661677">(317)566-1677</a></font></font><font
color="#888888"><font color="blue"> Ext
212<br>
<a moz-do-not-send="true"
value="+13176630808">(317)663-0808</a>
Fax </font></font> </div>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
<font color="#888888"><font color="blue">Rob Krakora<br>
MessageNet Systems <br>
101 East Carmel Dr. Suite 105 <br>
Carmel, IN 46032 <br>
<a moz-do-not-send="true" value="+13175661677">(317)566-1677</a></font></font><font
color="#888888"><font color="blue"> Ext 212<br>
<a moz-do-not-send="true" value="+13176630808">(317)663-0808</a>
Fax </font></font> </div>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
<font color="#888888"><font color="blue">Rob Krakora<br>
MessageNet Systems <br>
101 East Carmel Dr. Suite 105 <br>
Carmel, IN 46032 <br>
<a moz-do-not-send="true" value="+13175661677">(317)566-1677</a></font></font><font
color="#888888"><font color="blue"> Ext 212<br>
<a moz-do-not-send="true" value="+13176630808">(317)663-0808</a>
Fax </font></font> </div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
gstreamer-devel mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
</blockquote>
<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
gstreamer-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
</blockquote>
<br>
</body>
</html>