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