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 fr = props.get('framerate', None)
83 self.framerate = fr and gst.Fraction(fr[0], fr[1]) or None
84 self._parse_aditional_properties(props)
85 return self.get_pipeline_template()
86
91
93 return self.volume.get_property('volume')
94
96 """
97 @param value: float between 0.0 and 4.0
98 """
99 self.debug("Setting volume to %f" % (value))
100 self.volume.set_property('volume', value)
101
106
108 '''
109 Subclasses should override this method to perform aditional checks
110
111 @returns: A list of checks' defers
112 @rtype: list
113 '''
114 return []
115
117 '''
118 Subclasses should overrride this method to parse aditional properties
119 '''
120 pass
121
123
124 deinterlacer = deinterlace.Deinterlace('deinterlace',
125 self.get_raw_video_element().get_pad("src"), pipeline,
126 self.deintMode, self.deintMethod)
127 self.addEffect(deinterlacer)
128 deinterlacer.plug()
129
130
131 rateconverter = videorate.Videorate('videorate',
132 deinterlacer.effectBin.get_pad("src"), pipeline,
133 self.framerate)
134 self.addEffect(rateconverter)
135 rateconverter.plug()
136
137
138 videoscaler = videoscale.Videoscale('videoscale', self,
139 rateconverter.effectBin.get_pad("src"), pipeline,
140 self.width, self.height, self.is_square, self.add_borders)
141 self.addEffect(videoscaler)
142 videoscaler.plug()
143
144
145 scheduler = kuscheduler.KeyUnitsScheduler('video-kuscheduler',
146 videoscaler.effectBin.get_pad("src"), pipeline, self.kuinterval)
147 self.addEffect(scheduler)
148 scheduler.plug()
149
168