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