Trees | Indices | Help |
---|
|
1 # -*- Mode: Python -*- 2 # vi:si:et:sw=4:sts=4:ts=4 3 4 # Flumotion - a streaming media server 5 # Copyright (C) 2004,2005,2006,2007,2008,2009 Fluendo, S.L. 6 # Copyright (C) 2010,2011 Flumotion Services, S.A. 7 # All rights reserved. 8 # 9 # This file may be distributed and/or modified under the terms of 10 # the GNU Lesser General Public License version 2.1 as published by 11 # the Free Software Foundation. 12 # This file is distributed without any warranty; without even the implied 13 # warranty of merchantability or fitness for a particular purpose. 14 # See "LICENSE.LGPL" in the source distribution for more information. 15 # 16 # Headers in this file shall remain intact. 17 18 from flumotion.common import messages, gstreamer 19 from flumotion.common.i18n import N_, gettexter 20 from flumotion.component.common.avproducer import avproducer 21 22 __version__ = "$Rev$" 23 T_ = gettexter() 24 25 26 # See comments in gstdvdec.c for details on the dv format. 27 2830 31 decoder = None 32 decoder_str = 'dvdec' 33 guid = 0 3411836 return self.decoder3739 # FIXME: might be nice to factor out dv1394src ! dvdec so we can 40 # replace it with videotestsrc of the same size and PAR, so we can 41 # unittest the pipeline 42 # need a queue in case tcpserversink blocks somehow 43 return ('dv1394src %s' 44 ' ! tee name=t' 45 ' ! queue leaky=2 max-size-time=1000000000' 46 ' ! dvdemux name=demux' 47 ' demux. ! queue ! %s name=decoder' 48 ' ! @feeder:video@' 49 ' demux. ! queue ! audio/x-raw-int ' 50 ' ! volume name=setvolume' 51 ' ! level name=volumelevel message=true ' 52 ' ! @feeder:audio@' 53 ' t. ! queue ! @feeder:dv@' % (self.guid, self.decoder_str))5456 # catch bus message for when camera disappears 57 bus = pipeline.get_bus() 58 bus.add_signal_watch() 59 bus.connect('message::element', self._bus_message_received_cb) 60 61 self.decoder = pipeline.get_by_name("decoder") 62 if gstreamer.element_has_property(self.decoder, 'drop-factor'): 63 if self.framerate: 64 framerate = float(self.framerate.num / self.framerate.denom) 65 if 12.5 < framerate: 66 drop_factor = 1 67 elif 6.3 < framerate <= 12.5: 68 drop_factor = 2 69 elif 3.2 < framerate <= 6.3: 70 drop_factor = 4 71 elif framerate <= 3.2: 72 drop_factor = 8 73 else: 74 drop_factor = 1 75 self.decoder.set_property('drop-factor', drop_factor) 76 return avproducer.AVProducerBase.configure_pipeline(self, pipeline, 77 properties)78 82 83 # detect camera unplugging or other cause of firewire bus reset 8486 """ 87 @param bus: the message bus sending the message 88 @param message: the message received 89 """ 90 if message.structure.get_name() == "ieee1394-bus-reset": 91 # we have a firewire bus reset 92 s = message.structure 93 # current-device-change is only in gst-plugins-good >= 0.10.3 94 if 'current-device-change' in s.keys(): 95 if s['current-device-change'] != 0: 96 # we actually have a connect or disconnect of the camera 97 # so first remove all the previous messages warning about a 98 # firewire-bus-reset 99 100 for m in self.state.get('messages'): 101 if m.id.startswith('firewire-bus-reset'): 102 self.state.remove('messages', m) 103 104 if s['current-device-change'] == 1: 105 # connected 106 m = messages.Info(T_(N_( 107 "The camera has now been reconnected.")), 108 mid="firewire-bus-reset-%d" % s['nodecount'], 109 priority=40) 110 self.state.append('messages', m) 111 elif s['current-device-change'] == -1: 112 # disconnected 113 m = messages.Warning(T_(N_( 114 "The camera has been disconnected.")), 115 mid="firewire-bus-reset-%d" % s['nodecount'], 116 priority=40) 117 self.state.append('messages', m)
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Tue Aug 13 06:17:17 2013 | http://epydoc.sourceforge.net |