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