[pitivi] etree: add support for keyframe curves



commit 68060dd2248526f07f315e38eba9c9afdb9db954
Author: Brandon Lewis <brandon_lewis berkeley edu>
Date:   Tue Jun 23 09:43:44 2009 -0700

    etree: add support for keyframe curves

 pitivi/formatters/etree.py |   36 ++++++++++++++++++++++++++++++++++++
 1 files changed, 36 insertions(+), 0 deletions(-)
---
diff --git a/pitivi/formatters/etree.py b/pitivi/formatters/etree.py
index 702186b..2554a8f 100644
--- a/pitivi/formatters/etree.py
+++ b/pitivi/formatters/etree.py
@@ -329,6 +329,11 @@ class ElementTreeFormatter(Formatter):
 
         element.append(factory_ref)
         element.append(stream_ref)
+        if track_object.interpolators:
+            curves = Element("curves")
+            for property, interpolator in track_object.interpolators.iteritems():
+                curves.append(self._saveInterpolator(interpolator, property))
+            element.append("curves")
 
         self._context.track_objects[track_object] = element
 
@@ -348,10 +353,41 @@ class ElementTreeFormatter(Formatter):
         for name, value_string in self._filterElementProperties(element):
             value = self._parsePropertyValue(value_string)
             setattr(track_object, name, value)
+        curves_element = element.find("curves")
+        if curves_element:
+            for curve in curves_element.getchildren():
+                self._loadInterpolator(curve, track_object)
 
         self._context.track_objects[element.attrib["id"]] = track_object
         return track_object
 
+    def _saveInterpolator(self, interpolator, prop):
+        element = Element("curve", property=prop)
+        start = Element("start", value=interpolator.start.value,
+            mode=interpolator.start.mode)
+        element.append(start)
+        for kf in interpolator.getKeyframes:
+            kfel = Element("keyframe", time=keyframe.time, value=kf.value,
+                mode=kf.mode)
+            element.append(kf)
+        end = Element("end", value=interpolator.end.value,
+            mode=interpolator.end.mode)
+        element.append(end)
+        return element
+
+    def _loadInterpolator(self, element, trackobject):
+        interpolator = trackobject.interpolator[element.attrib["prop"]]
+        start = element.find("start")
+        interpolator.start.value = start.attrib["value"]
+        interpolator.start.mode = start.attrib["mode"]
+        for keyframe in element.getchildren():
+            interpolator.newKeyFrame(kf.attrib["time"], 
+                value=kf.attrib["value"],
+                mode=kf.attrib["mode"])
+        end = element.find("end")
+        interpolator.end.value = end.attrib["value"]
+        interpolator.end.mode = end.attrib["mode"]
+
     def _saveTrackObjectRef(self, track_object):
         element = Element("track-object-ref")
         element.attrib["id"] = self._context.track_objects[track_object].attrib["id"]



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]