diff options
author | Edward Hervey <bilboed@bilboed.com> | 2006-05-27 12:13:46 +0000 |
---|---|---|
committer | Edward Hervey <bilboed@bilboed.com> | 2006-05-27 12:13:46 +0000 |
commit | 78e97adb23bb181e1ed404dd7e2d79e42c9c00f1 (patch) | |
tree | 1e06322652b39daa50a51e728c51cb4a5feb8f8a /examples/filesrc.py | |
parent | b6866c55bf8a90830f0d18816045cd1f877ab599 (diff) |
examples/filesrc.py: Port to 0.10.
Original commit message from CVS:
reviewed by: Edward Hervey <edward@fluendo.com>
* examples/filesrc.py: Port to 0.10.
Diffstat (limited to 'examples/filesrc.py')
-rwxr-xr-x | examples/filesrc.py | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/examples/filesrc.py b/examples/filesrc.py index 79de417..2ce0266 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__': |