Author: dmeyer
Date: Thu Feb  8 18:51:49 2007
New Revision: 2470

Modified:
   trunk/WIP/record/test/tuner.py

Log:
make DVBCard a gst.Bin

Modified: trunk/WIP/record/test/tuner.py
==============================================================================
--- trunk/WIP/record/test/tuner.py      (original)
+++ trunk/WIP/record/test/tuner.py      Thu Feb  8 18:51:49 2007
@@ -12,120 +12,122 @@
 # import kaa.record2 for the dvbtuner module
 import kaa.record2
 
-def bus_event(bus, message):
-    t = message.type
-    if t == gst.MESSAGE_EOS:
-        print 'EOS'
-        mainloop.quit()
-    elif t == gst.MESSAGE_ERROR:
-        err, debug = message.parse_error()
-        print "Error: %s" % err, debug
-        mainloop.quit()           
-    print message
-    return True
-
+class DVBCard(gst.Bin):
 
-# create gstreamer pipline
+    def __init__(self, *args):
+        gst.Bin.__init__(self, *args)
+        self._tuner = gst.element_factory_make("dvbtuner", "tuner")
 
-class DVBCard(gst.Pipeline):
-
-    def __init__(self):
-        gst.Pipeline.__init__(self)
-        self.get_bus().add_watch(bus_event)
-
-        self.tuner = gst.element_factory_make("dvbtuner", "tuner")
-
-        self.tuner.set_property('debug-output', True)
-        self.tuner.set_property('adapter', 0)
+        self._tuner.set_property('debug-output', True)
+        self._tuner.set_property('adapter', 0)
 
         frontendlist = [ "QPSK (DVB-S)", "QAM (DVB-C)", "OFDM (DVB-T)", "ATSC" 
]
-        frontendtype = self.tuner.get_property('frontendtype')
+        frontendtype = self._tuner.get_property('frontendtype')
         print 'FRONTEND-TYPE: ', frontendlist[ frontendtype ]
-        print 'FRONTEND-NAME: ', self.tuner.get_property('frontendname')
-        print 'HWDECODER?   : ', self.tuner.get_property('hwdecoder')
+        print 'FRONTEND-NAME: ', self._tuner.get_property('frontendname')
+        print 'HWDECODER?   : ', self._tuner.get_property('hwdecoder')
 
         if frontendtype != 2:
             print 'the following code supports only DVB-T cards!'
             sys.exit()
 
-        self.dvr = open('/dev/dvb/adapter0/dvr0')
-        self.src = gst.element_factory_make("fdsrc")
-        self.src.set_property('fd', self.dvr.fileno())
-        self.queue = gst.element_factory_make("queue")
-        self.splitter = gst.element_factory_make("tssplitter")
-        self.splitter.connect("pad-added", self._on_new_pad)
-        self.add(self.src, self.queue, self.splitter)
-        self.src.link(self.queue)
-        self.queue.link(self.splitter)
-        self.set_state(gst.STATE_PLAYING)
-        print 'go'
-        self.mapping = {}
-        self.pids = []
+        self._dvr = open('/dev/dvb/adapter0/dvr0')
+        self._src = gst.element_factory_make("fdsrc")
+        self._src.set_property('fd', self._dvr.fileno())
+        self._queue = gst.element_factory_make("queue")
+        self._splitter = gst.element_factory_make("tssplitter")
+        self._splitter.connect("pad-added", self._on_new_pad)
+        self.add(self._src, self._queue, self._splitter)
+        self._src.link(self._queue)
+        self._queue.link(self._splitter)
+        self._pids = []
         kaa.notifier.Timer(self._debug).start(1)
 
 
     def _debug(self):
-        print self.tuner.get_property('status')
+        print self._tuner.get_property('status')
+
 
     def tune(self, channel):
         # tuning to ZDF (hardcoded values! change them!)
-        self.tuner.set_property("frequency", 562000000)
-        self.tuner.set_property("inversion", 2)
-        self.tuner.set_property("bandwidth", 0)
-        self.tuner.set_property("code-rate-high-prio", 2)
-        self.tuner.set_property("code-rate-low-prio", 0)
-        self.tuner.set_property("constellation", 1)
-        self.tuner.set_property("transmission-mode", 1)
-        self.tuner.set_property("guard-interval", 2)
-        self.tuner.set_property("hierarchy", 0)
+        self._tuner.set_property("frequency", 562000000)
+        self._tuner.set_property("inversion", 2)
+        self._tuner.set_property("bandwidth", 0)
+        self._tuner.set_property("code-rate-high-prio", 2)
+        self._tuner.set_property("code-rate-low-prio", 0)
+        self._tuner.set_property("constellation", 1)
+        self._tuner.set_property("transmission-mode", 1)
+        self._tuner.set_property("guard-interval", 2)
+        self._tuner.set_property("hierarchy", 0)
 
         # tune to channel
-        self.tuner.emit("tune")
-        
-    def _on_new_pad(self, splitter, pad):
-        print "pad added!"
-        print 'PAD:',pad
-        print 'PADNAME:',pad.get_name()
-        print 'PADCAPS:',pad.get_caps()
-        sink = self.mapping[pad.get_name()]
-        pad.link(sink.get_pad('sink'))
+        self._tuner.emit("tune")
 
+    def _on_new_pad(self, splitter, pad):
+        self.add_pad(gst.GhostPad(pad.get_name(), pad))
 
-    def add_filter(self, sink, *pids):
+    def add_filter(self, name, *pids):
         for pid in pids:
-            if not pid in self.pids:
-                self.tuner.emit("add-pid", pid)
-                self.pids.append(pid)
-        self.add(sink)
-        self.mapping[sink.get_name()] = sink
+            if not pid in self._pids:
+                self._tuner.emit("add-pid", pid)
+                self._pids.append(pid)
         pidstr = ','.join([str(p) for p in pids])
-        self.splitter.emit("set-filter", sink.get_name(), pidstr)
+        self._splitter.emit("set-filter", name, pidstr)
+
+
+
+# test app logic
+
+def bus_event(bus, message):
+    t = message.type
+    if t == gst.MESSAGE_EOS:
+        print 'EOS'
+        mainloop.quit()
+    elif t == gst.MESSAGE_ERROR:
+        err, debug = message.parse_error()
+        print "Error: %s" % err, debug
+        mainloop.quit()
+    print message
+    return True
+
+
+mapping = {}
 
+def on_new_pad(dvb, pad):
+    sink = mapping[pad.get_name()]
+    pad.link(sink.get_pad('sink'))
+
+
+# create gstreamer pipline
+pipeline = gst.Pipeline()
+pipeline.get_bus().add_watch(bus_event)
+
+# create DVBCard object and add it
 c = DVBCard()
+c.connect("pad-added", on_new_pad)
+
+pipeline.add(c)
+pipeline.set_state(gst.STATE_PLAYING)
+
+
+
+# now the testing starts by tuning
 c.tune(None)
 
-# record ZDF
-sink = gst.element_factory_make('filesink')
-sink.set_property('location', 'zdf.ts')
-c.add_filter(sink, 545, 546)
-sink.set_state(gst.STATE_PLAYING)
 
-def recording2():
-    # record 3sat
+def create_recording(filename, *pids):
     sink = gst.element_factory_make('filesink')
-    sink.set_property('location', '3sat.ts')
-    c.add_filter(sink, 561, 562)
+    sink.set_property('location', filename)
+    pipeline.add(sink)
     sink.set_state(gst.STATE_PLAYING)
+    mapping[filename] = sink
+    c.add_filter(filename, *pids)
 
-def recording3():
-    # record ZDF again
-    sink = gst.element_factory_make('filesink')
-    sink.set_property('location', 'zdf2.ts')
-    c.add_filter(sink, 545, 546)
-    sink.set_state(gst.STATE_PLAYING)
+
+create_recording('zdf.ts', 545, 546)
 
 # start 3sat in 3 seconds
-kaa.notifier.OneShotTimer(recording2).start(3)
+kaa.notifier.OneShotTimer(create_recording, '3sat.ts', 561, 562).start(3)
 # start second ZDF recording in 5 seconds
-kaa.notifier.OneShotTimer(recording3).start(5)
+kaa.notifier.OneShotTimer(create_recording, 'zdf2.ts', 545, 546).start(5)
 kaa.notifier.loop()

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to