Archive for November 3rd, 2006
Posted on November 3, 2006 - by jono
Rock on
Lovely email from Frank Armstrong:
Hello Jono,
My name is Frank Armstrong. I am very happy to tell you about how your wonderful list saved me tons of hours of frustration. Rich Johnson, from Chicago, has been a super help to me. I’m just now taking the time to learn the ropes for Kubuntu, and he has solved several amazing problems for me. I can’t tell you have happy I am to know there are real heroes left in this tech world. I will keep in touch with him and eventually, make myself available to assist newbies to the Linux way of life.
Thank you so much for providing your wonderful resource list. Please encourage the updating of it. It will be a life-saver for many I’m sure. It is a real blessing.
Great work Rich! I agree with Frank.
It is people like these guys that are making our community kick ass every day.
Posted on November 3, 2006 - by jono
Off to UDS
Tomorrow I fly out to San Francisco to the Ubuntu Developer Summit. This is cool for two core reasons:
- The Ubuntu Developer Summit and its discussions, people, specs, and other fun stuff.
- San Francisco is the birthplace of thrash metal.
’nuff said.
Posted on November 3, 2006 - by jono
GStreamer Dynamic Pads, Explained
(for an intro to GStreamer, see my previous article)
You know, one thing that gets people confused in GStreamer is the idea of Dynamic Pads. Some elements, most notably the decodebin and gnlcomposition only have certain pads at certain times. This is because they figure out what kind of content they are processing, and apply the relevant pads where needed. This is often told to new users, but then they wonder how exactly these dynamic pads are handled.
Here is how it works, using decodebin as an example:
- When the pipeline is run, the
decodebingenerates a signal that says a new pad has been added. In the case ofdecodebinthis is thenew-decoded-padsignal, in the case ofgnlcompositionthis is apad-addedsignal. - You hook this signal up to your own callback, such as
OnDecodedPad(). - The signal passes your callback the pad that was added and some other stuff. You then link this pad to the next element along in the pipeline. So if your pipeline is
filesrc ! decodebin ! audioconvert ! alsasink, the pad passed to yourOnDecodeBin()method would be linked to theaudioconvert.
To outline this, I have written a sample script to show how it works:
#!/usr/bin/python
import pygst
pygst.require("0.10")
import gst
import pygtk
import gtk
class Main:
def __init__(self):
self.pipeline = gst.Pipeline("mypipeline")
self.filesrc = gst.element_factory_make("filesrc", "source")
self.pipeline.add(self.filesrc)
self.filesrc.set_property("location", "/home/jono/Desktop/jonobacon-voicesoffreedom.ogg")
self.decode = gst.element_factory_make("decodebin", "decode")
self.decode.connect("new-decoded-pad", self.OnDynamicPad)
self.pipeline.add(self.decode)
self.filesrc.link(self.decode)
self.convert = gst.element_factory_make("audioconvert", "convert")
self.pipeline.add(self.convert)
self.sink = gst.element_factory_make("alsasink", "sink")
self.pipeline.add(self.sink)
self.convert.link(self.sink)
self.pipeline.set_state(gst.STATE_PLAYING)
def OnDynamicPad(self, dbin, pad, islast):
print "OnDynamicPad Called!"
pad.link(self.convert.get_pad("sink"))
start=Main()
gtk.main()
You can grab the script from here. Hope this helps some of you.







