Hi,<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
is it possible to use the python bindings to create a source plugin?<br></blockquote><div>just yesterday i faced with same question.<br>And i don&#39;t know how, but at first i lost from view most obvious place of getting information, this is:<br>
<br>- <a href="http://cgit.freedesktop.org/gstreamer/gst-python/tree/examples/filesrc.py">http://cgit.freedesktop.org/gstreamer/gst-python/tree/examples/filesrc.py</a><br><br>But fortunately i found next few very helpful links:<br>
<br>- <a href="http://guillaume.segu.in/blog/code/223/useful-paralellism-with-python/">http://guillaume.segu.in/blog/code/223/useful-paralellism-with-python/</a><br>- <a href="http://nullege.com/codes/search/gst.PushSrc">http://nullege.com/codes/search/gst.PushSrc</a><br>

- <a href="http://svn.annodex.net/keystroke/trunk/textsrc.py">http://svn.annodex.net/keystroke/trunk/textsrc.py</a><br>
<br>So basically you have to inherit from BaseSrc or PushSrc and implement do_create method. If your source support seeking than few other also.<br><br>On debian testing/unstable PushSrc seems not available in python-gst package so i inherited BaseSrc.<br>
<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I imagine something closely related to the imagefreeze plugin:<br>
   - behave like imagefreeze most of the time (serve static image at<br>
specified fps)<br></blockquote><div><br>Can&#39;t say something here, you may be need to give close attention to clocks in gstreamer to source at specific fps. Will be glad to hear how you do this if you will figure this out,   <br>
<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
   - change image whenever new image arrives from somewhere else within<br>
my (python) code.<br>
</blockquote>You just need to update you source buffer passed through do_create function. <br><br>Here is my code to push text string through udp (this like a little bit simplified version of filesrc example).<br><br></div>
#!/usr/bin/env python<br>&quot;&quot;&quot; Source buf &quot;&quot;&quot;<br># -*- Mode: Python -*-<br># vi:si:et:sw=4:sts=4:ts=4<br>#<br><br>import gobject<br>gobject.threads_init()<br><br>import pygst<br>pygst.require(&#39;0.10&#39;)<br>
import gst<br><br>class Bufsrc(gst.BaseSrc):<br>    &quot;&quot;&quot; Push text &quot;&quot;&quot;<br>    #here we register our plugin details<br>    __gstdetails__ = (<br>        &quot;bufsrc test plugin&quot;,<br>        &quot;bufsrc.py&quot;,<br>
        &quot;Source element that create a buffer&quot;,<br>        &quot;Oleksandr Lavrushchenko &lt;____@<a href="http://gmail.com">gmail.com</a>&gt;&quot;)<br> <br>    _src_template = gst.PadTemplate (&quot;src&quot;,<br>
                                     gst.PAD_SRC,<br>                                     gst.PAD_ALWAYS,<br>                                     gst.caps_new_any ())<br> <br>    __gsttemplates__ = (_src_template,)<br> <br>
    def __init__ (self, *args, **kwargs):<br>        gst.BaseSrc.__init__(self)<br>        <a href="http://gst.info">gst.info</a>(&#39;creating srcpad&#39;)<br>        self.src_pad = gst.Pad (self._src_template)<br>        self.src_pad.use_fixed_caps()<br>
<br>        #self.add_pad (self.src_pad)<br><br>    def do_create(self, offset, length):<br>        buf = gst.Buffer(&quot;data\n&quot;)<br>        buf.timestamp = 0<br>        buf.duration = pow(2, 63) -1<br>        return gst.FLOW_OK, buf<br>
<br># Register element class<br>gobject.type_register(Bufsrc)<br>gst.element_register(Bufsrc, &#39;bufsrc&#39;, gst.RANK_MARGINAL)<br><br>sink = gst.element_factory_make(&quot;udpsink&quot;, &quot;sink&quot;)<br>sink.set_property(&quot;port&quot;, 5000)<br>
sink.set_property(&quot;host&quot;, &quot;127.0.0.1&quot;)<br><br>pusher = Bufsrc()<br><br>player = gst.Pipeline(&quot;player&quot;)<br>player.add(pusher, sink)<br>gst.element_link_many(pusher2, sink)<br><br>player.set_state(gst.STATE_PLAYING)<br>
<br>gobject.MainLoop().run()<br><br><br>