[pitivi] tests: base: Fix SourceFactory.setFilterCaps() regression



commit d85318106207efb7c0e7e61d22e23424cd438ca3
Author: Robert Swain <robert swain collabora co uk>
Date:   Mon Aug 2 14:00:50 2010 +0200

    tests: base: Fix SourceFactory.setFilterCaps() regression
    
    After the removal of SmartVideoScale in favour of videoscale, there was a
    regression in the use of setFilterCaps() for setting dimensions. The dimensions
    must now be set on the capsfilter after videoscale and the caps queried from
    the capsfilter's caps property.

 pitivi/factories/base.py     |   13 +++++---
 tests/test_factories_file.py |   67 ++++++++++++++++++++++++++++++++++++-----
 2 files changed, 66 insertions(+), 14 deletions(-)
---
diff --git a/pitivi/factories/base.py b/pitivi/factories/base.py
index 059d9c5..c5679b6 100644
--- a/pitivi/factories/base.py
+++ b/pitivi/factories/base.py
@@ -420,7 +420,7 @@ class SourceFactory(ObjectFactory):
             b.scale = gst.element_factory_make("videoscale")
             b.scale.props.add_borders = True
             b.capsfilter = gst.element_factory_make("capsfilter")
-            self.setFilterCaps(self._filtercaps)
+            self.setFilterCaps(self._filtercaps, b)
 
             b.add(b.queue, b.scale, b.csp, b.alpha, b.capsfilter)
             gst.element_link_many(b.queue, b.csp, b.scale)
@@ -485,7 +485,7 @@ class SourceFactory(ObjectFactory):
     def addInputStream(self, stream):
         raise AssertionError("source factories can't have input streams")
 
-    def setFilterCaps(self, caps):
+    def setFilterCaps(self, caps, b=None):
         caps_copy = gst.Caps(caps)
         for structure in caps_copy:
             # remove framerate as we don't adjust framerate here
@@ -494,9 +494,12 @@ class SourceFactory(ObjectFactory):
             # remove format as we will have converted to AYUV/ARGB
             if structure.has_key("format"):
                 del structure["format"]
-        for b in self.bins:
-            if hasattr(b, "scale"):
-                b.capsfilter.props.caps = caps_copy
+        if b is None:
+            for bin in self.bins:
+                if hasattr(bin, "capsfilter"):
+                    bin.capsfilter.props.caps = caps_copy
+        else:
+            b.capsfilter.props.caps = caps_copy
         self._filtercaps = caps_copy
 
 class SinkFactory(ObjectFactory):
diff --git a/tests/test_factories_file.py b/tests/test_factories_file.py
index 8d8d35c..68ccb66 100644
--- a/tests/test_factories_file.py
+++ b/tests/test_factories_file.py
@@ -93,22 +93,71 @@ class TestFileSourceFactory(TestCase):
         bin1 = self.factory.makeBin(stream)
         self.failUnlessEqual(self.factory.current_bins, 1)
         self.failUnless(isinstance(bin1, gst.Bin))
-        self.failUnless(hasattr(bin1, "scale"))
-        self.failUnlessEqual(bin1.scale.widthout, 320)
-        self.failUnlessEqual(bin1.scale.heightout, 240)
+        self.failUnless(hasattr(bin1, "capsfilter"))
+
+        # check caps1 set on bin1
+        scale_caps1 = bin1.capsfilter.props.caps
+        width_checked = False
+        height_checked = False
+        for structure in scale_caps1:
+            if structure.has_key("width"):
+                self.failUnlessEqual(structure["width"], 320)
+                width_checked = True
+            if structure.has_key("height"):
+                self.failUnlessEqual(structure["height"], 240)
+                height_checked = True
+        self.failUnlessEqual(width_checked, True)
+        self.failUnlessEqual(height_checked, True)
 
         bin2 = self.factory.makeBin(stream)
         self.failUnlessEqual(self.factory.current_bins, 2)
         self.failUnless(isinstance(bin2, gst.Bin))
         self.failUnless(hasattr(bin2, "scale"))
-        self.failUnlessEqual(bin2.scale.widthout, 320)
-        self.failUnlessEqual(bin2.scale.heightout, 240)
+
+        # check caps1 set on bin2
+        scale_caps1 = bin2.capsfilter.props.caps
+        width_checked = False
+        height_checked = False
+        for structure in scale_caps1:
+            if structure.has_key("width"):
+                self.failUnlessEqual(structure["width"], 320)
+                width_checked = True
+            if structure.has_key("height"):
+                self.failUnlessEqual(structure["height"], 240)
+                height_checked = True
+        self.failUnlessEqual(width_checked, True)
+        self.failUnlessEqual(height_checked, True)
+
 
         self.factory.setFilterCaps(caps2)
-        self.failUnlessEqual(bin1.scale.widthout, 640)
-        self.failUnlessEqual(bin1.scale.heightout, 480)
-        self.failUnlessEqual(bin2.scale.widthout, 640)
-        self.failUnlessEqual(bin2.scale.heightout, 480)
+
+        # check caps2 set on bin1
+        scale_caps2 = bin1.capsfilter.props.caps
+        width_checked = False
+        height_checked = False
+        for structure in scale_caps2:
+            if structure.has_key("width"):
+                self.failUnlessEqual(structure["width"], 640)
+                width_checked = True
+            if structure.has_key("height"):
+                self.failUnlessEqual(structure["height"], 480)
+                height_checked = True
+        self.failUnlessEqual(width_checked, True)
+        self.failUnlessEqual(height_checked, True)
+
+        # check caps2 set on bin2
+        scale_caps2 = bin2.capsfilter.props.caps
+        width_checked = False
+        height_checked = False
+        for structure in scale_caps2:
+            if structure.has_key("width"):
+                self.failUnlessEqual(structure["width"], 640)
+                width_checked = True
+            if structure.has_key("height"):
+                self.failUnlessEqual(structure["height"], 480)
+                height_checked = True
+        self.failUnlessEqual(width_checked, True)
+        self.failUnlessEqual(height_checked, True)
 
         self.factory.releaseBin(bin1)
         self.factory.releaseBin(bin2)



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