From 78e97adb23bb181e1ed404dd7e2d79e42c9c00f1 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Sat, 27 May 2006 12:13:46 +0000 Subject: [PATCH] examples/filesrc.py: Port to 0.10. Original commit message from CVS: reviewed by: Edward Hervey * examples/filesrc.py: Port to 0.10. --- ChangeLog | 6 ++++++ examples/filesrc.py | 48 ++++++++++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index a2d12a1818..916e7651f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-04-27 Johan Rydberg + + reviewed by: Edward Hervey + + * examples/filesrc.py: Port to 0.10. + 2006-05-27 Edward Hervey * examples/audio-controller.py: diff --git a/examples/filesrc.py b/examples/filesrc.py index 79de417d7d..2ce0266cb9 100755 --- a/examples/filesrc.py +++ b/examples/filesrc.py @@ -25,35 +25,42 @@ import sys import gobject +import pygst +pygst.require('0.10') import gst -class FileSource(gst.Element): +class FileSource(gst.BaseSrc): + __gsttemplates__ = ( + gst.PadTemplate("src", + gst.PAD_SRC, + gst.PAD_ALWAYS, + gst.caps_new_any()), + ) + blocksize = 4096 fd = None + def __init__(self, name): self.__gobject_init__() + self.curoffset = 0 self.set_name(name) - self.srcpad = gst.Pad('src', gst.PAD_SRC) - self.srcpad.set_get_function(self.srcpad_get) - self.add_pad(self.srcpad) def set_property(self, name, value): if name == 'location': self.fd = open(value, 'r') - - def srcpad_get(self, pad): + + def do_create(self, offset, size): + if offset != self.curoffset: + self.fd.seek(offset, 0) data = self.fd.read(self.blocksize) if data: - return gst.Buffer(data) + self.curoffset += len(data) + return gst.FLOW_OK, gst.Buffer(data) else: - self.set_eos() - return gst.Event(gst.EVENT_EOS) + return gst.FLOW_UNEXPECTED, None gobject.type_register(FileSource) def main(args): - print 'This example is not finished yet.' - return - if len(args) != 3: print 'Usage: %s input output' % (args[0]) return -1 @@ -61,21 +68,30 @@ def main(args): bin = gst.Pipeline('pipeline') filesrc = FileSource('filesource') - #filesrc = gst.Element('filesrc', 'src') assert filesrc filesrc.set_property('location', args[1]) filesink = gst.element_factory_make('filesink', 'sink') filesink.set_property('location', args[2]) - bin.add_many(filesrc, filesink) + bin.add(filesrc, filesink) gst.element_link_many(filesrc, filesink) bin.set_state(gst.STATE_PLAYING); + mainloop = gobject.MainLoop() - while bin.iterate(): - pass + def bus_event(bus, message): + t = message.type + if t == gst.MESSAGE_EOS: + mainloop.quit() + elif t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + print "Error: %s" % err, debug + mainloop.quit() + return True + bin.get_bus().add_watch(bus_event) + mainloop.run() bin.set_state(gst.STATE_NULL) if __name__ == '__main__':