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: 6695 $" 
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-threshold', 50 'keyframe-mindistance', 51 ('quick-compress', 'quick'), 52 ('keyframe-maxdistance', 'keyframe-freq'), 53 ('keyframe-maxdistance', 'keyframe-force'), 54 'noise-sensitivity', 55 'sharpness') 56 57 # F0.6: remove this code 58 # before 0.3.2, bitrate was interpreted as kbps, inconsistent 59 # with other flumotion components 60 # safe to assume that nobody will want less than 10 kbit/sec 61 # also, MikeS *requires* a kbit/sec to be seen as 1000 bit/sec 62 if 'bitrate' in properties: 63 if properties['bitrate'] < 10000: 64 self.addMessage( 65 messages.Warning(T_(N_( 66 "Your configuration uses 'bitrate' expressed in " 67 "kbit/sec. Please convert it to a value in bit/sec by " 68 "multiplying the value by 1000.")), mid='bitrate')) 69 properties['bitrate'] *= 1000 70 71 for p in props: 72 if isinstance(p, tuple): 73 pproperty, eproperty = p 74 else: 75 pproperty = eproperty = p 76 77 if not pproperty in properties: 78 continue 79 80 value = properties[pproperty] 81 self.debug('Setting GStreamer property %s to %r' % ( 82 eproperty, value)) 83 84 # FIXME: GStreamer 0.10 has bitrate in kbps, inconsistent 85 # with all other elements, so fix it up 86 if pproperty == 'bitrate': 87 value = int(value/1000) 88 element.set_property(eproperty, value)
89