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