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 import gst 19 20 from flumotion.common import gstreamer 21 from flumotion.component import feedcomponent 22 from vorbisutils import get_max_sample_rate, get_preferred_sample_rate 23 24 __version__ = "$Rev$" 25 2628 checkTimestamp = True 29 checkOffset = True 309532 self.debug('running Vorbis check') 33 from flumotion.worker.checks import encoder 34 d = encoder.checkVorbis() 35 36 d.addCallback(self._checkCallback) 37 38 return d39 4345 self.bitrate = properties.get('bitrate', -1) 46 self.quality = properties.get('quality', 0.3) 47 self.channels = properties.get('channels', 2) 48 resampler = 'audioresample' 49 if gstreamer.element_factory_exists('legacyresample'): 50 resampler = 'legacyresample' 51 return ('%s name=ar ! audioconvert ! capsfilter name=cf ' 52 '! vorbisenc name=enc' % resampler)5355 enc = pipeline.get_by_name('enc') 56 cf = pipeline.get_by_name('cf') 57 ar = pipeline.get_by_name('ar') 58 59 assert enc and cf and ar 60 61 if self.bitrate > -1: 62 enc.set_property('bitrate', self.bitrate) 63 else: 64 enc.set_property('quality', self.quality) 65 66 pad = ar.get_pad('sink') 67 handle = None 68 69 def buffer_probe(pad, buffer): 70 # this comes from another thread 71 caps = buffer.get_caps() 72 in_rate = caps[0]['rate'] 73 74 # now do necessary filtercaps 75 self.rate = in_rate 76 if self.bitrate > -1: 77 maxsamplerate = get_max_sample_rate( 78 self.bitrate, self.channels) 79 if in_rate > maxsamplerate: 80 self.rate = get_preferred_sample_rate(maxsamplerate) 81 self.debug( 82 'rate %d > max rate %d (for %d kbit/sec), ' 83 'selecting rate %d instead' % ( 84 in_rate, maxsamplerate, self.bitrate, self.rate)) 85 86 87 caps_str = 'audio/x-raw-float, rate=%d, channels=%d' % (self.rate, 88 self.channels) 89 cf.set_property('caps', 90 gst.caps_from_string(caps_str)) 91 pad.remove_buffer_probe(handle) 92 return True93 94 handle = pad.add_buffer_probe(buffer_probe)97 if not self.checkPropertyType('bitrate', value, int): 98 return False 99 maxsamplerate = get_max_sample_rate(value, self.channels) 100 if self.rate > maxsamplerate: 101 self.warning("Could not set property 'bitrate' on the theora " 102 "encoder: rate %d > max rate %d (for %d kbit/sec)" % ( 103 self.rate, maxsamplerate, value)) 104 return False 105 self.modify_element_property('enc', 'bitrate', value, needs_reset=True) 106 return True107
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Tue Aug 13 06:17:20 2013 | http://epydoc.sourceforge.net |