Package flumotion :: Package component :: Package encoders :: Package theora :: Module theora
[hide private]

Source Code for Module flumotion.component.encoders.theora.theora

 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 Fluendo, S.L. (www.fluendo.com). 
 6  # All rights reserved. 
 7   
 8  # This file may be distributed and/or modified under the terms of 
 9  # the GNU General Public License version 2 as published by 
10  # the Free Software Foundation. 
11  # This file is distributed without any warranty; without even the implied 
12  # warranty of merchantability or fitness for a particular purpose. 
13  # See "LICENSE.GPL" in the source distribution for more information. 
14   
15  # Licensees having purchased or holding a valid Flumotion Advanced 
16  # Streaming Server license may use this file in accordance with the 
17  # Flumotion Advanced Streaming Server Commercial License Agreement. 
18  # See "LICENSE.Flumotion" in the source distribution for more information. 
19   
20  # Headers in this file shall remain intact. 
21   
22  from flumotion.common import messages 
23  from flumotion.common.i18n import N_, gettexter 
24  from flumotion.component import feedcomponent 
25  from flumotion.worker.checks import check 
26   
27   
28  __version__ = "$Rev: 7161 $" 
29  T_ = gettexter() 
30   
31   
32 -class Theora(feedcomponent.ParseLaunchComponent):
33 checkTimestamp = True 34 checkOffset = True 35
36 - def do_check(self):
37 self.debug('running Theora check') 38 from flumotion.worker.checks import encoder 39 return check.do_check(self, encoder.checkTheora)
40
41 - def get_pipeline_string(self, properties):
42 return "ffmpegcolorspace ! theoraenc name=encoder"
43
44 - def configure_pipeline(self, pipeline, properties):
45 element = pipeline.get_by_name('encoder') 46 47 props = ('bitrate', 48 'quality', 49 'keyframe-mindistance', 50 ('quick-compress', 'quick'), 51 ('keyframe-maxdistance', 'keyframe-freq'), 52 ('keyframe-maxdistance', 'keyframe-force'), 53 'noise-sensitivity', 54 'sharpness') 55 56 # F0.6: remove this code 57 # before 0.3.2, bitrate was interpreted as kbps, inconsistent 58 # with other flumotion components 59 # safe to assume that nobody will want less than 10 kbit/sec 60 # also, MikeS *requires* a kbit/sec to be seen as 1000 bit/sec 61 if 'bitrate' in properties: 62 if properties['bitrate'] < 10000: 63 self.addMessage( 64 messages.Warning(T_(N_( 65 "Your configuration uses 'bitrate' expressed in " 66 "kbit/sec. Please convert it to a value in bit/sec by" 67 " multiplying the value by 1000.")), mid='bitrate')) 68 properties['bitrate'] *= 1000 69 70 for p in props: 71 if isinstance(p, tuple): 72 pproperty, eproperty = p 73 else: 74 pproperty = eproperty = p 75 76 if not pproperty in properties: 77 continue 78 79 value = properties[pproperty] 80 self.debug('Setting GStreamer property %s to %r' % ( 81 eproperty, value)) 82 83 # FIXME: GStreamer 0.10 has bitrate in kbps, inconsistent 84 # with all other elements, so fix it up 85 if pproperty == 'bitrate': 86 value = int(value/1000) 87 element.set_property(eproperty, value)
88