Package flumotion :: Package component :: Package producers :: Package videotest :: Module videotest
[hide private]

Source Code for Module flumotion.component.producers.videotest.videotest

 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  import gst 
23   
24  from flumotion.common import errors, gstreamer, messages 
25  from flumotion.component import feedcomponent 
26   
27  from flumotion.common.messages import N_ 
28  T_ = messages.gettexter('flumotion') 
29   
30   
31 -class VideoTest(feedcomponent.ParseLaunchComponent):
32
33 - def init(self):
34 self.uiState.addKey('pattern', 0)
35
36 - def get_pipeline_string(self, properties):
37 format = properties.get('format', 'video/x-raw-yuv') 38 39 if format == 'video/x-raw-yuv': 40 format = '%s,format=(fourcc)I420' % format 41 42 # Filtered caps 43 struct = gst.structure_from_string(format) 44 for k in 'width', 'height': 45 if k in properties: 46 struct[k] = properties[k] 47 48 if 'framerate' in properties: 49 framerate = properties['framerate'] 50 struct['framerate'] = gst.Fraction(framerate[0], framerate[1]) 51 52 # If RGB, set something ffmpegcolorspace can convert. 53 if format == 'video/x-raw-rgb': 54 struct['red_mask'] = 0xff00 55 caps = gst.Caps(struct) 56 57 is_live = 'is-live=true' 58 59 return "videotestsrc %s name=source ! " \ 60 "identity name=identity silent=TRUE ! %s" % ( 61 is_live, caps)
62 63 # Set properties
64 - def configure_pipeline(self, pipeline, properties):
65 def notify_pattern(obj, pspec): 66 self.uiState.set('pattern', int(obj.get_property('pattern')))
67 68 source = self.get_element('source') 69 source.connect('notify::pattern', notify_pattern) 70 if 'pattern' in properties: 71 source.set_property('pattern', properties['pattern']) 72 73 if 'drop-probability' in properties: 74 vt = gstreamer.get_plugin_version('coreelements') 75 if not vt: 76 raise errors.MissingElementError('identity') 77 if not vt > (0, 10, 12, 0): 78 self.addMessage( 79 messages.Warning(T_(N_( 80 "The 'drop-probability' property is specified, but " 81 "it only works with GStreamer core newer than 0.10.12. " 82 "You should update your version of GStreamer.")))) 83 else: 84 drop_probability = properties['drop-probability'] 85 if drop_probability < 0.0 or drop_probability > 1.0: 86 self.addMessage( 87 messages.Warning(T_(N_( 88 "The 'drop-probability' property can only be " 89 "between 0.0 and 1.0.")))) 90 else: 91 identity = self.get_element('identity') 92 identity.set_property('drop-probability', 93 drop_probability)
94