コード例 #1
0
    def _maybeBuildInterpolators(self):
        if not self._rebuild_interpolators:
            return

        if not list(self.gnl_object.elements()):
            raise TrackError("makeBin hasn't been called yet")

        self._rebuild_interpolators = False

        factory_properties = self.factory.getInterpolatedProperties(
            self.stream)

        old_interpolators = self.interpolators
        self.interpolators = {}
        for gst_object, gst_object_property in \
                get_controllable_properties(self.gnl_object):
            prop_name = gst_object_property.name
            if prop_name not in factory_properties:
                continue

            try:
                interpolator = old_interpolators[prop_name][1]
            except KeyError:
                if factory_properties[prop_name]:
                    lower, upper, formatstr = factory_properties[prop_name]
                else:
                    lower, upper, formatstr = None, None, None
                interpolator = Interpolator(self, gst_object,
                                            gst_object_property, lower, upper,
                                            formatstr)
            else:
                # remove and add again the keyframes so they are set on the
                # current controller
                keyframes = list(interpolator.keyframes)
                for keyframe in keyframes:
                    interpolator.removeKeyframe(keyframe)

                interpolator.attachToElementProperty(gst_object_property,
                                                     gst_object)
                interpolator.updateMediaStop(self.out_point)

                for keyframe in keyframes:
                    interpolator.newKeyframe(keyframe)

            self.interpolators[gst_object_property.name] = \
                    (gst_object_property, interpolator)
コード例 #2
0
ファイル: track.py プロジェクト: bemasc/pitivi
    def _maybeBuildInterpolators(self):
        if not self._rebuild_interpolators:
            return

        if not list(self.gnl_object.elements()):
            raise TrackError("makeBin hasn't been called yet")

        self._rebuild_interpolators = False

        factory_properties = self.factory.getInterpolatedProperties(self.stream)

        old_interpolators = self.interpolators
        self.interpolators = {}
        for gst_object, gst_object_property in \
                get_controllable_properties(self.gnl_object):
            prop_name = gst_object_property.name
            if prop_name not in factory_properties:
                continue

            try:
                interpolator = old_interpolators[prop_name][1]
            except KeyError:
                if factory_properties[prop_name]:
                    lower, upper, formatstr = factory_properties[prop_name]
                else:
                    lower, upper, formatstr = None, None, None
                interpolator = Interpolator(self, gst_object,
                    gst_object_property, lower, upper, formatstr)
            else:
                # remove and add again the keyframes so they are set on the
                # current controller
                keyframes = list(interpolator.keyframes)
                for keyframe in keyframes:
                    interpolator.removeKeyframe(keyframe)

                interpolator.attachToElementProperty(gst_object_property,
                        gst_object)
                interpolator.updateMediaStop(self.out_point)

                for keyframe in keyframes:
                    interpolator.newKeyframe(keyframe)

            self.interpolators[gst_object_property.name] = \
                    (gst_object_property, interpolator)
コード例 #3
0
    def testSaveTrackObject(self):
        video_stream = VideoStream(gst.Caps("video/x-raw-yuv"))
        audio_stream = AudioStream(gst.Caps("audio/x-raw-int"))
        source1 = FileSourceFactory("file1.ogg")
        source1.addOutputStream(video_stream)

        # these two calls are needed to populate the context for the -ref
        # elements
        self.formatter._saveSource(source1)
        self.formatter._saveStream(video_stream)

        track_object = SourceTrackObject(source1, video_stream,
                start=10 * gst.SECOND, duration=20 * gst.SECOND,
                in_point=5 * gst.SECOND, media_duration=15 * gst.SECOND,
                priority=10)
        track = Track(video_stream)
        track.addTrackObject(track_object)

        # create an interpolator and insert it into the track object
        fakevol = gst.element_factory_make("volume")
        prop = get_controllable_properties(fakevol)[1][1]
        volcurve = Interpolator(track_object, fakevol, prop)
        track_object.interpolators[prop.name] = (prop, volcurve)

        # add some points to the interpolator 
        value = float(0)
        volcurve.start.setObjectTime(0)
        volcurve.start.value = 0
        for t in xrange(3, 15, 3):
            value = int(t % 2)
            volcurve.newKeyframe(t * gst.SECOND, value)
        volcurve.end.setObjectTime(15 * gst.SECOND)
        volcurve.end.value = 15 % 2

        element = self.formatter._saveTrackObject(track_object)
        self.failUnlessEqual(element.tag, "track-object")
        self.failUnlessEqual(element.attrib["type"],
                qual(track_object.__class__))
        self.failUnlessEqual(element.attrib["start"], ts(10 * gst.SECOND))
        self.failUnlessEqual(element.attrib["duration"], ts(20 * gst.SECOND))
        self.failUnlessEqual(element.attrib["in_point"], ts(5 * gst.SECOND))
        self.failUnlessEqual(element.attrib["media_duration"],
                ts(15 * gst.SECOND))
        self.failUnlessEqual(element.attrib["priority"], "(int)10")

        self.failIfEqual(element.find("factory-ref"), None)
        self.failIfEqual(element.find("stream-ref"), None)

        # find the interpolation keyframes
        curves = element.find("curves")
        self.failIfEqual(curves, None)
        curve = curves.find("curve")
        self.failIfEqual(curve, None)
        self.failUnlessEqual(curve.attrib["property"], "volume")
        
        # compute a dictionary of keyframes
        saved_points = dict(((obj.attrib["time"], (obj.attrib["value"],
            obj.attrib["mode"])) for obj in curve.getiterator("keyframe")))

        # compare this with the expected values
        expected = dict(((str(t * gst.SECOND), ("(gdouble)%s" % (t % 2), "2")) for t in
            xrange(3, 15, 3)))
        self.failUnlessEqual(expected, saved_points)
コード例 #4
0
ファイル: test_etree_formatter.py プロジェクト: qlf/Pitivi
    def testSaveTrackSource(self):
        video_stream = VideoStream(gst.Caps("video/x-raw-yuv"))
        audio_stream = AudioStream(gst.Caps("audio/x-raw-int"))
        source1 = FileSourceFactory("file1.ogg")
        source1.addOutputStream(video_stream)

        # these two calls are needed to populate the context for the -ref
        # elements
        self.formatter._saveSource(source1)
        self.formatter._saveStream(video_stream)

        track_source = SourceTrackObject(source1,
                                         video_stream,
                                         start=10 * gst.SECOND,
                                         duration=20 * gst.SECOND,
                                         in_point=5 * gst.SECOND,
                                         media_duration=15 * gst.SECOND,
                                         priority=10)

        track = Track(video_stream)
        track.addTrackObject(track_source)

        # create an interpolator and insert it into the track object
        fakevol = gst.element_factory_make("volume")
        prop = get_controllable_properties(fakevol)[1][1]
        volcurve = Interpolator(track_source, fakevol, prop)
        track_source.interpolators[prop.name] = (prop, volcurve)

        # add some points to the interpolator
        value = float(0)
        volcurve.start.setObjectTime(0)
        volcurve.start.value = 0
        for t in xrange(3, 15, 3):
            value = int(t % 2)
            volcurve.newKeyframe(t * gst.SECOND, value)
        volcurve.end.setObjectTime(15 * gst.SECOND)
        volcurve.end.value = 15 % 2

        element = self.formatter._saveTrackObject(track_source)
        self.failUnlessEqual(element.tag, "track-object")
        self.failUnlessEqual(element.attrib["type"],
                             qual(track_source.__class__))
        self.failUnlessEqual(element.attrib["start"], ts(10 * gst.SECOND))
        self.failUnlessEqual(element.attrib["duration"], ts(20 * gst.SECOND))
        self.failUnlessEqual(element.attrib["in_point"], ts(5 * gst.SECOND))
        self.failUnlessEqual(element.attrib["media_duration"],
                             ts(15 * gst.SECOND))
        self.failUnlessEqual(element.attrib["priority"], "(int)10")

        self.failIfEqual(element.find("factory-ref"), None)
        self.failIfEqual(element.find("stream-ref"), None)

        # find the interpolation keyframes
        curves = element.find("curves")
        self.failIfEqual(curves, None)
        curve = curves.find("curve")
        self.failIfEqual(curve, None)
        self.failUnlessEqual(curve.attrib["property"], "volume")

        # compute a dictionary of keyframes
        saved_points = dict(
            ((obj.attrib["time"], (obj.attrib["value"], obj.attrib["mode"]))
             for obj in curve.getiterator("keyframe")))

        # compare this with the expected values
        expected = dict(((str(t * gst.SECOND), ("(gdouble)%s" % (t % 2), "2"))
                         for t in xrange(3, 15, 3)))
        self.failUnlessEqual(expected, saved_points)