Author: dmeyer
Date: Thu Feb 8 17:51:43 2007
New Revision: 2469
Modified:
trunk/WIP/record/test/tuner.py
Log:
add splitter to tuner
Modified: trunk/WIP/record/test/tuner.py
==============================================================================
--- trunk/WIP/record/test/tuner.py (original)
+++ trunk/WIP/record/test/tuner.py Thu Feb 8 17:51:43 2007
@@ -5,47 +5,127 @@
import sys
import time
+# import kaa.notifier and set mainloop to glib
+import kaa.notifier
+kaa.notifier.init('gtk', x11=False)
+
# import kaa.record2 for the dvbtuner module
import kaa.record2
-tuner = gst.element_factory_make("dvbtuner", "tuner")
-
-tuner.set_property('debug-output', True)
-tuner.set_property('adapter', 0)
-
-frontendlist = [ "QPSK (DVB-S)", "QAM (DVB-C)", "OFDM (DVB-T)", "ATSC" ]
-frontendtype = tuner.get_property('frontendtype')
-print 'FRONTEND-TYPE: ', frontendlist[ frontendtype ]
-print 'FRONTEND-NAME: ', tuner.get_property('frontendname')
-print 'HWDECODER? : ', tuner.get_property('hwdecoder')
-
-if frontendtype != 2:
- print 'the following code supports only DVB-T cards!'
- sys.exit()
-
-
-# tuning to RTL (hardcoded values! change them!)
-# run "gst-inspect dvbtuner" for valid values
-tuner.set_property("frequency", 642000000)
-tuner.set_property("inversion", 2)
-tuner.set_property("bandwidth", 0)
-tuner.set_property("code-rate-high-prio", 2)
-tuner.set_property("code-rate-low-prio", 0)
-tuner.set_property("constellation", 1)
-tuner.set_property("transmission-mode", 1)
-tuner.set_property("guard-interval", 2)
-tuner.set_property("hierarchy", 0)
-
-# add tuner and video pid
-tuner.emit("add-pid", 0x151)
-tuner.emit("add-pid", 0x152)
-
-# tune to channel
-tuner.emit("tune")
-
-while 1:
- time.sleep(1)
- print tuner.get_property("status")
-
-# now tun something like
-# cat /dev/dvb/adapter0/dvr0 | mplayer -vf pp=md/de,phase=U -
+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
+
+
+# create gstreamer pipline
+
+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)
+
+ frontendlist = [ "QPSK (DVB-S)", "QAM (DVB-C)", "OFDM (DVB-T)", "ATSC"
]
+ 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')
+
+ 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 = []
+ kaa.notifier.Timer(self._debug).start(1)
+
+
+ def _debug(self):
+ 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)
+
+ # 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'))
+
+
+ def add_filter(self, sink, *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
+ pidstr = ','.join([str(p) for p in pids])
+ self.splitter.emit("set-filter", sink.get_name(), pidstr)
+
+c = DVBCard()
+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
+ sink = gst.element_factory_make('filesink')
+ sink.set_property('location', '3sat.ts')
+ c.add_filter(sink, 561, 562)
+ sink.set_state(gst.STATE_PLAYING)
+
+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)
+
+# start 3sat in 3 seconds
+kaa.notifier.OneShotTimer(recording2).start(3)
+# start second ZDF recording in 5 seconds
+kaa.notifier.OneShotTimer(recording3).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