diff options
Diffstat (limited to 'apps/metadata.c')
| -rw-r--r-- | apps/metadata.c | 48 |
1 files changed, 14 insertions, 34 deletions
diff --git a/apps/metadata.c b/apps/metadata.c index ee0100e..8455368 100644 --- a/apps/metadata.c +++ b/apps/metadata.c @@ -88,36 +88,6 @@ struct apetag_item_header long flags; }; -struct format_list -{ - char format; - char extension[5]; -}; - -static const struct format_list formats[] = -{ - { AFMT_MPA_L1, "mp1" }, - { AFMT_MPA_L2, "mp2" }, - { AFMT_MPA_L2, "mpa" }, - { AFMT_MPA_L3, "mp3" }, -#if CONFIG_CODEC == SWCODEC - { AFMT_OGG_VORBIS, "ogg" }, - { AFMT_PCM_WAV, "wav" }, - { AFMT_FLAC, "flac" }, - { AFMT_MPC, "mpc" }, - { AFMT_A52, "a52" }, - { AFMT_A52, "ac3" }, - { AFMT_WAVPACK, "wv" }, - { AFMT_ALAC, "m4a" }, - { AFMT_AAC, "mp4" }, - { AFMT_SHN, "shn" }, - { AFMT_AIFF, "aif" }, - { AFMT_AIFF, "aiff" }, - { AFMT_SID, "sid" }, - { AFMT_ADX, "adx" }, -#endif -}; - #if CONFIG_CODEC == SWCODEC static const unsigned short a52_bitrates[] = { @@ -1691,14 +1661,24 @@ unsigned int probe_file_format(const char *filename) return AFMT_UNKNOWN; } - suffix += 1; + /* skip '.' */ + suffix++; + + for (i = 1; i < AFMT_NUM_CODECS; i++) + { + /* search extension list for type */ + const char *ext = audio_formats[i].ext_list; - for (i = 0; i < sizeof(formats) / sizeof(formats[0]); i++) + do { - if (strcasecmp(suffix, formats[i].extension) == 0) + if (strcasecmp(suffix, ext) == 0) { - return formats[i].format; + return i; + } + + ext += strlen(ext) + 1; } + while (*ext != '\0'); } return AFMT_UNKNOWN; |