summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJorg Schuler <jcsjcs@users.sourceforge.net>2006-03-09 14:40:23 +0000
committerJorg Schuler <jcsjcs@users.sourceforge.net>2006-03-09 14:40:23 +0000
commit9d545316f174eb1586b65f7b29d3cd78a63c9513 (patch)
tree7d59f5542d0ec3a4e91f9ec65c698afbaf438c14 /src
parent3b2e480d712d72197e259783a6a52515b9ae4ba4 (diff)
downloadlibgpod-9d545316f174eb1586b65f7b29d3cd78a63c9513.tar.gz
libgpod-9d545316f174eb1586b65f7b29d3cd78a63c9513.tar.xz
libgpod-9d545316f174eb1586b65f7b29d3cd78a63c9513.zip
Undoing the last CVS checkin -- I was in the wrong directory. Sorry for that.
git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@1216 f01d2545-417e-4e96-918e-98f8d0dbbcb6
Diffstat (limited to 'src')
-rw-r--r--src/itdb.h18
-rw-r--r--src/itdb_itunesdb.c324
-rw-r--r--src/itdb_private.h5
3 files changed, 69 insertions, 278 deletions
diff --git a/src/itdb.h b/src/itdb.h
index 984e7c3..d91aae0 100644
--- a/src/itdb.h
+++ b/src/itdb.h
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-03-04 00:39:53 jcs>
+/* Time-stamp: <2005-11-29 00:56:25 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -413,10 +413,7 @@ struct _Itdb_Playlist
{
Itdb_iTunesDB *itdb; /* pointer to iTunesDB (for convenience) */
gchar *name; /* name of playlist in UTF8 */
- guint8 type; /* ITDB_PL_TYPE_NORM/_MPL */
- guint8 flag1; /* unknown, usually set to 0 */
- guint8 flag2; /* unknown, always set to 0 */
- guint8 flag3; /* unknown, always set to 0 */
+ guint32 type; /* ITDB_PL_TYPE_NORM/_MPL */
gint num; /* number of tracks in playlist */
GList *members; /* tracks in playlist (Track *) */
gboolean is_spl; /* smart playlist? */
@@ -550,9 +547,6 @@ struct _Itdb_Track
gint32 tracks; /* number of tracks */
gint32 bitrate; /* bitrate */
guint16 samplerate; /* samplerate (CD: 44100) */
- guint16 samplerate_low; /* in the iTunesDB the samplerate is
- multiplied by 0x10000 -- these are the
- lower 16 bit, which are usually 0 */
gint32 year; /* year */
gint32 volume; /* volume adjustment */
guint32 soundcheck; /* volume adjustment "soundcheck" */
@@ -569,15 +563,14 @@ struct _Itdb_Track
playcount. */
guint32 recent_playcount; /* times track was played since last sync */
gboolean transferred; /* has file been transferred to iPod? */
- gint16 BPM; /* supposed to vary the playback speed */
+ gint16 BPM; /* supposed to vary the playback speed */
guint8 app_rating; /* star rating set by appl. (not
* iPod). If the rating set on the iPod
and the rating field above differ, the
original rating is copied here and the
new rating is stored above. */
- guint8 type1; /* CBR MP3s and AAC are 0x00, VBR MP3s are
- 0x01 */
- guint8 type2; /* MP3s are 0x01, AAC are 0x00 */
+ guint16 type; /* CBR MP3s are type 0x100, VBR MP3s are
+ type 0x101, AAC are type 0x0 */
guint8 compilation;
guint32 starttime;
guint32 stoptime;
@@ -612,6 +605,7 @@ struct _Itdb_Track
here. itdb will set this when adding
a track */
+ guint16 unk060; /* unknown */
guint16 unk126; /* unknown, but always seems to be 0xffff for
MP3/AAC songs, 0x0 for uncompressed songs
(like WAVE format), 0x1 for Audible. itdb
diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c
index c8e93e2..cbea6f3 100644
--- a/src/itdb_itunesdb.c
+++ b/src/itdb_itunesdb.c
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-03-04 00:55:13 jcs>
+/* Time-stamp: <2006-02-14 22:10:45 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -219,7 +219,6 @@ static FContents *fcontents_read (const gchar *fname, GError **error)
g_return_val_if_fail (fname, NULL);
cts = g_new0 (FContents, 1);
- cts->reversed = FALSE;
if (g_file_get_contents (fname, &cts->contents, &cts->length, error))
{
@@ -395,27 +394,6 @@ static gboolean cmp_n_bytes_seek (FContents *cts, const gchar *data,
}
-/* Compare 4 bytes of @header with 4 bytes at @seek taking into
- * consideration the status of cts->reversed */
-static gboolean check_header_seek (FContents *cts, const gchar *data,
- glong seek)
-{
- gchar rdata[4];
- gint i;
-
- /* reverse data for compare if necessary */
- for (i=0; i<4; ++i)
- {
- if (cts->reversed)
- rdata[i] = data[3-i];
- else
- rdata[i] = data[i];
- }
-
- return cmp_n_bytes_seek (cts, rdata, seek, 4);
-}
-
-
/* Returns the 1-byte number stored at position @seek. On error the
* GError in @cts is set. */
static guint8 get8int (FContents *cts, glong seek)
@@ -431,7 +409,7 @@ static guint8 get8int (FContents *cts, glong seek)
/* Get the 2-byte-number stored at position "seek" in little endian
encoding. On error the GError in @cts is set. */
-static guint16 raw_get16lint (FContents *cts, glong seek)
+static guint16 get16lint (FContents *cts, glong seek)
{
guint16 n=0;
@@ -446,7 +424,7 @@ static guint16 raw_get16lint (FContents *cts, glong seek)
/* Get the 3-byte-number stored at position "seek" in little endian
encoding. On error the GError in @cts is set. */
-static guint32 raw_get24lint (FContents *cts, glong seek)
+static guint32 get24lint (FContents *cts, glong seek)
{
guint32 n=0;
@@ -462,7 +440,7 @@ static guint32 raw_get24lint (FContents *cts, glong seek)
/* Get the 4-byte-number stored at position "seek" in little endian
encoding. On error the GError in @cts is set. */
-static guint32 raw_get32lint (FContents *cts, glong seek)
+static guint32 get32lint (FContents *cts, glong seek)
{
guint32 n=0;
@@ -476,7 +454,7 @@ static guint32 raw_get32lint (FContents *cts, glong seek)
}
/* Get 4 byte floating number */
-static float raw_get32lfloat (FContents *cts, glong seek)
+static float get32lfloat (FContents *cts, glong seek)
{
union
{
@@ -486,93 +464,46 @@ static float raw_get32lfloat (FContents *cts, glong seek)
g_return_val_if_fail (sizeof (float) == 4, 0);
- flt.i = raw_get32lint (cts, seek);
+ flt.i = get32lint (cts, seek);
return flt.f;
}
-/* Get the 8-byte-number stored at position "seek" in little endian
- encoding. On error the GError in @cts is set. */
-static guint64 raw_get64lint (FContents *cts, glong seek)
-{
- guint64 n=0;
-
- if (check_seek (cts, seek, 8))
- {
- g_return_val_if_fail (cts->contents, 0);
- memcpy (&n, &cts->contents[seek], 8);
- n = GUINT64_FROM_LE (n);
- }
- return n;
-}
-
-
-/* Get the 2-byte-number stored at position "seek" in little endian
- encoding. On error the GError in @cts is set. */
-static guint16 raw_get16bint (FContents *cts, glong seek)
-{
- guint16 n=0;
-
- if (check_seek (cts, seek, 2))
- {
- g_return_val_if_fail (cts->contents, 0);
- memcpy (&n, &cts->contents[seek], 2);
- n = GUINT16_FROM_BE (n);
- }
- return n;
-}
-
-/* Get the 3-byte-number stored at position "seek" in big endian
+/* Get the 4-byte-number stored at position "seek" in big endian
encoding. On error the GError in @cts is set. */
-static guint32 raw_get24bint (FContents *cts, glong seek)
+static guint32 get32bint (FContents *cts, glong seek)
{
guint32 n=0;
- if (check_seek (cts, seek, 3))
+ if (check_seek (cts, seek, 4))
{
g_return_val_if_fail (cts->contents, 0);
- n = ((guint32)get8int (cts, seek+2)) +
- (((guint32)get8int (cts, seek+1)) >> 8) +
- (((guint32)get8int (cts, seek+0)) >> 16);
+ memcpy (&n, &cts->contents[seek], 4);
+ n = GUINT32_FROM_BE (n);
}
return n;
}
-/* Get the 4-byte-number stored at position "seek" in big endian
+/* Get the 8-byte-number stored at position "seek" in little endian
encoding. On error the GError in @cts is set. */
-static guint32 raw_get32bint (FContents *cts, glong seek)
+static guint64 get64lint (FContents *cts, glong seek)
{
- guint32 n=0;
+ guint64 n=0;
- if (check_seek (cts, seek, 4))
+ if (check_seek (cts, seek, 8))
{
g_return_val_if_fail (cts->contents, 0);
- memcpy (&n, &cts->contents[seek], 4);
- n = GUINT32_FROM_BE (n);
+ memcpy (&n, &cts->contents[seek], 8);
+ n = GUINT64_FROM_LE (n);
}
return n;
}
-/* Get 4 byte floating number */
-static float raw_get32bfloat (FContents *cts, glong seek)
-{
- union
- {
- guint32 i;
- float f;
- } flt;
-
- g_return_val_if_fail (sizeof (float) == 4, 0);
-
- flt.i = raw_get32bint (cts, seek);
-
- return flt.f;
-}
/* Get the 8-byte-number stored at position "seek" in big endian
encoding. On error the GError in @cts is set. */
-static guint64 raw_get64bint (FContents *cts, glong seek)
+static guint64 get64bint (FContents *cts, glong seek)
{
guint64 n=0;
@@ -585,103 +516,6 @@ static guint64 raw_get64bint (FContents *cts, glong seek)
return n;
}
-
-/* The following functions take into consideration the state of
- * cts->reversed and call either raw_getnnlint or raw_getnnbint */
-static guint16 get16lint (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get16lint (cts, seek);
- else
- return raw_get16bint (cts, seek);
-}
-
-#if 0
-static guint16 get16bint (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get16bint (cts, seek);
- else
- return raw_get16lint (cts, seek);
-}
-#endif
-static guint32 get24lint (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get24lint (cts, seek);
- else
- return raw_get24bint (cts, seek);
-}
-#if 0
-static guint32 get24bint (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get24bint (cts, seek);
- else
- return raw_get24lint (cts, seek);
-}
-#endif
-static guint32 get32lint (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get32lint (cts, seek);
- else
- return raw_get32bint (cts, seek);
-}
-
-static guint32 get32bint (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get32bint (cts, seek);
- else
- return raw_get32lint (cts, seek);
-}
-
-static float get32lfloat (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get32lfloat (cts, seek);
- else
- return raw_get32bfloat (cts, seek);
-}
-#if 0
-static float get32bfloat (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get32bfloat (cts, seek);
- else
- return raw_get32lfloat (cts, seek);
-}
-#endif
-static guint64 get64lint (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get64lint (cts, seek);
- else
- return raw_get64bint (cts, seek);
-}
-
-static guint64 get64bint (FContents *cts, glong seek)
-{
- g_return_val_if_fail (cts, 0);
- if (!cts->reversed)
- return raw_get64bint (cts, seek);
- else
- return raw_get64lint (cts, seek);
-}
-
-
-
-
/* Fix little endian UTF16 String to correct byteorder if necessary
* (all strings in the Itdb_iTunesDB are little endian except for the ones
* in smart playlists). */
@@ -755,7 +589,7 @@ static gboolean playcounts_read (FImport *fimp, FContents *cts)
g_return_val_if_fail (fimp, FALSE);
g_return_val_if_fail (cts, FALSE);
- if (!check_header_seek (cts, "mhdp", 0))
+ if (!cmp_n_bytes_seek (cts, "mhdp", 0, 4))
{
if (cts->error)
{
@@ -1093,7 +927,7 @@ static gint32 get_mhod_type (FContents *cts, glong seek, guint32 *ml)
if (ml) *ml = -1;
- if (check_header_seek (cts, "mhod", seek))
+ if (cmp_n_bytes_seek (cts, "mhod", seek, 4))
{
guint32 len = get32lint (cts, seek+8); /* total length */
if (cts->error) return -1;
@@ -1126,7 +960,6 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml)
gint32 xl;
guint32 mhod_len;
gint32 header_length;
- guint32 string_type;
gulong seek;
result.valid = FALSE;
@@ -1155,12 +988,8 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml)
}
return result;
}
-
- if (!check_seek (cts, mhod_seek, mhod_len))
- return result;
-
-
header_length = get32lint (cts, mhod_seek+4); /* header length */
+ if (cts->error) return result;
seek = mhod_seek + header_length;
@@ -1175,6 +1004,7 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml)
case MHOD_ID_PLAYLIST:
/* return the position indicator */
result.data.track_pos = get32lint (cts, mhod_seek+24);
+ if (cts->error) return result; /* *ml==-1, result.valid==FALSE */
break;
case MHOD_ID_TITLE:
case MHOD_ID_PATH:
@@ -1188,40 +1018,28 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml)
case MHOD_ID_GROUPING:
case MHOD_ID_DESCRIPTION:
case MHOD_ID_SUBTITLE:
- /* type of string: 0x02: UTF8, 0x01 or 0x00: UTF16 LE */
- string_type = get32lint (cts, seek);
xl = get32lint (cts, seek+4); /* length of string */
+ if (cts->error) return result; /* *ml==-1, result.valid==FALSE */
g_return_val_if_fail (xl < G_MAXUINT - 2, result);
- if (string_type != 0x02)
+ entry_utf16 = g_new0 (gunichar2, (xl+2)/2);
+ if (seek_get_n_bytes (cts, (gchar *)entry_utf16, seek+16, xl))
{
- entry_utf16 = g_new0 (gunichar2, (xl+2)/2);
- if (seek_get_n_bytes (cts, (gchar *)entry_utf16, seek+16, xl))
- {
- fixup_little_utf16 (entry_utf16);
- result.data.string = g_utf16_to_utf8 (entry_utf16, -1,
- NULL, NULL, NULL);
- g_free (entry_utf16);
- }
- else
- { /* error */
- g_free (entry_utf16);
- return result; /* *ml==-1, result.valid==FALSE */
- }
+ fixup_little_utf16 (entry_utf16);
+ result.data.string = g_utf16_to_utf8 (entry_utf16, -1,
+ NULL, NULL, NULL);
+ g_free (entry_utf16);
}
else
- {
- result.data.string = g_new0 (gchar, xl+1);
- if (!seek_get_n_bytes (cts, result.data.string, seek+16, xl))
- { /* error */
- g_free (entry_utf16);
- return result; /* *ml==-1, result.valid==FALSE */
- }
+ { /* error */
+ g_free (entry_utf16);
+ return result; /* *ml==-1, result.valid==FALSE */
}
break;
case MHOD_ID_PODCASTURL:
case MHOD_ID_PODCASTRSS:
/* length of string */
xl = mhod_len - header_length;
+ if (cts->error) return result; /* *ml==-1, result.valid==FALSE */
g_return_val_if_fail (xl < G_MAXUINT - 1, result);
result.data.string = g_new0 (gchar, xl+1);
if (!seek_get_n_bytes (cts, result.data.string, seek, xl))
@@ -1257,7 +1075,7 @@ static MHODData get_mhod (FContents *cts, glong mhod_seek, guint32 *ml)
result.data.splpref->limitsort |= 0x80000000;
break;
case MHOD_ID_SPLRULES: /* Rules for smart playlist */
- if (check_header_seek (cts, "SLst", seek))
+ if (cmp_n_bytes_seek (cts, "SLst", seek, 4))
{
/* !!! for some reason the SLst part is the only part of the
iTunesDB with big-endian encoding, including UTF16
@@ -1489,7 +1307,7 @@ static glong find_next_a_in_b (FContents *cts,
/* printf ("offset: %lx, b_len: %lx, bseek+offset: %lx\n", */
/* offset, b_len, b_seek+offset); */
} while ((offset < b_len-4) &&
- !check_header_seek (cts, a, b_seek+offset));
+ !cmp_n_bytes_seek (cts, a, b_seek+offset, 4));
if (cts->error) return -1;
if (offset >= b_len) return -1;
@@ -1515,21 +1333,17 @@ static glong find_mhsd (FContents *cts, guint32 type)
guint32 i, len, mhsd_num;
glong seek;
- if (!check_header_seek (cts, "mhbd", 0))
+ if (!cmp_n_bytes_seek (cts, "mhbd", 0, 4))
{
- cts->reversed = TRUE;
- if (!check_header_seek (cts, "mhbd", 0))
- {
- if (!cts->error)
- { /* set error */
- g_set_error (&cts->error,
- ITDB_FILE_ERROR,
- ITDB_FILE_ERROR_CORRUPT,
- _("Not a iTunesDB: '%s' (missing mhdb header)."),
- cts->filename);
- }
- return 0;
+ if (!cts->error)
+ { /* set error */
+ g_set_error (&cts->error,
+ ITDB_FILE_ERROR,
+ ITDB_FILE_ERROR_CORRUPT,
+ _("Not a iTunesDB: '%s' (missing mhdb header)."),
+ cts->filename);
}
+ return 0;
}
len = get32lint (cts, 4);
if (cts->error) return 0;
@@ -1556,7 +1370,7 @@ static glong find_mhsd (FContents *cts, guint32 type)
guint32 mhsd_type;
seek += len;
- if (!check_header_seek (cts, "mhsd", seek))
+ if (!cmp_n_bytes_seek (cts, "mhsd", seek, 4))
{
if (!cts->error)
{ /* set error */
@@ -1608,7 +1422,7 @@ static glong get_mhip (FImport *fimp, Itdb_Playlist *plitem,
cts = fimp->itunesdb;
- if (!check_header_seek (cts, "mhip", mhip_seek))
+ if (!cmp_n_bytes_seek (cts, "mhip", mhip_seek, 4))
{
CHECK_ERROR (fimp, -1);
return -1;
@@ -1737,7 +1551,7 @@ static glong get_playlist (FImport *fimp, glong mhyp_seek)
cts = fimp->itunesdb;
- if (!check_header_seek (cts, "mhyp", mhyp_seek))
+ if (!cmp_n_bytes_seek (cts, "mhyp", mhyp_seek, 4))
{
if (cts->error)
g_propagate_error (&fimp->error, cts->error);
@@ -1769,10 +1583,7 @@ static glong get_playlist (FImport *fimp, glong mhyp_seek)
/* Some Playlists have added 256 to their type -- I don't know what
it's for, so we just ignore it for now -> & 0xff */
- plitem->type = get8int (cts, mhyp_seek+20);
- plitem->flag1 = get8int (cts, mhyp_seek+20);
- plitem->flag2 = get8int (cts, mhyp_seek+20);
- plitem->flag3 = get8int (cts, mhyp_seek+20);
+ plitem->type = get32lint (cts, mhyp_seek+20) & 0xff;
plitem->timestamp = get32lint (cts, mhyp_seek+24);
plitem->id = get64lint (cts, mhyp_seek+28);
plitem->mhodcount = get32lint (cts, mhyp_seek+36);
@@ -1930,7 +1741,7 @@ static glong get_mhit (FImport *fimp, glong mhit_seek)
cts = fimp->itunesdb;
- if (!check_header_seek (cts, "mhit", seek))
+ if (!cmp_n_bytes_seek (cts, "mhit", seek, 4))
{
if (cts->error)
g_propagate_error (&fimp->error, cts->error);
@@ -1965,12 +1776,10 @@ static glong get_mhit (FImport *fimp, glong mhit_seek)
if (header_len >= 0x9c)
{
- guint32 val32;
track->id = get32lint(cts, seek+16); /* iPod ID */
track->visible = get32lint (cts, seek+20);
seek_get_n_bytes (cts, track->filetype_marker, seek+24, 4);
- track->type1 = get8int (cts, seek+28);
- track->type2 = get8int (cts, seek+29);
+ track->type = get16lint (cts, seek+28);
track->compilation = get8int (cts, seek+30);
track->rating = get8int (cts, seek+31);
track->time_added = get32lint(cts, seek+32); /* time added */
@@ -1980,9 +1789,8 @@ static glong get_mhit (FImport *fimp, glong mhit_seek)
track->tracks = get32lint(cts, seek+48); /* nr of tracks */
track->year = get32lint(cts, seek+52); /* year */
track->bitrate = get32lint(cts, seek+56); /* bitrate */
- val32 = get32lint (cts, seek+60);
- track->samplerate = val32 >> 16; /* sample rate */
- track->samplerate_low = val32 & 0xffff; /* remaining bits */
+ track->unk060 = get32lint(cts, seek+60); /* unknown */
+ track->samplerate = get16lint(cts,seek+62); /* sample rate */
track->volume = get32lint(cts, seek+64); /* volume adjust */
track->starttime = get32lint (cts, seek+68);
track->stoptime = get32lint (cts, seek+72);
@@ -2172,26 +1980,22 @@ static gboolean process_OTG_file (FImport *fimp, FContents *cts,
if (!plname) plname = _("OTG Playlist");
- if (!check_header_seek (cts, "mhpo", 0))
+ if (!cmp_n_bytes_seek (cts, "mhpo", 0, 4))
{
if (cts->error)
{
g_propagate_error (&fimp->error, cts->error);
- return FALSE;
}
- cts->reversed = TRUE;
- if (!check_header_seek (cts, "mhpo", 0))
- {
- /* cts->error can't be set as already checked above */
- /* set error */
+ else
+ { /* set error */
g_return_val_if_fail (cts->filename, FALSE);
g_set_error (&fimp->error,
ITDB_FILE_ERROR,
ITDB_FILE_ERROR_CORRUPT,
_("Not a OTG playlist file: '%s' (missing mhpo header)."),
cts->filename);
- return FALSE;
}
+ return FALSE;
}
header_length = get32lint (cts, 4);
CHECK_ERROR (fimp, FALSE);
@@ -2330,7 +2134,7 @@ static gboolean parse_tracks (FImport *fimp, glong mhsd_seek)
cts = fimp->itunesdb;
- g_return_val_if_fail (check_header_seek (cts, "mhsd", mhsd_seek),
+ g_return_val_if_fail (cmp_n_bytes_seek (cts, "mhsd", mhsd_seek, 4),
FALSE);
/* The mhlt header should be the next after the mhsd header. In
@@ -2390,7 +2194,7 @@ static gboolean parse_playlists (FImport *fimp, glong mhsd_seek)
cts = fimp->itunesdb;
- g_return_val_if_fail (check_header_seek (cts, "mhsd", mhsd_seek),
+ g_return_val_if_fail (cmp_n_bytes_seek (cts, "mhsd", mhsd_seek, 4),
FALSE);
/* The mhlp header should be the next after the mhsd header. In
@@ -2882,8 +2686,7 @@ static void mk_mhit (WContents *cts, Itdb_Track *track)
put32lint (cts, track->visible);
put_data (cts, track->filetype_marker, 4);
- put8int (cts, track->type1);
- put8int (cts, track->type2);
+ put16lint (cts, track->type);
put8int (cts, track->compilation);
put8int (cts, track->rating);
put32lint (cts, track->time_added); /* timestamp */
@@ -2893,8 +2696,8 @@ static void mk_mhit (WContents *cts, Itdb_Track *track)
put32lint (cts, track->tracks); /* number of tracks */
put32lint (cts, track->year); /* the year */
put32lint (cts, track->bitrate); /* bitrate */
- put32lint (cts, (((guint32)track->samplerate)<<16) |
- ((guint32)track->samplerate_low));
+ put16lint (cts, track->unk060); /* unknown */
+ put16lint (cts, track->samplerate);
put32lint (cts, track->volume); /* volume adjust */
put32lint (cts, track->starttime);
put32lint (cts, track->stoptime);
@@ -3576,10 +3379,7 @@ static gboolean write_playlist (FExport *fexp,
put32lint (cts, 2); /* nr of mhods */
/* number of tracks in plist */
put32lint (cts, -1); /* number of mhips -> later */
- put8int (cts, pl->type); /* 1 = main, 0 = visible */
- put8int (cts, pl->flag1); /* unknown */
- put8int (cts, pl->flag2); /* unknown */
- put8int (cts, pl->flag3); /* unknown */
+ put32lint (cts, pl->type); /* 1 = main, 0 = visible */
put32lint (cts, pl->timestamp);/* some timestamp */
put64lint (cts, pl->id); /* 64 bit ID */
pl->mhodcount = 1; /* we only write one mhod type < 50 */
diff --git a/src/itdb_private.h b/src/itdb_private.h
index 42f11bf..82ba9ad 100644
--- a/src/itdb_private.h
+++ b/src/itdb_private.h
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-03-03 22:55:59 jcs>
+/* Time-stamp: <2005-10-15 22:14:26 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -59,9 +59,6 @@ typedef struct
gchar *contents;
gsize length;
GError *error;
- /* indicate that endian order is reversed as in the case of the
- iTunesDBs for mobile phones */
- gboolean reversed;
} FContents;