Real Time Encoder Pipeline Performance

KaPiL.rIcKy kapil.ricky at gmail.com
Sat Oct 11 01:00:20 PDT 2014


Hi
I am working on applicaition for live video chat.
Pipeline is fairly simple:
appsrc->encoder->appsink

-appsrc:from my application i take raw i420 frames and push to GST from my
application thread
using gst_app_src_push_buffer(). I also keep listening to need-data and
enough-data callbacks.
And stop pushing data when enough-data callback comes, and resume again on
need-data.
-encoder-is h264plugin. (custom plugin on our
hardware,base-profile,byte-stream)
-appsink-i pulled data when callback comes.

all works fine with frames of 640*480.
But when use HD video, initially for 1 minutes i can see appsrc and appsink
running almost 30fps.
but then stopfeed comes, so i have to dropped frames. which results in drop
of fps.

So my questions is:
1.Why this behaviour happens ? my assumption is encoder cannot cosumes raw
frames at 30fps so appsrc queue gets fulled.
so it sends enough-data callback. is my understanding correct?
2.When i push buffer from my app thread(and need-data callbacks happen in
diff thread).
Does internally memcpy happens to send data to apprc/encoder streaming
thread?
3.How to optimize this use case ?
i already tried many properties for reducing bit-rate, increasing appsrc
max bytes, changing other values etc..
(plugin developer says it supports HD encoding at real time 30fps)
4.how to debug performance blockers ?

Any suggestions will be really useful. Thanks a lot.
-- 

~~~~~~~~~~~~~~~~~~~~~~~~~~
Thanks and regards
Kapil Kumar
~~~~~~~~~~~~~~~~~~~~~~~~~~
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20141011/9d4af7e4/attachment.html>


More information about the gstreamer-devel mailing list