[Player-dev] CR: Fix utils::get_media_type() implementation

[Player-dev] CR: Fix utils::get_media_type() implementation

Rusty Lynch rusty.lynch at intel.com
Wed Mar 19 19:22:08 PDT 2008


Description
----------------------------------
When the MID player plays a given media file, it needs to guess if the 
media file is video, photo, or music in order to present the correct UI.
The current implementation does this by using the file extention, which
is problematic for many extensions (like 'rm' or 'ogg'.)

Before this change, the utility function for determining the media type
would just do a simple iteration over a list of known extension types,
ensuring that there is always a combination of getting this wrong.

This changeset will add a small amount of smarts to the get_media_type()
function to pick the media type that makes sense for the given view.  A 
classic example is if the music view attempts to play a rm file, then it
will be played as music, and if the same file was played from the video
view
then it will be played as video.

Files Modified
----------------------------------
player/mid/src/toolbar_view.py
player/mid/src/utils.py

Branches
---------------------------------
HEAD only (for now)

Index: src/toolbar_view.py
===================================================================
RCS file: /cvsroot/player/mid/src/toolbar_view.py,v
retrieving revision 1.2
diff -u -w -r1.2 toolbar_view.py
--- src/toolbar_view.py	18 Mar 2008 00:04:02 -0000	1.2
+++ src/toolbar_view.py	20 Mar 2008 02:18:11 -0000
@@ -474,7 +474,7 @@
                 filename = PlayList(filename)[0]['File']
             except PlayListError:
                 return utils.error_msg(constant.MSG_OPEN_ERROR, False)
-        media_type = utils.get_media_type(filename)
+        media_type = utils.get_media_type(filename, self.app.cur_mode)
         dirname = filename.replace('file://','')
         self.app.view['photo'].set_cur_dir(dirname)
         if -1 == filename.find(":"):
Index: src/utils.py
===================================================================
RCS file: /cvsroot/player/mid/src/utils.py,v
retrieving revision 1.3
diff -u -w -r1.3 utils.py
--- src/utils.py	18 Mar 2008 00:04:02 -0000	1.3
+++ src/utils.py	20 Mar 2008 02:18:11 -0000
@@ -88,18 +88,22 @@
             parser.error("no such media mode, only support music, video
and photo")
     return options, args
 
-def get_media_type(filename):
-    """Based on the extension of the filename, determine what the media
type
-    is"""
+def get_media_type(filename, calling_view = 'video'):
+    """Determine the media type by the file extension.  For the case of
+       file extensions that resolve to multiple media types (like
'rm'), then
+       give preference to the the calling view (i.e. if the music view
+       is asking then rm is 'audio', but if the video view is asking
then 
+       the media type is 'video'"""
     strlist = filename.split('.')
     extension = strlist[-1].lower()
-    if extension in constant.MediaType['audio']:
-        return 'audio'
-    elif extension in constant.MediaType['video']:
-        return 'video'
-    elif extension in constant.MediaType['photo']:
-        return 'photo'
-    else:
+    for i in [calling_view, 'audio', 'photo', 'video']:
+        try:
+            if extension in constant.MediaType[i]:
+                return i
+        except:
+            # Somebody passed in an invalid calling view
+            pass
+    # If all else fails then default to audio
         return 'audio'
 
 def on_err_dialog_response_exit(dialog, response_id):




More information about the Player-dev mailing list
 

Site Map   |   Terms of Use   |   Privacy Policy   |   Contact Us

Copyright © 1995-2007 RealNetworks, Inc. All rights reserved. RealNetworks and Helix are trademarks of RealNetworks.
All other trademarks or registered trademarks are the property of their respective holders.