Author: dmeyer
Date: Wed Jan  3 17:25:39 2007
New Revision: 2336

Modified:
   trunk/popcorn/src/backends/xine/child.py
   trunk/popcorn/src/backends/xine/filter.py

Log:
fix dynamic filter chain

Modified: trunk/popcorn/src/backends/xine/child.py
==============================================================================
--- trunk/popcorn/src/backends/xine/child.py    (original)
+++ trunk/popcorn/src/backends/xine/child.py    Wed Jan  3 17:25:39 2007
@@ -259,8 +259,8 @@
             self._vo_visible = False
 
         # setup filter chain and configure filter
-        self._vfilter = FilterChain()
-
+        self._vfilter = FilterChain(self._xine, video_targets=[ self._vo ])
+        
         f = self._vfilter.get("tvtime")
         f.set_parameters(method = self.config.xine.deinterlacer.method,
                          chroma_filter = 
self.config.xine.deinterlacer.chroma_filter)
@@ -333,7 +333,7 @@
         if properties.get('postprocessing'):
             chain.append('pp')
         chain.append('expand')
-        self._vfilter.wire(self._xine, self._stream.get_video_source(), chain, 
self._vo)
+        self._vfilter.wire(self._stream.get_video_source(), *chain)
 
 
 
@@ -454,9 +454,17 @@
         """
         current = self._vfilter.get_chain()
         chain = []
-        if (prop == 'deinterlace' and value) or 'tvtime' in current:
+        if prop == 'deinterlace':
+            if value:
+                chain.append('tvtime')
+        elif 'tvtime' in current:
             chain.append('tvtime')
-        if (prop == 'postprocessing' and value) or 'pp' in current:
+            
+        if prop == 'postprocessing':
+            if value:
+                chain.append('pp')
+        elif 'pp' in current:
             chain.append('pp')
+
         chain.append('expand')
-        self._vfilter.rewire(chain)
+        self._vfilter.rewire(*chain)

Modified: trunk/popcorn/src/backends/xine/filter.py
==============================================================================
--- trunk/popcorn/src/backends/xine/filter.py   (original)
+++ trunk/popcorn/src/backends/xine/filter.py   Wed Jan  3 17:25:39 2007
@@ -1,55 +1,36 @@
-class Filter(object):
-
-    def __init__(self, name):
-        self.name = name
-        self.prop = {}
-        self._obj = None
-
-    def set_parameters(self, **kwargs):
-        self.prop.update(kwargs)
-        if self._obj:
-            self._obj.set_parameters(**kwargs)
-
-    def create(self, xine, video_targets=[], audio_targets=[]):
-        self._obj = xine.post_init(self.name, video_targets = video_targets,
-                                   audio_targets = audio_targets)
-        self._obj.set_parameters(**self.prop)
-        return self._obj
-
-
-    def get_default_input(self):
-        return self._obj.get_default_input()
-
-    
 class FilterChain(object):
 
-    def __init__(self):
+    def __init__(self, xine, video_targets=[], audio_targets=[]):
         self._filter = {}
-        self._chain = [ None, None, [], None ]
+        self._chain = []
+        self._xine = xine
+        self._video_targets = video_targets
+        self._audio_targets = audio_targets
+
 
     def get(self, name):
         f = self._filter.get(name)
         if not f:
-            f = Filter(name)
+            f = self._xine.post_init(name, video_targets = self._video_targets,
+                                     audio_targets = self._audio_targets)
             self._filter[name] = f
         return f
 
+
     def get_chain(self):
-        return self._chain[2]
+        return self._chain[1:]
+
+
+    def rewire(self, *chain):
+        self.wire(self._chain[0], *chain)
 
-    def rewire(self, chain):
-        self._chain[2] = chain
-        self.wire(*self._chain)
         
-    def wire(self, xine, src, chain, dst):
-        self._chain = [ xine, src, chain, dst ]
-        chain = chain[:]
-        chain.reverse()
+    def wire(self, src, *chain):
+        self._chain = [ src ] + list(chain)
         for f in chain:
             f = self.get(f)
-            f.create(xine, video_targets = [ dst ])
-            dst = f.get_default_input()
+            src.wire(f.get_default_input())
+            src = f.get_default_output()
 
-        # FIXME: rewrire support
-        src.wire(dst)
-        
+        # FIXME: what target?
+        src.wire(self._video_targets[0])

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to