]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
afh: Introduce audio_format_names[].
authorAndre Noll <maan@tuebingen.mpg.de>
Fri, 21 Sep 2018 07:29:18 +0000 (09:29 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Fri, 21 Dec 2018 13:40:42 +0000 (14:40 +0100)
This removes .name of struct audio_format in favor of an array of
strings. This will allow us to make afl[] a constant array of pointers,
some of which may be NULL to indicate that the audio format was not
compiled in.

This temporarily duplicates the list of audio formats. The second
list will be removed in a subsequent commit.

afh.h
afh_common.c

diff --git a/afh.h b/afh.h
index d2ac93aec96f95a0ca0bf706327f831520145ee7..eb5392361512c9f021b5f9580259383cc67db7ba 100644 (file)
--- a/afh.h
+++ b/afh.h
@@ -80,8 +80,6 @@ struct audio_file_data {
  * in the other part of this struct.
  */
 struct audio_format_handler {
-       /** Name of the audio format. */
-       const char *name;
        /**
         * Pointer to the audio format handler's init function.
         *
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};
 
 /**
- * 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[] = {
        {
-               .name = "mp3",
                .init = mp3_afh_init,
        },
        {
-               .name = "ogg",
 #if defined(HAVE_OGG) && defined(HAVE_VORBIS)
                .init = ogg_afh_init,
 #endif
        },
        {
-               .name = "aac",
 #if defined(HAVE_FAAD)
                .init = aac_afh_init,
 #endif
        },
        {
-               .name = "wma",
                .init = wma_afh_init,
        },
        {
-               .name = "spx",
 #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
        },
        {
-               .name = "opus",
 #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 "???";
-       return afl[i].name;
+       return audio_format_names[i];
 }
 
 static inline int next_audio_format(int format)