rendered paste bodycommit f28eac4a1b603f27a13fe7ea427bcd50b91bc180Author: Nicolas Pennequin <nicolas.pennequin@free.fr>Date: Tue Aug 7 19:54:05 2007 +0200 Make get_metadata act on a struct mp3entry rather than a struct track_info. This should make it easy to use a buffer handle to put the ID3 data in. The changes in get_metadata are mostly search and replace. The only thing it actually used to do on the struct track_info was set taginfo_ready to true.diff --git a/apps/metadata.c b/apps/metadata.cindex 15813c6..72f3b6f 100644--- a/apps/metadata.c+++ b/apps/metadata.c@@ -99,7 +99,7 @@ unsigned int probe_file_format(const char *filename) /* Get metadata for track - return false if parsing showed problems with the * file that would prevent playback. */-bool get_metadata(struct track_info* track, int fd, const char* trackname,+bool get_metadata(struct mp3entry* id3, int fd, const char* trackname, bool v1first) { #if CONFIG_CODEC == SWCODEC@@ -109,15 +109,15 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, #endif /* Take our best guess at the codec type based on file extension */- track->id3.codectype = probe_file_format(trackname);+ id3->codectype = probe_file_format(trackname); /* Load codec specific track tag information and confirm the codec type. */- switch (track->id3.codectype) + switch (id3->codectype) { case AFMT_MPA_L1: case AFMT_MPA_L2: case AFMT_MPA_L3:- if (!get_mp3_metadata(fd, &track->id3, trackname, v1first))+ if (!get_mp3_metadata(fd, id3, trackname, v1first)) { return false; }@@ -126,7 +126,7 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, #if CONFIG_CODEC == SWCODEC case AFMT_FLAC:- if (!get_flac_metadata(fd, &(track->id3)))+ if (!get_flac_metadata(fd, id3)) { return false; }@@ -134,28 +134,28 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, break; case AFMT_WMA:- if (!get_asf_metadata(fd, &(track->id3)))+ if (!get_asf_metadata(fd, id3)) { return false; } break; case AFMT_APE:- if (!get_monkeys_metadata(fd, &(track->id3)))+ if (!get_monkeys_metadata(fd, id3)) { return false; }- read_ape_tags(fd, &(track->id3));+ read_ape_tags(fd, id3); break; case AFMT_MPC:- if (!get_musepack_metadata(fd, &(track->id3)))+ if (!get_musepack_metadata(fd, id3)) return false;- read_ape_tags(fd, &(track->id3));+ read_ape_tags(fd, id3); break; case AFMT_OGG_VORBIS:- if (!get_vorbis_metadata(fd, &(track->id3)))/*detects and handles Ogg/Speex files*/+ if (!get_vorbis_metadata(fd, id3))/*detects and handles Ogg/Speex files*/ { return false; }@@ -163,7 +163,7 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, break; case AFMT_SPEEX:- if (!get_speex_metadata(fd, &(track->id3)))+ if (!get_speex_metadata(fd, id3)) { return false; }@@ -171,7 +171,7 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, break; case AFMT_PCM_WAV:- if (!get_wave_metadata(fd, &(track->id3)))+ if (!get_wave_metadata(fd, id3)) { return false; }@@ -186,7 +186,7 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, */ /* Use the trackname part of the id3 structure as a temporary buffer */- buf = (unsigned char *)track->id3.path;+ buf = (unsigned char *)id3->path; for (i = 0; i < 256; ++i) { @@ -211,8 +211,8 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, return false; } - track->id3.vbr = true; /* All WavPack files are VBR */- track->id3.filesize = filesize (fd);+ id3->vbr = true; /* All WavPack files are VBR */+ id3->filesize = filesize (fd); if ((buf [20] | buf [21] | buf [22] | buf [23]) && (buf [12] & buf [13] & buf [14] & buf [15]) != 0xff) @@ -221,24 +221,24 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, if (srindx == 15) {- track->id3.frequency = 44100;+ id3->frequency = 44100; } else {- track->id3.frequency = wavpack_sample_rates[srindx];+ id3->frequency = wavpack_sample_rates[srindx]; } totalsamples = get_long_le(&buf[12]);- track->id3.length = totalsamples / (track->id3.frequency / 100) * 10;- track->id3.bitrate = filesize (fd) / (track->id3.length / 8);+ id3->length = totalsamples / (id3->frequency / 100) * 10;+ id3->bitrate = filesize (fd) / (id3->length / 8); } - read_ape_tags(fd, &track->id3); /* use any apetag info we find */+ read_ape_tags(fd, id3); /* use any apetag info we find */ break; case AFMT_A52: /* Use the trackname part of the id3 structure as a temporary buffer */- buf = (unsigned char *)track->id3.path;+ buf = (unsigned char *)id3->path; if ((lseek(fd, 0, SEEK_SET) < 0) || (read(fd, buf, 5) < 5)) {@@ -259,25 +259,25 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, return false; } - track->id3.bitrate = a52_bitrates[i >> 1];- track->id3.vbr = false;- track->id3.filesize = filesize(fd);+ id3->bitrate = a52_bitrates[i >> 1];+ id3->vbr = false;+ id3->filesize = filesize(fd); switch (buf[4] & 0xc0) { case 0x00: - track->id3.frequency = 48000; - track->id3.bytesperframe=track->id3.bitrate * 2 * 2;+ id3->frequency = 48000;+ id3->bytesperframe=id3->bitrate * 2 * 2; break; case 0x40: - track->id3.frequency = 44100;- track->id3.bytesperframe = a52_441framesizes[i];+ id3->frequency = 44100;+ id3->bytesperframe = a52_441framesizes[i]; break; case 0x80: - track->id3.frequency = 32000; - track->id3.bytesperframe = track->id3.bitrate * 3 * 2;+ id3->frequency = 32000;+ id3->bytesperframe = id3->bitrate * 3 * 2; break; default: @@ -287,13 +287,13 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, } /* One A52 frame contains 6 blocks, each containing 256 samples */- totalsamples = track->id3.filesize / track->id3.bytesperframe * 6 * 256;- track->id3.length = totalsamples / track->id3.frequency * 1000;+ totalsamples = id3->filesize / id3->bytesperframe * 6 * 256;+ id3->length = totalsamples / id3->frequency * 1000; break; case AFMT_ALAC: case AFMT_AAC:- if (!get_mp4_metadata(fd, &(track->id3)))+ if (!get_mp4_metadata(fd, id3)) { return false; }@@ -301,9 +301,9 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, break; case AFMT_SHN:- track->id3.vbr = true;- track->id3.filesize = filesize(fd);- if (!skip_id3v2(fd, &(track->id3)))+ id3->vbr = true;+ id3->filesize = filesize(fd);+ if (!skip_id3v2(fd, id3)) { return false; }@@ -311,22 +311,22 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, break; case AFMT_SID:- if (!get_sid_metadata(fd, &(track->id3)))+ if (!get_sid_metadata(fd, id3)) { return false; } break; case AFMT_SPC:- if(!get_spc_metadata(fd, &(track->id3)))+ if(!get_spc_metadata(fd, id3)) { DEBUGF("get_spc_metadata error\n"); } - track->id3.filesize = filesize(fd);- track->id3.genre_string = id3_get_num_genre(36);+ id3->filesize = filesize(fd);+ id3->genre_string = id3_get_num_genre(36); break; case AFMT_ADX:- if (!get_adx_metadata(fd, &(track->id3)))+ if (!get_adx_metadata(fd, id3)) { DEBUGF("get_adx_metadata error\n"); return false;@@ -334,19 +334,19 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, break; case AFMT_NSF:- buf = (unsigned char *)track->id3.path;+ buf = (unsigned char *)id3->path; if ((lseek(fd, 0, SEEK_SET) < 0) || ((read(fd, buf, 8)) < 8)) { DEBUGF("lseek or read failed\n"); return false; }- track->id3.vbr = false;- track->id3.filesize = filesize(fd);+ id3->vbr = false;+ id3->filesize = filesize(fd); if (memcmp(buf,"NESM",4) && memcmp(buf,"NSFE",4)) return false; break; case AFMT_AIFF:- if (!get_aiff_metadata(fd, &(track->id3)))+ if (!get_aiff_metadata(fd, id3)) { return false; }@@ -367,13 +367,12 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname, #ifndef __PCTOOL__ if (cuesheet_is_enabled() && look_for_cuesheet_file(trackname, NULL)) {- track->id3.cuesheet_type = 1;+ id3->cuesheet_type = 1; } #endif lseek(fd, 0, SEEK_SET);- strncpy(track->id3.path, trackname, sizeof(track->id3.path));- track->taginfo_ready = true;+ strncpy(id3->path, trackname, sizeof(id3->path)); return true; }diff --git a/apps/metadata.h b/apps/metadata.hindex f790146..4682b35 100644--- a/apps/metadata.h+++ b/apps/metadata.h@@ -23,7 +23,7 @@ #include "playback.h" unsigned int probe_file_format(const char *filename);-bool get_metadata(struct track_info* track, int fd, const char* trackname,+bool get_metadata(struct mp3entry* id3, int fd, const char* trackname, bool v1first); #endifdiff --git a/apps/playback.c b/apps/playback.cindex 43c3b0a..13167e3 100644--- a/apps/playback.c+++ b/apps/playback.c@@ -2746,8 +2746,9 @@ static bool audio_load_track(int offset, bool start_play, bool rebuffer) /* Get track metadata if we don't already have it. */ if (!tracks[track_widx].taginfo_ready) {- if (get_metadata(&tracks[track_widx],current_fd,trackname,v1first)) + if (get_metadata(&(tracks[track_widx].id3),current_fd,trackname,v1first)) {+ tracks[track_widx].taginfo_ready = true; if (start_play) { track_changed = true;@@ -2887,10 +2888,11 @@ static bool audio_read_next_metadata(void) if (fd < 0) return false; - status = get_metadata(&tracks[next_idx],fd,trackname,v1first);+ status = get_metadata(&(tracks[next_idx].id3),fd,trackname,v1first); /* Preload the glyphs in the tags */ if (status) {+ tracks[next_idx].taginfo_ready = true; if (tracks[next_idx].id3.title) lcd_getstringsize(tracks[next_idx].id3.title, NULL, NULL); if (tracks[next_idx].id3.artist)diff --git a/apps/plugin.h b/apps/plugin.hindex a424531..863ff8e 100644--- a/apps/plugin.h+++ b/apps/plugin.h@@ -617,7 +617,7 @@ struct plugin_api { int (*codec_load_file)(const char* codec, struct codec_api *api); const char *(*get_codec_filename)(int cod_spec);- bool (*get_metadata)(struct track_info* track, int fd, const char* trackname,+ bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname, bool v1first); #endif void (*led)(bool on);diff --git a/apps/plugins/test_codec.c b/apps/plugins/test_codec.cindex 0e388ce..c29094b 100644--- a/apps/plugins/test_codec.c+++ b/apps/plugins/test_codec.c@@ -536,7 +536,7 @@ static enum plugin_status test_track(char* filename) /* Clear the id3 struct */ rb->memset(&track.id3, 0, sizeof(struct mp3entry)); - if (!rb->get_metadata(&track, fd, filename,+ if (!rb->get_metadata(&(track.id3), fd, filename, rb->global_settings->id3_v1_first)) { log_text("Cannot read metadata",true);diff --git a/apps/tagcache.c b/apps/tagcache.cindex da51e0c..8bb99c9 100644--- a/apps/tagcache.c+++ b/apps/tagcache.c@@ -1658,7 +1658,7 @@ static void add_tagcache(char *path) memset(&track, 0, sizeof(struct track_info)); memset(&entry, 0, sizeof(struct temp_file_entry)); memset(&tracknumfix, 0, sizeof(tracknumfix));- ret = get_metadata(&track, fd, path, false);+ ret = get_metadata(&(track.id3), fd, path, false); close(fd); if (!ret)