diff options
Diffstat (limited to 'firmware/id3.c')
-rw-r--r-- | firmware/id3.c | 138 |
1 files changed, 83 insertions, 55 deletions
diff --git a/firmware/id3.c b/firmware/id3.c index 92f60a2095..7d03c75331 100644 --- a/firmware/id3.c +++ b/firmware/id3.c | |||
@@ -44,6 +44,89 @@ | |||
44 | #include "replaygain.h" | 44 | #include "replaygain.h" |
45 | #include "rbunicode.h" | 45 | #include "rbunicode.h" |
46 | 46 | ||
47 | /** Database of audio formats **/ | ||
48 | const struct afmt_entry audio_formats[AFMT_NUM_CODECS] = | ||
49 | { | ||
50 | /* Unknown file format */ | ||
51 | [AFMT_UNKNOWN] = | ||
52 | AFMT_ENTRY("???", NULL, NULL, NULL ), | ||
53 | |||
54 | /* MPEG Audio layer 1 */ | ||
55 | [AFMT_MPA_L1] = | ||
56 | AFMT_ENTRY("MP1", "mpa", NULL, "mp1\0" ), | ||
57 | /* MPEG Audio layer 2 */ | ||
58 | [AFMT_MPA_L2] = | ||
59 | AFMT_ENTRY("MP2", "mpa", NULL, "mpa\0mp2\0" ), | ||
60 | /* MPEG Audio layer 3 */ | ||
61 | [AFMT_MPA_L3] = | ||
62 | AFMT_ENTRY("MP3", "mpa", "mp3_enc", "mp3\0" ), | ||
63 | |||
64 | /* Audio Interchange File Format */ | ||
65 | [AFMT_AIFF] = | ||
66 | AFMT_ENTRY("AIFF", "aiff", NULL, "aiff\0aif\0"), | ||
67 | |||
68 | #if CONFIG_CODEC == SWCODEC | ||
69 | /* Uncompressed PCM in a WAV file */ | ||
70 | [AFMT_PCM_WAV] = | ||
71 | AFMT_ENTRY("WAV", "wav", "wav_enc", "wav\0" ), | ||
72 | /* Ogg Vorbis */ | ||
73 | [AFMT_OGG_VORBIS] = | ||
74 | AFMT_ENTRY("Ogg", "vorbis", NULL, "ogg\0" ), | ||
75 | /* FLAC */ | ||
76 | [AFMT_FLAC] = | ||
77 | AFMT_ENTRY("FLAC", "flac", NULL, "flac\0" ), | ||
78 | /* Musepack */ | ||
79 | [AFMT_MPC] = | ||
80 | AFMT_ENTRY("MPC", "mpc", NULL, "mpc\0" ), | ||
81 | /* A/52 (aka AC3) audio */ | ||
82 | [AFMT_A52] = | ||
83 | AFMT_ENTRY("AC3", "a52", NULL, "a52\0ac3\0" ), | ||
84 | /* WavPack */ | ||
85 | [AFMT_WAVPACK] = | ||
86 | AFMT_ENTRY("WV", "wavpack", "wavpack_enc", "wv\0" ), | ||
87 | /* Apple Lossless Audio Codec */ | ||
88 | [AFMT_ALAC] = | ||
89 | AFMT_ENTRY("ALAC", "alac", NULL, "m4a\0" ), | ||
90 | /* Advanced Audio Coding in M4A container */ | ||
91 | [AFMT_AAC] = | ||
92 | AFMT_ENTRY("AAC", "aac", NULL, "mp4\0" ), | ||
93 | /* Shorten */ | ||
94 | [AFMT_SHN] = | ||
95 | AFMT_ENTRY("SHN", "shorten", NULL, "shn\0" ), | ||
96 | /* SID File Format */ | ||
97 | [AFMT_SID] = | ||
98 | AFMT_ENTRY("SID", "sid", NULL, "sid\0" ), | ||
99 | /* ADX File Format */ | ||
100 | [AFMT_ADX] = | ||
101 | AFMT_ENTRY("ADX", "adx", NULL, "adx\0" ), | ||
102 | #endif | ||
103 | }; | ||
104 | |||
105 | #if CONFIG_CODEC == SWCODEC && defined (HAVE_RECORDING) | ||
106 | /* get REC_FORMAT_* corresponding AFMT_* */ | ||
107 | const int rec_format_afmt[REC_NUM_FORMATS] = | ||
108 | { | ||
109 | /* give AFMT_UNKNOWN by default */ | ||
110 | [0 ... REC_NUM_FORMATS-1] = AFMT_UNKNOWN, | ||
111 | /* add new entries below this line */ | ||
112 | [REC_FORMAT_MPA_L3] = AFMT_MPA_L3, | ||
113 | [REC_FORMAT_WAVPACK] = AFMT_WAVPACK, | ||
114 | [REC_FORMAT_PCM_WAV] = AFMT_PCM_WAV, | ||
115 | }; | ||
116 | |||
117 | /* get AFMT_* corresponding REC_FORMAT_* */ | ||
118 | const int afmt_rec_format[AFMT_NUM_CODECS] = | ||
119 | { | ||
120 | /* give -1 by default */ | ||
121 | [0 ... AFMT_NUM_CODECS-1] = -1, | ||
122 | /* add new entries below this line */ | ||
123 | [AFMT_MPA_L3] = REC_FORMAT_MPA_L3, | ||
124 | [AFMT_WAVPACK] = REC_FORMAT_WAVPACK, | ||
125 | [AFMT_PCM_WAV] = REC_FORMAT_PCM_WAV, | ||
126 | }; | ||
127 | #endif /* CONFIG_CODEC == SWCODEC && defined (HAVE_RECORDING) */ | ||
128 | /****/ | ||
129 | |||
47 | #define UNSYNC(b0,b1,b2,b3) (((long)(b0 & 0x7F) << (3*7)) | \ | 130 | #define UNSYNC(b0,b1,b2,b3) (((long)(b0 & 0x7F) << (3*7)) | \ |
48 | ((long)(b1 & 0x7F) << (2*7)) | \ | 131 | ((long)(b1 & 0x7F) << (2*7)) | \ |
49 | ((long)(b2 & 0x7F) << (1*7)) | \ | 132 | ((long)(b2 & 0x7F) << (1*7)) | \ |
@@ -85,61 +168,6 @@ static const char* const genres[] = { | |||
85 | "Synthpop" | 168 | "Synthpop" |
86 | }; | 169 | }; |
87 | 170 | ||
88 | /* database of audio formats */ | ||
89 | const struct afmt_entry audio_formats[AFMT_NUM_CODECS] = | ||
90 | { | ||
91 | /* Unknown file format */ | ||
92 | AFMT_ENTRY("???", NULL, NULL, NULL ), | ||
93 | /* MPEG Audio layer 1 */ | ||
94 | AFMT_ENTRY("MP1", "mpa.codec", NULL, NULL ), | ||
95 | /* MPEG Audio layer 2 */ | ||
96 | AFMT_ENTRY("MP2", "mpa.codec", NULL, NULL ), | ||
97 | /* MPEG Audio layer 3 */ | ||
98 | AFMT_ENTRY("MP3", "mpa.codec", "mp3_enc.codec", ".mp3"), | ||
99 | #if CONFIG_CODEC == SWCODEC | ||
100 | /* Uncompressed PCM in a WAV file */ | ||
101 | AFMT_ENTRY("WAV", "wav.codec", "wav_enc.codec", ".wav"), | ||
102 | /* Ogg Vorbis */ | ||
103 | AFMT_ENTRY("Ogg", "vorbis.codec", NULL, NULL ), | ||
104 | /* FLAC */ | ||
105 | AFMT_ENTRY("FLAC", "flac.codec", NULL, NULL ), | ||
106 | /* Musepack */ | ||
107 | AFMT_ENTRY("MPC", "mpc.codec", NULL, NULL ), | ||
108 | /* A/52 (aka AC3) audio */ | ||
109 | AFMT_ENTRY("AC3", "a52.codec", NULL, NULL ), | ||
110 | /* WavPack */ | ||
111 | AFMT_ENTRY("WV", "wavpack.codec", "wavpack_enc.codec", ".wv" ), | ||
112 | /* Apple Lossless Audio Codec */ | ||
113 | AFMT_ENTRY("ALAC", "alac.codec", NULL, NULL ), | ||
114 | /* Advanced Audio Coding in M4A container */ | ||
115 | AFMT_ENTRY("AAC", "aac.codec", NULL, NULL ), | ||
116 | /* Shorten */ | ||
117 | AFMT_ENTRY("SHN", "shorten.codec", NULL, NULL ), | ||
118 | /* Audio Interchange File Format */ | ||
119 | AFMT_ENTRY("AIFF", "aiff.codec", NULL, NULL ), | ||
120 | /* SID File Format */ | ||
121 | AFMT_ENTRY("SID", "sid.codec", NULL, NULL ), | ||
122 | /* ADX File Format */ | ||
123 | AFMT_ENTRY("ADX", "adx.codec", NULL, NULL ), | ||
124 | #endif | ||
125 | }; | ||
126 | |||
127 | #if CONFIG_CODEC == SWCODEC | ||
128 | /* recording quality to AFMT_* */ | ||
129 | const int rec_quality_info_afmt[9] = | ||
130 | { | ||
131 | AFMT_MPA_L3, /* MPEG L3 64 kBit/s */ | ||
132 | AFMT_MPA_L3, /* MPEG L3 96 kBit/s */ | ||
133 | AFMT_MPA_L3, /* MPEG L3 128 kBit/s */ | ||
134 | AFMT_MPA_L3, /* MPEG L3 160 kBit/s */ | ||
135 | AFMT_MPA_L3, /* MPEG L3 192 kBit/s */ | ||
136 | AFMT_MPA_L3, /* MPEG L3 224 kBit/s */ | ||
137 | AFMT_MPA_L3, /* MPEG L3 320 kBit/s */ | ||
138 | AFMT_WAVPACK, /* WavPack 909 kBit/s */ | ||
139 | AFMT_PCM_WAV, /* PCM Wav 1411 kBit/s */ | ||
140 | }; | ||
141 | #endif /* SWCODEC */ | ||
142 | |||
143 | char* id3_get_genre(const struct mp3entry* id3) | 171 | char* id3_get_genre(const struct mp3entry* id3) |
144 | { | 172 | { |
145 | if( id3->genre_string ) | 173 | if( id3->genre_string ) |