/* * Copyright (C) 2005 Christophe Fergeau * * * The code contained in this file is free software; you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either version * 2.1 of the License, or (at your option) any later version. * * This file is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this code; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * iTunes and iPod are trademarks of Apple * * This product is not supported/written/published by Apple! * */ #include "db-artwork-debug.h" /* FIXME: endianness (whole file) */ #ifdef DEBUG_ARTWORKDB G_GNUC_INTERNAL void dump_mhif (MhifHeader *mhif) { g_print ("MHIF (%zd):\n", sizeof (MhifHeader)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhif->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhif->total_len)); g_print ("\tUnknown1: %08x\n", GINT_FROM_LE (mhif->unknown1)); g_print ("\tFormat ID: %d (=> F%d_1.ithmb)\n", GINT_FROM_LE (mhif->format_id), GINT_FROM_LE (mhif->format_id)); g_print ("\tImage size: %d bytes\n", GINT_FROM_LE (mhif->image_size)); } G_GNUC_INTERNAL void dump_mhia (MhiaHeader *mhia) { g_print ("MHIA (%zd):\n", sizeof (MhiaHeader)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhia->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhia->total_len)); g_print ("\tUnknown1: %08x\n", GINT_FROM_LE (mhia->unknown1)); g_print ("\tImage ID: %08x\n", GINT_FROM_LE (mhia->image_id)); } static char * get_utf16_string (void* buffer, gint length) { char *result; gunichar2 *tmp; int i; /* Byte-swap the utf16 characters if necessary (I'm relying * on gcc to optimize most of this code away on LE platforms) */ tmp = g_memdup (buffer, length); for (i = 0; i < length/2; i++) { tmp[i] = GINT16_FROM_LE (tmp[i]); } result = g_utf16_to_utf8 (tmp, length/2, NULL, NULL, NULL); g_free (tmp); return result; } G_GNUC_INTERNAL void dump_mhod_string (ArtworkDB_MhodHeaderString *mhod) { gchar *str; g_print ("MHOD [artwork type string] (%zd):\n", sizeof (ArtworkDB_MhodHeaderString)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhod->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhod->total_len)); g_print ("\tPadding: %04x\n", GINT_FROM_LE (mhod->padding_len)); g_print ("\tType: %04x\n", GINT_FROM_LE (mhod->type)); g_print ("\tUnknown1: %08x\n", GINT_FROM_LE (mhod->unknown1)); g_print ("\tUnknown2: %08x\n", GINT_FROM_LE (mhod->unknown2)); g_print ("\tString length: %u\n", GINT_FROM_LE (mhod->string_len)); g_print ("\tEncoding: %u\n", GINT_FROM_LE (mhod->encoding)); g_print ("\tUnknown4: %08x\n", GINT_FROM_LE (mhod->unknown4)); str = get_utf16_string (mhod->string, GINT_FROM_LE (mhod->string_len)); g_print ("\tString: %s\n", str); g_free (str); } G_GNUC_INTERNAL void dump_mhni (MhniHeader *mhni) { unsigned int width = GINT16_FROM_LE (mhni->image_width); unsigned int height = GINT16_FROM_LE (mhni->image_height); g_print ("MHNI (%zd):\n", sizeof (MhniHeader)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhni->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhni->total_len)); g_print ("\tNumber of children: %08x\n", GINT_FROM_LE (mhni->num_children)); g_print ("\tFormat ID: %d (=> F%d_1.ithmb)\n", GINT_FROM_LE (mhni->format_id), GINT_FROM_LE (mhni->format_id)); g_print ("\tithmb offset: %u bytes\n", GINT_FROM_LE (mhni->ithmb_offset)); g_print ("\tImage size: %u bytes\n", GINT_FROM_LE (mhni->image_size)); g_print ("\tVertical padding: %d\n", GINT16_FROM_LE (mhni->vertical_padding)); g_print ("\tHorizontal padding: %d\n", GINT16_FROM_LE (mhni->horizontal_padding)); g_print ("\tImage dimensions: %ux%u\n", width, height); } G_GNUC_INTERNAL void dump_mhod (ArtworkDB_MhodHeader *mhod) { g_print ("MHOD (%zd):\n", sizeof (ArtworkDB_MhodHeader)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhod->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhod->total_len)); g_print ("\tType: %08x\n", GINT_FROM_LE (mhod->type)); g_print ("\tUnknown1: %08x\n", GINT_FROM_LE (mhod->unknown1)); g_print ("\tUnknown2: %08x\n", GINT_FROM_LE (mhod->unknown2)); } G_GNUC_INTERNAL void dump_mhii (MhiiHeader *mhii) { g_print ("MHII (%zd):\n", sizeof (MhiiHeader)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhii->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhii->total_len)); g_print ("\tNumber of children: %d\n", GINT_FROM_LE (mhii->num_children)); g_print ("\tImage ID: %08x\n", GINT_FROM_LE (mhii->image_id)); g_print ("\tSong ID: %016"G_GINT64_MODIFIER"x\n", GINT64_FROM_LE (mhii->song_id)); g_print ("\tUnknown4: %08x\n", GINT_FROM_LE (mhii->unknown4)); g_print ("\tRating: %08x\n", GINT_FROM_LE (mhii->rating)); g_print ("\tUnknown6: %08x\n", GINT_FROM_LE (mhii->unknown6)); g_print ("\tOrig Date: %08x\n", GINT_FROM_LE (mhii->orig_date)); g_print ("\tDigitised Date: %08x\n", GINT_FROM_LE (mhii->digitized_date)); g_print ("\tImage size: %d bytes\n", GINT_FROM_LE (mhii->orig_img_size)); } G_GNUC_INTERNAL void dump_mhl (MhlHeader *mhl, const char *id) { GString *str; str = g_string_new (id); g_string_ascii_up (str); g_print ("%s (%zd):\n", str->str, sizeof (MhlHeader)); g_print ("\tHeader size: %d\n", GINT_FROM_LE (mhl->header_len)); g_print ("\tNumber of items: %d\n", GINT_FROM_LE (mhl->num_children)); g_string_free (str, TRUE); } G_GNUC_INTERNAL void dump_mhsd (ArtworkDB_MhsdHeader *mhsd) { g_print ("MHSD (%zd):\n", sizeof (ArtworkDB_MhsdHeader)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhsd->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhsd->total_len)); g_print ("\tIndex: %d ", GINT16_FROM_LE (mhsd->index)); switch (GINT16_FROM_LE (mhsd->index)) { case MHSD_IMAGE_LIST: g_print ("(Image list)\n"); break; case MHSD_ALBUM_LIST: g_print ("(Album list)\n"); break; case MHSD_FILE_LIST: g_print ("(File list)\n"); break; default: g_print ("(Unknown index\n"); break; } } G_GNUC_INTERNAL void dump_mhfd (MhfdHeader *mhfd) { g_print ("MHFD (%zd):\n", sizeof (MhfdHeader)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhfd->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhfd->total_len)); g_print ("\tUnknown1: %08x\n", GINT_FROM_LE (mhfd->unknown1)); g_print ("\tUnknown2: %08x\n", GINT_FROM_LE (mhfd->unknown2)); g_print ("\tNumber of children: %d\n", GINT_FROM_LE (mhfd->num_children)); g_print ("\tUnknown3: %08x\n", GINT_FROM_LE (mhfd->unknown3)); g_print ("\tNext id: %08x\n", GINT_FROM_LE (mhfd->next_id)); g_print ("\tUnknown5: %016"G_GINT64_MODIFIER"x\n", GINT64_FROM_LE (mhfd->unknown5)); g_print ("\tUnknown6: %016"G_GINT64_MODIFIER"x\n", GINT64_FROM_LE (mhfd->unknown6)); g_print ("\tunknown_flag1: %04x\n", GINT_FROM_LE (mhfd->unknown_flag1)); g_print ("\tUnknown8: %08x\n", GINT_FROM_LE (mhfd->unknown8)); g_print ("\tUnknown9: %08x\n", GINT_FROM_LE (mhfd->unknown9)); g_print ("\tUnknown10: %08x\n", GINT_FROM_LE (mhfd->unknown10)); g_print ("\tUnknown11: %08x\n", GINT_FROM_LE (mhfd->unknown11)); } G_GNUC_INTERNAL void dump_mhba (MhbaHeader *mhba) { g_print ("MHBA (%zd):\n", sizeof (MhbaHeader)); g_print ("\tHeader length: %d\n", GINT_FROM_LE (mhba->header_len)); g_print ("\tTotal length: %d\n", GINT_FROM_LE (mhba->total_len)); g_print ("\tNumber of Data Objects: %d\n", GINT_FROM_LE (mhba->num_mhods)); g_print ("\tNumber of pictures in the album: %d\n", GINT_FROM_LE (mhba->num_mhias)); g_print ("\tAlbum ID: %08x\n", GINT_FROM_LE (mhba->album_id)); g_print ("\tUnk024: %04x\n", GINT_FROM_LE (mhba->unk024)); g_print ("\tUnk028: %04x\n", GINT16_FROM_LE (mhba->unk028)); g_print ("\tAlbum type: %02x\n", GUINT_FROM_LE (mhba->album_type)); g_print ("\tPlay music: %02x\n", GUINT_FROM_LE (mhba->playmusic)); g_print ("\tRepeat: %02x\n", GUINT_FROM_LE (mhba->repeat)); g_print ("\tRandom: %02x\n", GUINT_FROM_LE (mhba->random)); g_print ("\tShow titles: %02x\n", GUINT_FROM_LE (mhba->show_titles)); g_print ("\tTransition direction: %02x\n", GUINT_FROM_LE (mhba->transition_direction)); g_print ("\tSlide duration: %08x\n", GINT_FROM_LE (mhba->slide_duration)); g_print ("\tTransition duration: %08x\n", GINT_FROM_LE (mhba->transition_duration)); g_print ("\tUnk044: %02x\n", GINT_FROM_LE (mhba->unk044)); g_print ("\tUnk048: %02x\n", GINT_FROM_LE (mhba->unk048)); g_print ("\tSong ID: %08x\n", GINT_FROM_LE (mhba->song_id)); g_print ("\tPrevious album ID: %08x\n", GINT_FROM_LE (mhba->prev_album_id)); } #endif