summaryrefslogtreecommitdiff
path: root/firmware/id3.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/id3.c')
-rw-r--r--firmware/id3.c138
1 files changed, 83 insertions, 55 deletions
diff --git a/firmware/id3.c b/firmware/id3.c
index 92f60a2..7d03c75 100644
--- a/firmware/id3.c
+++ b/firmware/id3.c
@@ -44,6 +44,89 @@
#include "replaygain.h"
#include "rbunicode.h"
+/** Database of audio formats **/
+const struct afmt_entry audio_formats[AFMT_NUM_CODECS] =
+{
+ /* Unknown file format */
+ [AFMT_UNKNOWN] =
+ AFMT_ENTRY("???", NULL, NULL, NULL ),
+
+ /* MPEG Audio layer 1 */
+ [AFMT_MPA_L1] =
+ AFMT_ENTRY("MP1", "mpa", NULL, "mp1\0" ),
+ /* MPEG Audio layer 2 */
+ [AFMT_MPA_L2] =
+ AFMT_ENTRY("MP2", "mpa", NULL, "mpa\0mp2\0" ),
+ /* MPEG Audio layer 3 */
+ [AFMT_MPA_L3] =
+ AFMT_ENTRY("MP3", "mpa", "mp3_enc", "mp3\0" ),
+
+ /* Audio Interchange File Format */
+ [AFMT_AIFF] =
+ AFMT_ENTRY("AIFF", "aiff", NULL, "aiff\0aif\0"),
+
+#if CONFIG_CODEC == SWCODEC
+ /* Uncompressed PCM in a WAV file */
+ [AFMT_PCM_WAV] =
+ AFMT_ENTRY("WAV", "wav", "wav_enc", "wav\0" ),
+ /* Ogg Vorbis */
+ [AFMT_OGG_VORBIS] =
+ AFMT_ENTRY("Ogg", "vorbis", NULL, "ogg\0" ),
+ /* FLAC */
+ [AFMT_FLAC] =
+ AFMT_ENTRY("FLAC", "flac", NULL, "flac\0" ),
+ /* Musepack */
+ [AFMT_MPC] =
+ AFMT_ENTRY("MPC", "mpc", NULL, "mpc\0" ),
+ /* A/52 (aka AC3) audio */
+ [AFMT_A52] =
+ AFMT_ENTRY("AC3", "a52", NULL, "a52\0ac3\0" ),
+ /* WavPack */
+ [AFMT_WAVPACK] =
+ AFMT_ENTRY("WV", "wavpack", "wavpack_enc", "wv\0" ),
+ /* Apple Lossless Audio Codec */
+ [AFMT_ALAC] =
+ AFMT_ENTRY("ALAC", "alac", NULL, "m4a\0" ),
+ /* Advanced Audio Coding in M4A container */
+ [AFMT_AAC] =
+ AFMT_ENTRY("AAC", "aac", NULL, "mp4\0" ),
+ /* Shorten */
+ [AFMT_SHN] =
+ AFMT_ENTRY("SHN", "shorten", NULL, "shn\0" ),
+ /* SID File Format */
+ [AFMT_SID] =
+ AFMT_ENTRY("SID", "sid", NULL, "sid\0" ),
+ /* ADX File Format */
+ [AFMT_ADX] =
+ AFMT_ENTRY("ADX", "adx", NULL, "adx\0" ),
+#endif
+};
+
+#if CONFIG_CODEC == SWCODEC && defined (HAVE_RECORDING)
+/* get REC_FORMAT_* corresponding AFMT_* */
+const int rec_format_afmt[REC_NUM_FORMATS] =
+{
+ /* give AFMT_UNKNOWN by default */
+ [0 ... REC_NUM_FORMATS-1] = AFMT_UNKNOWN,
+ /* add new entries below this line */
+ [REC_FORMAT_MPA_L3] = AFMT_MPA_L3,
+ [REC_FORMAT_WAVPACK] = AFMT_WAVPACK,
+ [REC_FORMAT_PCM_WAV] = AFMT_PCM_WAV,
+};
+
+/* get AFMT_* corresponding REC_FORMAT_* */
+const int afmt_rec_format[AFMT_NUM_CODECS] =
+{
+ /* give -1 by default */
+ [0 ... AFMT_NUM_CODECS-1] = -1,
+ /* add new entries below this line */
+ [AFMT_MPA_L3] = REC_FORMAT_MPA_L3,
+ [AFMT_WAVPACK] = REC_FORMAT_WAVPACK,
+ [AFMT_PCM_WAV] = REC_FORMAT_PCM_WAV,
+};
+#endif /* CONFIG_CODEC == SWCODEC && defined (HAVE_RECORDING) */
+/****/
+
#define UNSYNC(b0,b1,b2,b3) (((long)(b0 & 0x7F) << (3*7)) | \
((long)(b1 & 0x7F) << (2*7)) | \
((long)(b2 & 0x7F) << (1*7)) | \
@@ -85,61 +168,6 @@ static const char* const genres[] = {
"Synthpop"
};
-/* database of audio formats */
-const struct afmt_entry audio_formats[AFMT_NUM_CODECS] =
-{
- /* Unknown file format */
- AFMT_ENTRY("???", NULL, NULL, NULL ),
- /* MPEG Audio layer 1 */
- AFMT_ENTRY("MP1", "mpa.codec", NULL, NULL ),
- /* MPEG Audio layer 2 */
- AFMT_ENTRY("MP2", "mpa.codec", NULL, NULL ),
- /* MPEG Audio layer 3 */
- AFMT_ENTRY("MP3", "mpa.codec", "mp3_enc.codec", ".mp3"),
-#if CONFIG_CODEC == SWCODEC
- /* Uncompressed PCM in a WAV file */
- AFMT_ENTRY("WAV", "wav.codec", "wav_enc.codec", ".wav"),
- /* Ogg Vorbis */
- AFMT_ENTRY("Ogg", "vorbis.codec", NULL, NULL ),
- /* FLAC */
- AFMT_ENTRY("FLAC", "flac.codec", NULL, NULL ),
- /* Musepack */
- AFMT_ENTRY("MPC", "mpc.codec", NULL, NULL ),
- /* A/52 (aka AC3) audio */
- AFMT_ENTRY("AC3", "a52.codec", NULL, NULL ),
- /* WavPack */
- AFMT_ENTRY("WV", "wavpack.codec", "wavpack_enc.codec", ".wv" ),
- /* Apple Lossless Audio Codec */
- AFMT_ENTRY("ALAC", "alac.codec", NULL, NULL ),
- /* Advanced Audio Coding in M4A container */
- AFMT_ENTRY("AAC", "aac.codec", NULL, NULL ),
- /* Shorten */
- AFMT_ENTRY("SHN", "shorten.codec", NULL, NULL ),
- /* Audio Interchange File Format */
- AFMT_ENTRY("AIFF", "aiff.codec", NULL, NULL ),
- /* SID File Format */
- AFMT_ENTRY("SID", "sid.codec", NULL, NULL ),
- /* ADX File Format */
- AFMT_ENTRY("ADX", "adx.codec", NULL, NULL ),
-#endif
-};
-
-#if CONFIG_CODEC == SWCODEC
-/* recording quality to AFMT_* */
-const int rec_quality_info_afmt[9] =
-{
- AFMT_MPA_L3, /* MPEG L3 64 kBit/s */
- AFMT_MPA_L3, /* MPEG L3 96 kBit/s */
- AFMT_MPA_L3, /* MPEG L3 128 kBit/s */
- AFMT_MPA_L3, /* MPEG L3 160 kBit/s */
- AFMT_MPA_L3, /* MPEG L3 192 kBit/s */
- AFMT_MPA_L3, /* MPEG L3 224 kBit/s */
- AFMT_MPA_L3, /* MPEG L3 320 kBit/s */
- AFMT_WAVPACK, /* WavPack 909 kBit/s */
- AFMT_PCM_WAV, /* PCM Wav 1411 kBit/s */
-};
-#endif /* SWCODEC */
-
char* id3_get_genre(const struct mp3entry* id3)
{
if( id3->genre_string )