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 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 ) |