Revision: 1973
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=1973&view=rev
Author:   jcsjcs
Date:     2008-05-22 06:02:25 -0700 (Thu, 22 May 2008)

Log Message:
-----------
       * src/mp3file.c (mp3_read_gapless):
         - added assertion for track->userdata
         - remove gapless data if file does not contain gapless data.

       * src/file_convert.c: read gapless data after conversion to MP3
         files.

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog
    gtkpod/trunk/src/file_convert.c
    gtkpod/trunk/src/mp3file.c

Modified: gtkpod/trunk/ChangeLog
===================================================================
--- gtkpod/trunk/ChangeLog      2008-05-17 13:38:02 UTC (rev 1972)
+++ gtkpod/trunk/ChangeLog      2008-05-22 13:02:25 UTC (rev 1973)
@@ -1,3 +1,12 @@
+2008-05-17 Jorg Schuler <jcsjcs at users.sourceforge.net>
+
+       * src/mp3file.c (mp3_read_gapless):
+         - added assertion for track->userdata
+         - remove gapless data if file does not contain gapless data.
+
+       * src/file_convert.c: read gapless data after conversion to MP3
+         files.
+       
 2008-05-11 Jorg Schuler <jcsjcs at users.sourceforge.net>
 
        * src/misc_playlist.c: don't allow adding of playlists if iPod is

Modified: gtkpod/trunk/src/file_convert.c
===================================================================
--- gtkpod/trunk/src/file_convert.c     2008-05-17 13:38:02 UTC (rev 1972)
+++ gtkpod/trunk/src/file_convert.c     2008-05-22 13:02:25 UTC (rev 1973)
@@ -38,6 +38,7 @@
 #include "info.h"
 #include "misc.h"
 #include "misc_track.h"
+#include "mp3file.h"
 #include "prefs.h"
 #include <errno.h>
 #include <glib/gstdio.h>
@@ -160,6 +161,16 @@
 static void transfer_reset (Conversion *conv, iTunesDB *itdb);
 static void transfer_reschedule (Conversion *conv, iTunesDB *itdb);
 
+struct GaplessData
+{
+    guint32 pregap;       /* number of pregap samples */
+    guint64 samplecount;  /* number of actual music samples */
+    guint32 postgap;      /* number of postgap samples */
+    guint32 gapless_data; /* number of bytes from the first sync frame
+                          * to the 8th to last frame */
+    guint16 gapless_track_flag;
+};
+
 struct _Conversion
 {
     GMutex *mutex;          /* shared lock                              */
@@ -230,6 +241,7 @@
     gchar *genre;
     gchar *year;
     gchar *comment;
+    struct GaplessData gapless;   /* only used for MP3 */
     /* needed for transfering */
     gchar *dest_filename;
     gchar *mountpoint;
@@ -1493,9 +1505,11 @@
 
            if (ctr->valid)
            {
-               GList *trackgl;
+               GList *trackgl, *tracks;
+
                g_return_val_if_fail (ctr->track, TRUE);
-               GList *tracks = gp_itdb_find_same_tracks_in_itdbs (ctr->track);
+
+               tracks = gp_itdb_find_same_tracks_in_itdbs (ctr->track);
                for (trackgl=tracks; trackgl; trackgl=trackgl->next)
                {
                    ExtraTrackData *etr;
@@ -1522,6 +1536,11 @@
                        etr->converted_file = g_strdup (ctr->converted_file);
                        etr->conversion_status = FILE_CONVERT_CONVERTED;
                        tr->size = ctr->converted_size;
+                       tr->pregap = ctr->gapless.pregap;
+                       tr->samplecount = ctr->gapless.samplecount;
+                       tr->postgap = ctr->gapless.postgap;
+                       tr->gapless_data = ctr->gapless.gapless_data;
+                       tr->gapless_track_flag = 
ctr->gapless.gapless_track_flag;
                        pm_track_changed (tr);
                        data_changed (tr->itdb);
                    }
@@ -2404,6 +2423,51 @@
        }
     }
 
+    /* Fill in additional info (currently only gapless info for MP3s */
+    if (result == TRUE)
+    {
+       Track *track;
+       gboolean retval;
+
+       switch (determine_file_type (ctr->converted_file))
+       {
+        case FILE_TYPE_UNKNOWN:
+        case FILE_TYPE_M4P:
+        case FILE_TYPE_M4B:
+        case FILE_TYPE_M4V:
+        case FILE_TYPE_MP4:
+        case FILE_TYPE_MOV:
+        case FILE_TYPE_MPG:
+        case FILE_TYPE_M3U:
+        case FILE_TYPE_PLS:
+        case FILE_TYPE_IMAGE:
+        case FILE_TYPE_DIRECTORY:
+        case FILE_TYPE_M4A:
+        case FILE_TYPE_WAV:
+        case FILE_TYPE_OGG:
+        case FILE_TYPE_FLAC:
+            break;
+        case FILE_TYPE_MP3:
+           g_mutex_unlock (conv->mutex);
+
+           track = gp_track_new ();
+           retval = mp3_read_gapless (ctr->converted_file, track);
+
+           g_mutex_lock (conv->mutex);
+
+           if (ctr->valid && (retval == TRUE))
+           {
+               ctr->gapless.pregap = track->pregap;
+               ctr->gapless.samplecount = track->samplecount;
+               ctr->gapless.postgap = track->postgap;
+               ctr->gapless.gapless_data = track->gapless_data;
+               ctr->gapless.gapless_track_flag = track->gapless_track_flag;
+           }
+           itdb_track_free (track);
+            break;
+       }
+    }
+
     g_mutex_unlock (conv->mutex);
 
     return result;

Modified: gtkpod/trunk/src/mp3file.c
===================================================================
--- gtkpod/trunk/src/mp3file.c  2008-05-17 13:38:02 UTC (rev 1972)
+++ gtkpod/trunk/src/mp3file.c  2008-05-22 13:02:25 UTC (rev 1973)
@@ -1,4 +1,4 @@
-/* Time-stamp: <2007-12-11 21:31:57 jcs>
+/* Time-stamp: <2008-05-17 12:00:49 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -2462,6 +2462,8 @@
 
     etr = track->userdata;
 
+    g_return_val_if_fail (etr, FALSE);
+
     memset (&gd, 0, sizeof (GaplessData));
 
 
@@ -2493,20 +2495,34 @@
 
        if ((gd.pregap) && (gd.samplecount) && (gd.postgap) && 
(gd.gapless_data))
        {
-           if ((track->pregap != lt.delay) ||
+           if ((track->pregap != gd.pregap) ||
                (track->samplecount != gd.samplecount) ||
-               (track->postgap != lt.padding) ||
+               (track->postgap != gd.postgap) ||
                (track->gapless_data != gd.gapless_data) ||
                (track->gapless_track_flag == FALSE))
            {
                etr->tchanged = TRUE;
-               track->pregap = lt.delay;
+               track->pregap = gd.pregap;
                track->samplecount = gd.samplecount;
-               track->postgap = lt.padding;
+               track->postgap = gd.postgap;
                track->gapless_data = gd.gapless_data;
                track->gapless_track_flag = TRUE;
            }
        }
+       else
+       {   /* remove gapless data which doesn't seem to be valid any
+            * more */
+           if (track->gapless_track_flag == TRUE)
+           {
+               etr->tchanged = TRUE;
+           }
+           track->pregap = 0;
+           track->samplecount = 0;
+           track->postgap = 0;
+           track->gapless_data = 0;
+           track->gapless_track_flag = FALSE;
+       }
+           
        fclose(file);
        return TRUE;
     }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to