[pitivi] Make the TestTimelineAddFactory testsuite pass with effects added



commit e5243b92cd77ab46755a2d3bd8effd327762b1c9
Author: Thibault Saunier <tsaunier src gnome org>
Date:   Sat May 22 20:47:45 2010 -0400

    Make the TestTimelineAddFactory testsuite pass with effects added

 pitivi/timeline/timeline.py |   41 ++++++++++++++++++++++++-----------------
 pitivi/timeline/track.py    |    1 +
 tests/test_timeline.py      |   20 +++++++++++++-------
 3 files changed, 38 insertions(+), 24 deletions(-)
---
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 4a9c8ec..1aa6b02 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -31,6 +31,7 @@ from pitivi.stream import match_stream_groups_map
 from pitivi.utils import start_insort_right, infinity, getPreviousObject, \
         getNextObject
 from pitivi.timeline.gap import Gap, SmallestGapsFinder, invalid_gap
+from pitivi.factories.operation import VideoEffectFactory, AudioEffectFactory
 
 # Selection modes
 SELECT = 0
@@ -1686,31 +1687,37 @@ class Timeline(Signallable, Loggable):
         """
         self.debug("factory:%r", factory)
 
-        output_streams = factory.getOutputStreams()
-        if not output_streams:
+        output_stream = factory.getOutputStreams()
+        if not output_stream:
             raise TimelineError()
+        output_stream = output_stream[0]
 
-        stream_map = self._getSourceFactoryStreamMap(factory)
-        if len(stream_map) < len(output_streams):
-            # we couldn't assign each stream to a track automatically,
-            # error out and require the caller to pass a stream_map
-            self.error("Couldn't find a complete stream mapping (self:%d < factory:%d)",
-                       len(stream_map), len(output_streams))
+        input_stream = factory.getInputStreams()
+        if not input_stream:
+            raise TimelineError()
+        input_stream = input_stream[0]
+
+        if isinstance (factory, VideoEffectFactory):
+          track = self._getEffectTrack(input_stream)
+        elif isinstance (factory, AudioEffectFactory):
+          track = self._getEffectTrack(input_stream)
+        else:
+          raise TimelineError()
 
         timeline_object = TimelineObject(factory)
-        start = 0
-        for stream, track in stream_map.iteritems():
-            self.debug("Stream: " + str(stream) + "\nTrack :" + str(track) +\
-                       "\nTrack duration:" + str(track.duration))
-            start = max(start, track.duration)
-            track_object = EffectTrackObject(factory, stream)
-            track.addTrackObject(track_object)
-            timeline_object.addTrackObject(track_object)
+        track_object = EffectTrackObject(factory, input_stream)
+        track.addTrackObject(track_object)
+        timeline_object.addTrackObject(track_object)
 
-        timeline_object.start = start
+        timeline_object.start = track.duration
         self.addTimelineObject(timeline_object)
         return timeline_object
 
+    def _getEffectTrack(self, stream):
+        for track in self.tracks:
+            if track.stream == stream:
+                return track
+
     def _getSourceFactoryStreamMap(self, factory):
         # track.stream -> track
         track_stream_to_track_map = dict((track.stream, track)
diff --git a/pitivi/timeline/track.py b/pitivi/timeline/track.py
index 2d7c34a..ea4a00e 100644
--- a/pitivi/timeline/track.py
+++ b/pitivi/timeline/track.py
@@ -620,6 +620,7 @@ class TrackObject(Signallable, Loggable):
         if self.gnl_object is None:
             raise TrackError()
 
+        #print "SELF.FACTORY: %s %s" % (self.factory, self.stream)
         bin = self.factory.makeBin(self.stream)
         self.gnl_object.add(bin)
         self._rebuild_interpolators = True
diff --git a/tests/test_timeline.py b/tests/test_timeline.py
index aa7d243..b8e0aa1 100644
--- a/tests/test_timeline.py
+++ b/tests/test_timeline.py
@@ -1069,20 +1069,26 @@ class TestTimelineAddFactory(TestCase):
         self.failUnlessEqual(len(self.video_track1.track_objects), 1)
         self.failUnlessEqual(len(self.video_track2.track_objects), 0)
 
-    def testVideoEffectOnly(self):
-        self.video_effect_factory.addOutputStream(self.video_stream1)
+    def testVideoStreamVideoEffect(self):
+        self.factory.addOutputStream(self.video_stream1)
+        self.timeline.addSourceFactory(self.factory)
+        self.video_effect_factory.addInputStream(self.video_stream1)
+        self.video_effect_factory.addOutputStream(self.video_stream2)
         self.timeline.addEffectFactory(self.video_effect_factory)
         self.failUnlessEqual(len(self.audio_track1.track_objects), 0)
         self.failUnlessEqual(len(self.audio_track2.track_objects), 0)
-        self.failUnlessEqual(len(self.video_track1.track_objects), 1)
+        self.failUnlessEqual(len(self.video_track1.track_objects), 2)
         self.failUnlessEqual(len(self.video_track2.track_objects), 0)
 
-    def testAudioEffectOnly(self):
-        self.audio_effect_factory.addOutputStream(self.audio_stream1)
+    def testAudioStreamAudioEffect(self):
+        self.factory.addOutputStream(self.audio_stream1)
+        self.timeline.addSourceFactory(self.factory)
+        self.audio_effect_factory.addInputStream(self.audio_stream1)
+        self.audio_effect_factory.addOutputStream(self.audio_stream2)
         self.timeline.addEffectFactory(self.audio_effect_factory)
-        self.failUnlessEqual(len(self.audio_track1.track_objects), 0)
+        self.failUnlessEqual(len(self.audio_track1.track_objects), 2)
         self.failUnlessEqual(len(self.audio_track2.track_objects), 0)
-        self.failUnlessEqual(len(self.video_track1.track_objects), 1)
+        self.failUnlessEqual(len(self.video_track1.track_objects), 0)
         self.failUnlessEqual(len(self.video_track2.track_objects), 0)
 
     def test1Audio1Video(self):



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