1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import gst
19 from twisted.internet import defer
20
21 from flumotion.common import errors, messages
22 from flumotion.common.i18n import N_, gettexter
23 from flumotion.component import feedcomponent
24 from flumotion.component.effects.deinterlace import deinterlace
25 from flumotion.component.effects.videorate import videorate
26 from flumotion.component.effects.videoscale import videoscale
27 from flumotion.component.effects.audioconvert import audioconvert
28 from flumotion.component.effects.kuscheduler import kuscheduler
29 from flumotion.component.effects.volume import volume
30
31 __version__ = "$Rev$"
32 T_ = gettexter()
33
34
36
38 raise NotImplementedError("Subclasses must implement "
39 "'get_raw_video_element'")
40
42 raise NotImplementedError("Subclasses must implement "
43 "'get_pipeline_template'")
44
55
73
75 self.is_square = props.get('is-square', False)
76 self.width = props.get('width', None)
77 self.height = props.get('height', None)
78 self.add_borders = props.get('add-borders', True)
79 self.deintMode = props.get('deinterlace-mode', 'auto')
80 self.deintMethod = props.get('deinterlace-method', 'ffmpeg')
81 self.kuinterval = props.get('keyunits-interval', 0) * gst.MSECOND
82 self.volume_level = props.get('volume', 1)
83 fr = props.get('framerate', None)
84 self.framerate = fr and gst.Fraction(fr[0], fr[1]) or None
85 self._parse_aditional_properties(props)
86 return self.get_pipeline_template(props)
87
92
94 return self.volume.get_property('volume')
95
97 """
98 @param value: float between 0.0 and 4.0
99 """
100 self.debug("Setting volume to %f" % (value))
101 self.volume.set_property('volume', value)
102
107
109 '''
110 Subclasses should override this method to perform aditional checks
111
112 @returns: A list of checks' defers
113 @rtype: list
114 '''
115 return []
116
118 '''
119 Subclasses should overrride this method to parse aditional properties
120 '''
121 pass
122
124
125 deinterlacer = deinterlace.Deinterlace('deinterlace',
126 self.get_raw_video_element().get_pad("src"), pipeline,
127 self.deintMode, self.deintMethod)
128 self.addEffect(deinterlacer)
129 deinterlacer.plug()
130
131
132 rateconverter = videorate.Videorate('videorate',
133 deinterlacer.effectBin.get_pad("src"), pipeline,
134 self.framerate)
135 self.addEffect(rateconverter)
136 rateconverter.plug()
137
138
139 videoscaler = videoscale.Videoscale('videoscale', self,
140 rateconverter.effectBin.get_pad("src"), pipeline,
141 self.width, self.height, self.is_square, self.add_borders)
142 self.addEffect(videoscaler)
143 videoscaler.plug()
144
145
146 scheduler = kuscheduler.KeyUnitsScheduler('video-kuscheduler',
147 videoscaler.effectBin.get_pad("src"), pipeline, self.kuinterval)
148 self.addEffect(scheduler)
149 scheduler.plug()
150
170