static void decode_comment_header(void) { char comment[MAX_COMMENT_LENGTH]; decode_comment(comment); //printf("VENDOR=%s\n", comment); uint32_t num_comments = read_unsigned_value(32); for(unsigned int i = 0; i < num_comments; i++) { decode_comment(comment); //printf("%s\n", comment); } }
gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle) { gint version, header_size, data_size; gboolean syncsafe; gsize offset; gint pos; if (! read_header (handle, & version, & syncsafe, & offset, & header_size, & data_size)) return FALSE; TAGDBG("Reading tags from %i bytes of ID3 data in %s\n", data_size, handle->uri); for (pos = 0; pos < data_size; ) { gint frame_size, size, id; gchar key[5]; guchar * data; if (! read_frame (handle, data_size - pos, version, syncsafe, & frame_size, key, & data, & size)) { TAGDBG("read_frame failed at pos %i\n", pos); break; } id = get_frame_id (key); switch (id) { case ID3_ALBUM: associate_string (tuple, FIELD_ALBUM, NULL, data, size); break; case ID3_TITLE: associate_string (tuple, FIELD_TITLE, NULL, data, size); break; case ID3_COMPOSER: associate_string (tuple, FIELD_COMPOSER, NULL, data, size); break; case ID3_COPYRIGHT: associate_string (tuple, FIELD_COPYRIGHT, NULL, data, size); break; case ID3_DATE: associate_string (tuple, FIELD_DATE, NULL, data, size); break; case ID3_LENGTH: associate_int (tuple, FIELD_LENGTH, NULL, data, size); break; case ID3_FUCKO_ARTIST: case ID3_ARTIST: associate_string (tuple, FIELD_ARTIST, NULL, data, size); break; case ID3_TRACKNR: associate_int (tuple, FIELD_TRACK_NUMBER, NULL, data, size); break; case ID3_YEAR: associate_int (tuple, FIELD_YEAR, NULL, data, size); break; case ID3_GENRE: decode_genre (tuple, data, size); break; case ID3_COMMENT: decode_comment (tuple, data, size); break; case ID3_ENCODER: associate_string (tuple, -1, "encoder", data, size); break; case ID3_TXX: decode_txx (tuple, data, size); break; case ID3_RVA: decode_rva (tuple, data, size); break; default: TAGDBG ("Ignoring unsupported ID3 frame %s.\n", key); break; } g_free (data); pos += frame_size; } return TRUE; }
static gboolean id3v24_read_tag (Tuple * tuple, VFSFile * handle) { gint version, header_size, data_size, footer_size; gboolean syncsafe; gint64 offset; gint pos; if (! read_header (handle, & version, & syncsafe, & offset, & header_size, & data_size, & footer_size)) return FALSE; for (pos = 0; pos < data_size; ) { gint frame_size, size, id; gchar key[5]; guchar * data; if (! read_frame (handle, data_size - pos, version, syncsafe, & frame_size, key, & data, & size)) break; id = get_frame_id (key); switch (id) { case ID3_ALBUM: associate_string (tuple, FIELD_ALBUM, NULL, data, size); break; case ID3_TITLE: associate_string (tuple, FIELD_TITLE, NULL, data, size); break; case ID3_COMPOSER: associate_string (tuple, FIELD_COMPOSER, NULL, data, size); break; case ID3_COPYRIGHT: associate_string (tuple, FIELD_COPYRIGHT, NULL, data, size); break; case ID3_DATE: associate_string (tuple, FIELD_DATE, NULL, data, size); break; case ID3_TIME: associate_int (tuple, FIELD_LENGTH, NULL, data, size); break; case ID3_LENGTH: associate_int (tuple, FIELD_LENGTH, NULL, data, size); break; case ID3_ARTIST: associate_string (tuple, FIELD_ARTIST, NULL, data, size); break; case ID3_TRACKNR: associate_int (tuple, FIELD_TRACK_NUMBER, NULL, data, size); break; case ID3_YEAR: case ID3_RECORDING_TIME: associate_int (tuple, FIELD_YEAR, NULL, data, size); break; case ID3_GENRE: decode_genre (tuple, data, size); break; case ID3_COMMENT: decode_comment (tuple, data, size); break; case ID3_PRIVATE: decode_private_info (tuple, data, size); break; case ID3_ENCODER: associate_string (tuple, -1, "encoder", data, size); break; case ID3_TXXX: decode_txxx (tuple, data, size); break; case ID3_RVA2: decode_rva2 (tuple, data, size); break; default: TAGDBG ("Ignoring unsupported ID3 frame %s.\n", key); break; } g_free (data); pos += frame_size; } return TRUE; }