]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - afh_common.c
afh: Introduce audio_format_names[].
[paraslash.git] / afh_common.c
index 0b0d84beb04b2e558c44b8985861d0734561865a..fb4759a518c07a0d733c32422fe386c1af0cd6af 100644 (file)
@@ -30,52 +30,56 @@ extern afh_init_func mp3_afh_init, ogg_afh_init, aac_afh_init, wma_afh_init,
 const char *status_item_list[] = {STATUS_ITEMS};
 
 /**
 const char *status_item_list[] = {STATUS_ITEMS};
 
 /**
- * The list of supported audio formats.
- *
- * We always define the full array of audio formats even if some audio formats
- * were not compiled in. This is because for each audio file the number of its
- * audio format is stored in the database. We don't want these numbers to become
- * stale just because the user installed a new version of paraslash that
- * supports a different set of audio formats.
- *
- * It can still be easily detected whether an audio format is compiled in by
- * checking if the init function pointer is not \p NULL.
+ * For each audio file the number of its audio format is stored in the
+ * database. Therefore this list, in particular its order, is part of the ABI.
+ * So it's only OK to append new audio formats. All audio formats are listed
+ * here, regardless of whether the audio format handler is compiled in.
+ */
+#define ALL_AUDIO_FORMATS \
+       AUDIO_FORMAT(mp3) \
+       AUDIO_FORMAT(ogg) \
+       AUDIO_FORMAT(aac) \
+       AUDIO_FORMAT(wma) \
+       AUDIO_FORMAT(spx) \
+       AUDIO_FORMAT(flac) \
+       AUDIO_FORMAT(opus) \
+
+#define AUDIO_FORMAT(_fmt) #_fmt,
+static const char * const audio_format_names[] = {ALL_AUDIO_FORMATS};
+#undef AUDIO_FORMAT
+
+/*
+ * It can be detected whether an audio format is compiled in by checking if the
+ * init function pointer is NULL.
  */
 static struct audio_format_handler afl[] = {
        {
  */
 static struct audio_format_handler afl[] = {
        {
-               .name = "mp3",
                .init = mp3_afh_init,
        },
        {
                .init = mp3_afh_init,
        },
        {
-               .name = "ogg",
 #if defined(HAVE_OGG) && defined(HAVE_VORBIS)
                .init = ogg_afh_init,
 #endif
        },
        {
 #if defined(HAVE_OGG) && defined(HAVE_VORBIS)
                .init = ogg_afh_init,
 #endif
        },
        {
-               .name = "aac",
 #if defined(HAVE_FAAD)
                .init = aac_afh_init,
 #endif
        },
        {
 #if defined(HAVE_FAAD)
                .init = aac_afh_init,
 #endif
        },
        {
-               .name = "wma",
                .init = wma_afh_init,
        },
        {
                .init = wma_afh_init,
        },
        {
-               .name = "spx",
 #if defined(HAVE_OGG) && defined(HAVE_SPEEX)
                .init = spx_afh_init,
 #endif
        },
        {
 #if defined(HAVE_OGG) && defined(HAVE_SPEEX)
                .init = spx_afh_init,
 #endif
        },
        {
-               .name = "flac",
 #if defined(HAVE_OGG) && defined(HAVE_FLAC)
                .init = flac_afh_init,
 #endif
        },
        {
 #if defined(HAVE_OGG) && defined(HAVE_FLAC)
                .init = flac_afh_init,
 #endif
        },
        {
-               .name = "opus",
 #if defined(HAVE_OGG) && defined(HAVE_OPUS)
                .init = opus_afh_init,
 #endif
 #if defined(HAVE_OGG) && defined(HAVE_OPUS)
                .init = opus_afh_init,
 #endif
@@ -97,7 +101,7 @@ const char *audio_format_name(int i)
 {
        if (i < 0 || i >= NUM_AUDIO_FORMATS)
                return "???";
 {
        if (i < 0 || i >= NUM_AUDIO_FORMATS)
                return "???";
-       return afl[i].name;
+       return audio_format_names[i];
 }
 
 static inline int next_audio_format(int format)
 }
 
 static inline int next_audio_format(int format)