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