Hi,
I think I am missing something obvious. I want to make a program that plays two audio files at the same time, mixing them. My basic pipeline looks like: filesrc -> decodebin -> adder -> audioconvert -> autoaudiosink filesrc -> decodebin I made the program below to try to realize this. However, when I run it I get the following error: amoe@vuurvlieg $ python gstreamer.py test.mp3 test2.mp3 Traceback (most recent call last): File "gstreamer.py", line 58, in on_new_decoded_pad decode.link(adder) gst.LinkError: failed to link decode1 with adder Fatal Python error: PyEval_RestoreThread: NULL tstate zsh: abort (core dumped) python gstreamer.py test.mp3 test.mp3 I don't see where the problem is. I try to link the decodebin to the adder in the callback 'on_new_decoded_pad' as I believe is necessary, but the link fails, but I'm not sure why. Also I'm not sure why the library is aborting -- presumably I'm making some gross usage error somewhere. Can anyone help? [code below] Cheers, Dave import gst import sys import pygtk, gtk, gobject import pdb import glib class MyTest(): player = None pipeline = None def run(self, args): self.pipeline = gst.Pipeline('pipeline') filesrc1 = gst.element_factory_make("filesrc", "filesrc1") filesrc1.set_property("location", args[0]) filesrc2 = gst.element_factory_make("filesrc", "filesrc2") filesrc2.set_property("location", args[1]) decode1 = gst.element_factory_make("decodebin", "decode1") decode2 = gst.element_factory_make("decodebin", "decode2") adder = gst.element_factory_make("adder", "adder") convert = gst.element_factory_make('audioconvert', 'convert') sink = gst.element_factory_make("autoaudiosink", "sink") self.pipeline.add(filesrc1, decode1, filesrc2, decode2, adder, convert, sink) gst.element_link_many(filesrc1, decode1) gst.element_link_many(filesrc2, decode2) gst.element_link_many(adder, convert) gst.element_link_many(convert, sink) decode1.connect("new-decoded-pad", self.on_new_decoded_pad) decode2.connect("new-decoded-pad", self.on_new_decoded_pad) bus = self.pipeline.get_bus() bus.add_signal_watch() bus.connect("message", self.on_message) self.pipeline.set_state(gst.STATE_PAUSED) gtk.gdk.threads_init() gtk.main() def on_message(self, bus, message): t = message.type if t == gst.MESSAGE_EOS: self.pipeline.set_state(gst.STATE_NULL) elif t == gst.MESSAGE_ERROR: self.pipeline.set_state(gst.STATE_NULL) err, debug = message.parse_error() print "Error: %s" % err, debug def on_new_decoded_pad(self, dbin, pad, islast): decode = pad.get_parent() pipeline = decode.get_parent() adder = pipeline.get_by_name('adder') decode.link(adder) if __name__ == "__main__": obj = MyTest() obj.run(sys.argv[1:]) -- David Banks <[hidden email]> _______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |