]> git.sesse.net Git - mlt/commitdiff
Add switcher.py SDI switcher example script.
authorDan Dennedy <dan@dennedy.org>
Wed, 13 Feb 2013 18:25:03 +0000 (10:25 -0800)
committerDan Dennedy <dan@dennedy.org>
Wed, 13 Feb 2013 18:25:03 +0000 (10:25 -0800)
src/swig/python/switcher.py [new file with mode: 0755]

diff --git a/src/swig/python/switcher.py b/src/swig/python/switcher.py
new file mode 100755 (executable)
index 0000000..d0994a5
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Import required modules
+import mlt
+import time
+import sys
+import tornado.ioloop
+import tornado.web
+
+# Start the mlt system
+mlt.mlt_log_set_level(40) # verbose
+mlt.Factory.init()
+
+# Establish a pipeline
+profile = mlt.Profile("atsc_1080i_5994")
+profile.set_explicit(1)
+tractor = mlt.Tractor()
+tractor.set("eof", "loop")
+fg_resource = "decklink:0"
+bg_resource = "decklink:1"
+if len(sys.argv) > 2:
+  fg_resource = sys.argv[1]
+  bg_resource = sys.argv[2]
+fg = mlt.Producer(profile, fg_resource)
+bg = mlt.Producer(profile, bg_resource)
+tractor.set_track(bg, 0)
+tractor.set_track(fg, 1)
+composite = mlt.Transition(profile, "composite")
+composite.set("fill", 1)
+tractor.plant_transition(composite)
+
+# Setup the consumer
+consumer = "decklink:2"
+if len(sys.argv) > 3:
+  consumer = sys.argv[3]
+consumer = mlt.Consumer(profile, consumer)
+consumer.connect(tractor)
+consumer.set("real_time", -2)
+consumer.start()
+
+flip_flop = False
+def switch():
+  global composite, flip_flop
+  frame = fg.frame() + 2
+  if flip_flop:
+    s = "0=20%%/0:100%%x80%%; %d=20%%/0:100%%x80%%; %d=0/0:100%%x100%%" % (frame, frame + 30)
+    composite.set("geometry", s)
+  else:
+    s = "0=0/0:100%%x100%%; %d=0/0:100%%x100%%; %d=20%%/0:100%%x80%%" % (frame, frame + 30)
+    composite.set("geometry", s)
+  flip_flop = not flip_flop
+
+
+def output_form(handler):
+  handler.write('<form action="/" method="post"><input type="submit" value="Switch"></form>')
+
+class SwitchHandler(tornado.web.RequestHandler):
+  def get(self):
+    switch()
+
+class MainHandler(tornado.web.RequestHandler):
+  def get(self):
+    output_form(self)
+
+  def post(self):
+    switch()
+    output_form(self)
+
+application = tornado.web.Application([
+    (r"/", MainHandler),
+    (r"/switch", SwitchHandler)
+])
+
+application.listen(8888)
+tornado.ioloop.IOLoop.instance().start()