pyges: fix and clean examples/simple.py

This commit is contained in:
Luis de Bethencourt 2011-08-11 18:26:08 +02:00
parent b77da13eb8
commit c24f57846a

93
bindings/python/examples/simple.py Normal file → Executable file
View file

@ -23,25 +23,42 @@
# the Free Software Foundation; either version 3, or (at your option) # the Free Software Foundation; either version 3, or (at your option)
# any later version. # any later version.
from gst import ges
import sys import sys
import getopt import optparse
import gst
import glib import glib
import gobject
gobject.threads_init()
class Demo: import gst
def __init__(self, files): import ges
self.tl_objs = []
self.set_pipeline (files)
for f in files: class Simple:
self.add_tl_object(f) def __init__(self, uris):
# init ges to have debug logs
ges.init()
self.mainloop = glib.MainLoop() self.mainloop = glib.MainLoop()
def add_tl_object(self, file): timeline = ges.timeline_new_audio_video()
self.tl_objs.append(ges.TimelineFileSource (file)) self.layer = ges.SimpleTimelineLayer()
self.layer.add_object(self.tl_objs[-1], -1) timeline.add_layer(self.layer)
self.pipeline = ges.TimelinePipeline()
self.pipeline.add_timeline(timeline)
bus = self.pipeline.get_bus()
bus.set_sync_handler(self.bus_handler)
# all timeline objects except the last will have a transition at the end
for n in uris[:-1]:
self.add_timeline_object(n, True)
self.add_timeline_object(uris[-1], False)
def add_timeline_object(self, uri, do_transition):
filesource = ges.TimelineFileSource (uri)
filesource.set_duration(long (gst.SECOND * 5))
self.layer.add_object(filesource, -1)
if do_transition:
transition = ges.TimelineStandardTransition("crossfade") transition = ges.TimelineStandardTransition("crossfade")
transition.duration = gst.SECOND * 2 transition.duration = gst.SECOND * 2
self.layer.add_object(transition, -1) self.layer.add_object(transition, -1)
@ -56,50 +73,26 @@ class Demo:
return gst.BUS_PASS return gst.BUS_PASS
def set_pipeline (self, files):
try:
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
except getopt.error, msg:
print msg
print "for help use --help"
ges.init()
tl = ges.timeline_new_audio_video()
layer = ges.SimpleTimelineLayer()
tl.add_layer(layer)
pipeline = ges.TimelinePipeline()
pipeline.add_timeline (tl)
bus = pipeline.get_bus()
bus.set_sync_handler(self.bus_handler)
self.pipeline = pipeline
self.layer = layer
def run(self): def run(self):
if (self.pipeline.set_state(gst.STATE_PLAYING) == gst.STATE_CHANGE_FAILURE): if (self.pipeline.set_state(gst.STATE_PLAYING) == \
gst.STATE_CHANGE_FAILURE):
print "Couldn't start pipeline" print "Couldn't start pipeline"
self.mainloop.run() self.mainloop.run()
def main(): def main(args):
try: usage = "usage: %s URI-OF-VIDEO-1 ... URI-OF-VIDEO-n\n" % args[0]
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
except getopt.error, msg:
print msg
print "for help use --help"
sys.exit(2)
# process options
for o, a in opts:
if o in ("-h", "--help"):
print __doc__
sys.exit(0)
demo = Demo(args) if len(args) < 2:
demo.run() sys.stderr.write(usage)
sys.exit(1)
parser = optparse.OptionParser (usage=usage)
(options, args) = parser.parse_args ()
simple = Simple(args)
simple.run()
if __name__ == "__main__": if __name__ == "__main__":
main() sys.exit(main(sys.argv))