Author: dmeyer
Date: Thu Jan  4 16:21:55 2007
New Revision: 2344

Modified:
   trunk/popcorn/src/backends/mplayer/config.cxml
   trunk/popcorn/src/backends/mplayer/player.py

Log:
add support for more properties

Modified: trunk/popcorn/src/backends/mplayer/config.cxml
==============================================================================
--- trunk/popcorn/src/backends/mplayer/config.cxml      (original)
+++ trunk/popcorn/src/backends/mplayer/config.cxml      Thu Jan  4 16:21:55 2007
@@ -38,4 +38,9 @@
             </desc>
         </var>
     </group>
+
+    <var name="deinterlacer" default="yadif=0">
+        <desc lang="en">Deinterlacer video filter to use</desc>
+    </var>
+
 </config>

Modified: trunk/popcorn/src/backends/mplayer/player.py
==============================================================================
--- trunk/popcorn/src/backends/mplayer/player.py        (original)
+++ trunk/popcorn/src/backends/mplayer/player.py        Thu Jan  4 16:21:55 2007
@@ -62,6 +62,13 @@
 # keyed on the full path of the MPlayer binary.
 _cache = {}
 
+class Arguments(list):
+    def add(self, **kwargs):
+        for key, value in kwargs.items():
+            if value is None:
+                continue
+            self.extend(('-' + key, str(value)))
+            
 def _get_mplayer_info(path, callback = None, mtime = None):
     """
     Fetches info about the given MPlayer executable.  If the values are
@@ -362,6 +369,7 @@
         else:
             self._file = media.url
 
+        self._media = media
         self._state = STATE_OPENING
 
         # We have a problem at this point. The 'open' function is used to
@@ -399,11 +407,18 @@
 
         args = [ "-v", "-slave", "-osdlevel", "0", "-nolirc", "-nojoystick", \
                  "-nodouble", "-fixed-vo", "-identify", "-framedrop" ]
+        args = Arguments(args)
         if 'x11' in self._mp_info['video_drivers']:
             args.append('-nomouseinput')
 
         if self._window:
 
+            if self._properties['deinterlace'] == True or \
+               (self._properties['deinterlace'] == 'auto' and \
+                self._media.get('interlaced')):
+                # add deinterlacer
+                filter.append(self._config.mplayer.deinterlacer)
+                
             # FIXME: all this code seems to work. But I guess it has
             # some problems when we don't have an 1:1 pixel aspect
             # ratio on the monitor and using software scaler.
@@ -495,6 +510,26 @@
         os.close(fp)
         args.extend(('-input', 'conf=%s' % keyfile))
 
+        # set property audio filename
+        if self._properties.get('audio-filename'):
+            args.add(audiofile=self._properties.get('audio-filename'))
+
+        # set property audio track
+        if self._properties.get('audio-track') is not None:
+            args.add(aid=self._properties.get('audio-track'))
+
+        # set properties subtitle filename and subtitle track
+        if self._properties.get('subtitle-filename'):
+            sub = self._properties.get('subtitle-filename')
+            if os.path.splitext(sub)[1].lower() in ('.ifo', '.idx', '.sub'):
+                args.add(vobsub=os.path.splitext(sub)[0],
+                         vobsubid=self._properties.get('subtitle-track'))
+            else:
+                args.add(subfile=sub)
+        elif self._properties.get('subtitle-track') != None:
+            args.add(sid=self._properties.get('subtitle-track'))
+
+        # add extra file arguments
         if self._file_args:
             if isinstance(self._file_args, str):
                 args.extend(self._file_args.split(' '))
@@ -553,13 +588,46 @@
         self._child_write("seek %f %s" % (value, s.index(type)))
 
 
+    #
+    # Property settings
+    #
+
     def _prop_audio_delay(self, delay):
         """
         Sets audio delay. Positive value defers audio by delay.
         """
+        if not self._child_is_alive():
+            return
         self._child_write("audio_delay %f 1" % -delay)
 
 
+    def _prop_audio_track(self, id):
+        """
+        Change audio track (mpeg and mkv only)
+        """
+        if not self._child_is_alive():
+            return
+        self._child_write("switch_audio %s" % id)
+
+        
+    def _prop_subtitle_track(self, id):
+        """
+        Change subtitle track
+        """
+        if not self._child_is_alive():
+            return
+        self._child_write("sub_select %s" % id)
+
+        
+    def _prop_subtitle_filename(self, filename):
+        """
+        Change subtitle filename
+        """
+        if not self._child_is_alive():
+            return
+        self._child_write("sub_load %s" % filename)
+
+        
     #
     # Methods for filter handling (not yet in generic and base
     #

-------------------------------------------------------------------------
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