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