Пример #1
0
    def configure_pipeline(self, pipeline, properties):
        self.volume = pipeline.get_by_name("setvolume")
        from flumotion.component.effects.volume import volume
        comp_level = pipeline.get_by_name('volumelevel')
        vol = volume.Volume('inputVolume', comp_level, pipeline)
        self.addEffect(vol)

        deinterlacer = deinterlace.Deinterlace(
            'deinterlace',
            pipeline.get_by_name("src").get_pad("src_video"), pipeline,
            self.deintMode, self.deintMethod)
        self.addEffect(deinterlacer)
        deinterlacer.plug()

        videoscaler = videoscale.Videoscale(
            'videoscale', self, deinterlacer.effectBin.get_pad("src"),
            pipeline, self.width, self.height, True, False)
        self.addEffect(videoscaler)
        videoscaler.plug()

        # Setting a tolerance of 20ms should be enough (1/2 frame), but
        # we set it to 40ms to be more conservatives
        ar = audiorate.Audiorate('audiorate',
                                 comp_level.get_pad("src"),
                                 pipeline,
                                 tolerance=40 * gst.MSECOND)
        self.addEffect(ar)
        ar.plug()
Пример #2
0
    def configure_pipeline(self, pipeline, properties):
        self.volume = pipeline.get_by_name("setvolume")
        from flumotion.component.effects.volume import volume
        comp_level = pipeline.get_by_name('volumelevel')
        vol = volume.Volume('inputVolume', comp_level, pipeline)
        # catch bus message for when camera disappears
        bus = pipeline.get_bus()
        bus.add_signal_watch()
        bus.connect('message::element', self._bus_message_received_cb)
        self.addEffect(vol)

        decoder = pipeline.get_by_name("decoder")
        if gstreamer.element_has_property(decoder, 'drop-factor'):
            if self.framerate:
                framerate = float(self.framerate.num / self.framerate.denom)
                if 12.5 < framerate:
                    drop_factor = 1
                elif 6.3 < framerate <= 12.5:
                    drop_factor = 2
                elif 3.2 < framerate <= 6.3:
                    drop_factor = 4
                elif framerate <= 3.2:
                    drop_factor = 8
            else:
                drop_factor = 1
            decoder.set_property('drop-factor', drop_factor)

        vr = videorate.Videorate('videorate',
            decoder.get_pad("src"), pipeline, self.framerate)
        self.addEffect(vr)
        vr.plug()

        deinterlacer = deinterlace.Deinterlace('deinterlace',
            vr.effectBin.get_pad("src"), pipeline,
            self.deintMode, self.deintMethod)
        self.addEffect(deinterlacer)
        deinterlacer.plug()

        videoscaler = videoscale.Videoscale('videoscale', self,
            deinterlacer.effectBin.get_pad("src"), pipeline,
            self.width, self.height, self.is_square, self.add_borders)
        self.addEffect(videoscaler)
        videoscaler.plug()

        # Setting a tolerance of 20ms should be enough (1/2 frame), but
        # we set it to 40ms to be more conservatives
        ar = audioconvert.Audioconvert('audioconvert',
                                       comp_level.get_pad("src"),
                                       pipeline, tolerance=40 * gst.MSECOND)
        self.addEffect(ar)
        ar.plug()
Пример #3
0
    def configure_pipeline(self, pipeline, properties):

        self.fixRenamedProperties(properties, [
            ('freq', 'frequency'),
        ])

        element = self.get_element('source')
        if 'frequency' in properties:
            element.set_property('freq', properties['frequency'])
            self.uiState.set('frequency', properties['frequency'])

        if 'drop-probability' in properties:
            vt = gstreamer.get_plugin_version('coreelements')
            if not vt:
                raise errors.MissingElementError('identity')
            if not vt > (0, 10, 12, 0):
                self.addMessage(
                    messages.Warning(
                        T_(
                            N_("The 'drop-probability' property is specified, but "
                               "it only works with GStreamer core newer than 0.10.12."
                               " You should update your version of GStreamer.")
                        )))
            else:
                drop_probability = properties['drop-probability']
                if drop_probability < 0.0 or drop_probability > 1.0:
                    self.addMessage(
                        messages.Warning(
                            T_(
                                N_("The 'drop-probability' property can only be "
                                   "between 0.0 and 1.0."))))
                else:
                    identity = self.get_element('identity')
                    identity.set_property('drop-probability', drop_probability)

        self.uiState.set('samplerate', self.samplerate)
        self.uiState.set('wave', int(element.get_property('wave')))

        level = pipeline.get_by_name('level')
        vol = volume.Volume('volume', level, pipeline)
        self.addEffect(vol)
Пример #4
0
    def _add_audio_effects(self, pipeline):
        # Add volume setter
        self.volume = pipeline.get_by_name("setvolume")
        comp_level = pipeline.get_by_name('volumelevel')
        vol = volume.Volume('inputVolume', comp_level, pipeline)
        self.addEffect(vol)
        self.setVolume(self.volume_level)

        # Add audio converter
        audioconverter = audioconvert.Audioconvert('audioconvert',
                                                   comp_level.get_pad("src"),
                                                   pipeline,
                                                   tolerance=40 * gst.MSECOND)
        self.addEffect(audioconverter)
        audioconverter.plug()

        # Add key units scheduler
        scheduler = kuscheduler.KeyUnitsScheduler(
            'audio-kuscheduler', audioconverter.effectBin.get_pad("src"),
            pipeline, self.kuinterval)
        self.addEffect(scheduler)
        scheduler.plug()
Пример #5
0
    def configure_pipeline(self, pipeline, properties):
        # add volume effect
        comp_level = pipeline.get_by_name('volumelevel')
        allowVolumeSet = True
        if gst.pygst_version < (0, 10, 7):
            allowVolumeSet = False
            m = messages.Info(T_(
                N_("The soundcard volume cannot be changed with this version "
                   "of the 'gst-python' library.\n")),
                              mid='mixer-track-setting')
            m.add(
                T_(
                    N_("Please upgrade '%s' to version %s or later "
                       "if you require this functionality."), 'gst-python',
                    '0.10.7'))
            self.addMessage(m)

        vol = volume.Volume('inputVolume',
                            comp_level,
                            pipeline,
                            allowIncrease=False,
                            allowVolumeSet=allowVolumeSet)
        self.addEffect(vol)
        self._srcelement = pipeline.get_by_name("src")