Update of /cvsroot/gtkpod/gtkpod/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4622/src

Modified Files:
        file.c file.h file_itunesdb.c misc.c misc_track.c 
Log Message:
         * file.c, file.h, file_itunesdb.c: basic video support --
           thanks to Uwe Hermann for the input.



Index: file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file.c,v
retrieving revision 1.146
retrieving revision 1.147
diff -u -d -r1.146 -r1.147
--- file.c      13 Nov 2005 07:34:34 -0000      1.146
+++ file.c      19 Nov 2005 05:32:10 -0000      1.147
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-13 16:29:27 jcs>
+/* Time-stamp: <2005-11-19 13:49:30 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -54,6 +54,47 @@
 #include "prefs.h"
 #include "wavfile.h"
 
+
+/*------------------------------------------------------------------*\
+ *                                                                  *
+ *      Temporary Video stuff -- move to appropriate files when     *
+ *      properly supported.                                         *
+ *                                                                  *
+\*------------------------------------------------------------------*/
+
+Track *video_get_file_info (gchar *filename)
+{
+    Track *track;
+    track = gp_track_new ();
+    switch (determine_file_type (filename))
+    {
+    case FILE_TYPE_M4V:
+       track->filetype = g_strdup ("M4V video file");
+       break;
+    case FILE_TYPE_MP4:
+       track->filetype = g_strdup ("MP4 video file");
+       break;
+    case FILE_TYPE_MOV:
+       track->filetype = g_strdup ("MOV video file");
+       break;
+    case FILE_TYPE_MPG:
+       track->filetype = g_strdup ("MPG video file");
+       break;
+    case FILE_TYPE_UNKNOWN:
+    case FILE_TYPE_MP3:
+    case FILE_TYPE_M4A:
+    case FILE_TYPE_M4P:
+    case FILE_TYPE_M4B:
+    case FILE_TYPE_WAV:
+    case FILE_TYPE_M3U:
+    case FILE_TYPE_PLS:
+       g_free (track);
+       g_return_val_if_reached (NULL);
+    }
+    return track;
+}
+
+
 /* Determine the type of a file. 
  *
  * Currently this is done by checking the suffix of the filename. An improved
@@ -62,30 +103,35 @@
  * -jlt
  */
 
-gint determine_file_type (gchar *path)
+FileType determine_file_type (gchar *path)
 {
-       gchar *path_utf8, *suf;
-       gint type = FILE_TYPE_UNKNOWN;
+    gchar *path_utf8, *suf;
+    FileType type = FILE_TYPE_UNKNOWN;
        
-       g_return_val_if_fail (path, type);
+    g_return_val_if_fail (path, type);
        
-       path_utf8 = charset_to_utf8 (path);
-       suf = strrchr (path_utf8, '.');
-       if (suf)
-       {
-           /* since we are exclusively checking for equality strcasecmp
-            * should be sufficient */
-           if (g_strcasecmp (suf, ".mp3") == 0) type = FILE_TYPE_MP3;
-           else if (g_strcasecmp (suf, ".m4a") == 0) type = FILE_TYPE_M4A;
-           else if (g_strcasecmp (suf, ".m4p") == 0) type = FILE_TYPE_M4P;
-           else if (g_strcasecmp (suf, ".m4b") == 0) type = FILE_TYPE_M4B;
-           else if (g_strcasecmp (suf, ".wav") == 0) type = FILE_TYPE_WAV;
-           else if (g_strcasecmp (suf, ".m3u") == 0) type = FILE_TYPE_M3U;
-           else if (g_strcasecmp (suf, ".pls") == 0) type = FILE_TYPE_PLS;
-       }
+    path_utf8 = charset_to_utf8 (path);
+    suf = strrchr (path_utf8, '.');
+    if (suf)
+    {
+       if (g_strcasecmp (suf, ".mp3") == 0) type = FILE_TYPE_MP3;
+       else if (g_strcasecmp (suf, ".m4a") == 0) type = FILE_TYPE_M4A;
+       else if (g_strcasecmp (suf, ".m4p") == 0) type = FILE_TYPE_M4P;
+       else if (g_strcasecmp (suf, ".m4b") == 0) type = FILE_TYPE_M4B;
+       else if (g_strcasecmp (suf, ".wav") == 0) type = FILE_TYPE_WAV;
 
-       g_free(path_utf8);
-       return type;
+       else if (g_strcasecmp (suf, ".m4v") == 0) type = FILE_TYPE_M4V;
+       else if (g_strcasecmp (suf, ".mp4") == 0) type = FILE_TYPE_MP4;
+       else if (g_strcasecmp (suf, ".mov") == 0) type = FILE_TYPE_MOV;
+       else if (g_strcasecmp (suf, ".mpg") == 0) type = FILE_TYPE_MPG;
+       else if (g_strcasecmp (suf, ".mpeg") == 0) type = FILE_TYPE_MPG;
+
+       else if (g_strcasecmp (suf, ".m3u") == 0) type = FILE_TYPE_M3U;
+       else if (g_strcasecmp (suf, ".pls") == 0) type = FILE_TYPE_PLS;
+    }
+
+    g_free(path_utf8);
+    return type;
 }
 
 
@@ -116,7 +162,7 @@
     gchar *bufp, *plfile_utf8;
     gchar *dirname = NULL, *plname = NULL;
     gchar buf[PATH_MAX];
-    gint type = FILE_TYPE_UNKNOWN; /* type of playlist file */
+    FileType type = FILE_TYPE_UNKNOWN; /* type of playlist file */
     gint line, tracks;
     FILE *fp;
     gboolean error;
@@ -148,6 +194,10 @@
        case FILE_TYPE_M4P:
        case FILE_TYPE_M4B:
        case FILE_TYPE_WAV:
+       case FILE_TYPE_M4V:
+       case FILE_TYPE_MP4:
+       case FILE_TYPE_MOV:
+       case FILE_TYPE_MPG:
            gtkpod_warning (_("'%s' is a not a known playlist file.\n\n"),
                              plfile);
            g_free(plname);
@@ -157,7 +207,7 @@
            break;
        case FILE_TYPE_UNKNOWN:
            /* assume MISC (M3U like) style */
-           type = FILE_TYPE_MISC;
+           type = -2;
            break;
        }
     }
@@ -193,9 +243,8 @@
        ++line;
        if (len == 0) continue;   /* skip empty lines */
        if (bufp[len-1] == 0x0a)  bufp[len-1] = 0;
-       switch (type)
+       if (type == -2)
        {
-       case FILE_TYPE_MISC:
            /* skip whitespace */
            while (isspace (*bufp)) ++bufp;
            /* assume comments start with ';' or '#' */
@@ -203,6 +252,9 @@
            /* assume the rest of the line is a filename */
            filename = concat_dir_if_relative (dirname, bufp);
            break;
+       }
+       else switch (type)
+       {
        case FILE_TYPE_M3U:
            /* comments start with '#' */
            if (*bufp == '#') break;
@@ -228,6 +280,17 @@
                }
            }
            break;
+       case FILE_TYPE_UNKNOWN:
+       case FILE_TYPE_MP3:
+       case FILE_TYPE_M4A:
+       case FILE_TYPE_M4P:
+       case FILE_TYPE_M4B:
+       case FILE_TYPE_WAV:
+       case FILE_TYPE_M4V:
+       case FILE_TYPE_MP4:
+       case FILE_TYPE_MOV:
+       case FILE_TYPE_MPG:
+           break;
        }
        if (filename)
        {
@@ -829,14 +892,29 @@
     {
     case FILE_TYPE_MP3:
        nti = mp3_get_file_info (name);
+       /* Set unk208 to audio */
+       track->unk208 = 0x00000001;
        break;
     case FILE_TYPE_M4A:
     case FILE_TYPE_M4P:
     case FILE_TYPE_M4B:
        nti = mp4_get_file_info (name);
+       /* Set unk208 to audio */
+       track->unk208 = 0x00000001;
        break;
     case FILE_TYPE_WAV:
        nti = wav_get_file_info (name);
+       /* Set unk208 to audio */
+       track->unk208 = 0x00000001;
+       break;
+    case FILE_TYPE_M4V:
+    case FILE_TYPE_MP4:
+    case FILE_TYPE_MOV:
+    case FILE_TYPE_MPG:
+       /* for now treat all the same */
+       nti = video_get_file_info (name);
+       /* Set unk208 to video */
+       track->unk208 = 0x00000002;
        break;
     case FILE_TYPE_UNKNOWN:
        gtkpod_warning (_("The following track could not be processed (filetype 
unknown): '%s'\n"), name_utf8);
@@ -1800,6 +1878,11 @@
          case FILE_TYPE_M4A:
          case FILE_TYPE_M4P:
          case FILE_TYPE_M4B:
+         case FILE_TYPE_WAV:
+         case FILE_TYPE_M4V:
+         case FILE_TYPE_MP4:
+         case FILE_TYPE_MOV:
+         case FILE_TYPE_MPG:
          case FILE_TYPE_UNKNOWN:
                  break;
   }
@@ -1961,23 +2044,36 @@
 /* Call the correct tag writing function for the filename @name */
 static gboolean file_write_info (gchar *name, Track *track)
 {
-    if (name && track)
+    gchar *buf;
+
+    g_return_val_if_fail (name, FALSE);
+    g_return_val_if_fail (track, FALSE);
+
+    switch (determine_file_type(name))
     {
-        switch (determine_file_type(name)) {
-           case FILE_TYPE_MP3:
-               return mp3_write_file_info (name, track);
-           case FILE_TYPE_M4A:
-           case FILE_TYPE_M4P:
-           case FILE_TYPE_M4B:
-               return mp4_write_file_info (name, track);
-           case FILE_TYPE_WAV:
-               return wav_write_file_info (name, track);
-           case FILE_TYPE_M3U:
-           case FILE_TYPE_PLS:
-           case FILE_TYPE_UNKNOWN:
-               break;
-       }
+    case FILE_TYPE_MP3:
+       return mp3_write_file_info (name, track);
+    case FILE_TYPE_M4A:
+    case FILE_TYPE_M4P:
+    case FILE_TYPE_M4B:
+       return mp4_write_file_info (name, track);
+    case FILE_TYPE_WAV:
+       return wav_write_file_info (name, track);
+    case FILE_TYPE_M4V:
+    case FILE_TYPE_MP4:
+    case FILE_TYPE_MOV:
+    case FILE_TYPE_MPG:
+       buf = get_track_info (track, FALSE);
+       gtkpod_warning (_("Writing to video files not yet supported (%s).\n\n"),
+                       buf);
+       g_free (buf);
+       break;
+    case FILE_TYPE_M3U:
+    case FILE_TYPE_PLS:
+    case FILE_TYPE_UNKNOWN:
+       break;
     }
+
     return FALSE;
 }
 
@@ -2443,9 +2539,14 @@
 /* Set the gain value in @track. Return value: TRUE, if gain could be set */
 gboolean get_gain (Track *track) 
 {
-    gchar *path = get_file_name_verified (track);
+    gchar *path;
+    gchar *buf;
     gboolean result = FALSE;
 
+    g_return_val_if_fail (track, FALSE);
+
+    path = get_file_name_verified (track);
+
     if (path)
     {
        switch (determine_file_type (path))
@@ -2457,9 +2558,16 @@
        case FILE_TYPE_M4P: /* FIXME */
        case FILE_TYPE_M4B: /* FIXME */
        case FILE_TYPE_WAV: /* FIXME */
-       case FILE_TYPE_UNKNOWN: 
+       case FILE_TYPE_M4V:
+       case FILE_TYPE_MP4:
+       case FILE_TYPE_MOV:
+       case FILE_TYPE_MPG:
+       case FILE_TYPE_UNKNOWN:
+           buf = get_track_info (track, FALSE);
            gtkpod_warning (
-               _("Normalization failed: file type not supported.\n"));
+               _("Normalization failed: file type not supported (%s).\n\n"),
+               buf);
+           g_free (buf);
            break;
        case FILE_TYPE_M3U: 
        case FILE_TYPE_PLS: 
@@ -2469,8 +2577,10 @@
     }
     else
     {
+       buf = get_track_info (track, FALSE);
        gtkpod_warning (
-           _("Normalization failed: file not available.\n"));
+           _("Normalization failed: file not available (%s).\n\n"),
+           buf);
     }
     return result;
 }

Index: file.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- file.h      20 Jun 2005 14:32:06 -0000      1.45
+++ file.h      19 Nov 2005 05:32:10 -0000      1.46
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-06-20 23:05:05 jcs>
+/* Time-stamp: <2005-11-19 13:46:14 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -39,16 +39,19 @@
 #include "itdb.h"
 
 
-/* values below -1 are private to individual functions */
+/* values below -1 may be used in individual functions */
 typedef enum
 {
-    FILE_TYPE_MISC = -2,
     FILE_TYPE_UNKNOWN = 0,
     FILE_TYPE_MP3,
     FILE_TYPE_M4A,
     FILE_TYPE_M4P,
     FILE_TYPE_M4B,
     FILE_TYPE_WAV,
+    FILE_TYPE_M4V,
+    FILE_TYPE_MP4,
+    FILE_TYPE_MOV,
+    FILE_TYPE_MPG,
     FILE_TYPE_M3U,
     FILE_TYPE_PLS
 } FileType;
@@ -63,7 +66,7 @@
 
 typedef void (*AddTrackFunc)(Playlist *plitem, Track *track, gpointer data);
 
-gint determine_file_type(gchar *path);
+FileType determine_file_type(gchar *path);
 gboolean add_track_by_filename (iTunesDB *itdb, gchar *name,
                                Playlist *plitem, gboolean descend,
                                AddTrackFunc addtrackfunc, gpointer data);

Index: file_itunesdb.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file_itunesdb.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -d -r1.68 -r1.69
--- file_itunesdb.c     13 Nov 2005 07:34:34 -0000      1.68
+++ file_itunesdb.c     19 Nov 2005 05:32:10 -0000      1.69
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-13 16:21:35 jcs>
+/* Time-stamp: <2005-11-19 13:46:13 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -580,6 +580,9 @@
        /* set new default value for flag1 (unknown) */
        if (track->flag1 == 0)
            track->flag1 = 0x02;
+       /* set unk208 to audio if unset (important only for iPod Video) */
+       if (track->unk208 == 0)
+           track->unk208 = 0x00000001;
        ++num;
     }
     /* take over the pending deletion information */

Index: misc.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/misc.c,v
retrieving revision 1.186
retrieving revision 1.187
diff -u -d -r1.186 -r1.187
--- misc.c      12 Nov 2005 08:54:31 -0000      1.186
+++ misc.c      19 Nov 2005 05:32:10 -0000      1.187
@@ -1,5 +1,5 @@
 /* -*- coding: utf-8; -*-
-|  Time-stamp: <2005-11-12 15:54:12 jcs>
+|  Time-stamp: <2005-11-19 14:31:11 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -160,6 +160,9 @@
 Nick Piper: sync script for Palm, type-ahead search\n"),
                       "\n",
                       _("\
+Uwe Hermann: help with support for iPod Video\n"),
+                      "\n",
+                      _("\
 Icons of buttons were made by Nicolas Chariot.\n\
 \n\
 \n"),

Index: misc_track.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/misc_track.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- misc_track.c        13 Nov 2005 07:34:34 -0000      1.29
+++ misc_track.c        19 Nov 2005 05:32:10 -0000      1.30
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-13 16:29:42 jcs>
+/* Time-stamp: <2005-11-19 13:48:31 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -829,7 +829,7 @@
                }
                if (g_file_test (decoded_file, G_FILE_TEST_IS_REGULAR))
                {   /* regular file */
-                   gint ftype = determine_file_type (decoded_file);
+                   FileType ftype = determine_file_type (decoded_file);
                    switch (ftype)
                    {
                    case FILE_TYPE_MP3:
@@ -837,6 +837,10 @@
                    case FILE_TYPE_M4P:
                    case FILE_TYPE_M4B:
                    case FILE_TYPE_WAV:
+                   case FILE_TYPE_M4V:
+                   case FILE_TYPE_MP4:
+                   case FILE_TYPE_MOV:
+                   case FILE_TYPE_MPG:
                        if (!pl)
                        {  /* no playlist yet -- create new one */
                            pl = add_new_pl_user_name (itdb, NULL,



-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.  Get Certified Today
Register for a JBoss Training Course.  Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to