[vlc-commits] demux: do not hard-code file extensions in core

Rémi Denis-Courmont git at videolan.org
Fri Sep 25 18:05:50 CEST 2020


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Sep 24 17:36:12 2020 +0300| [cc7762fd6e7fcf36c71c3d90828942d2a563d780] | committer: Rémi Denis-Courmont

demux: do not hard-code file extensions in core

(except mp3 which remains a special preparsing case)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cc7762fd6e7fcf36c71c3d90828942d2a563d780
---

 src/input/demux.c | 74 ++++++++++---------------------------------------------
 1 file changed, 13 insertions(+), 61 deletions(-)

diff --git a/src/input/demux.c b/src/input/demux.c
index ccefec76e7..4a534530e5 100644
--- a/src/input/demux.c
+++ b/src/input/demux.c
@@ -73,63 +73,6 @@ static const char *demux_NameFromMimeType(const char *mime)
     return (type != NULL) ? type->name : "any";
 }
 
-static const char* DemuxNameFromExtension( char const* ext,
-                                           bool b_preparsing )
-{
-    /* NOTE: Add only file without any problems here and with strong detection:
-     * - no .mp3, .a52, ...
-     *  - wav can't be added 'cause of a52 and dts in them as raw audio
-     */
-    static demux_mapping strong[] =
-    { /* NOTE: must be sorted in asc order */
-        { "aiff", "aiff" },
-        { "asf",  "asf" },
-        { "au",   "au" },
-        { "avi",  "avi" },
-        { "dv",   "dv" },
-        { "flac", "flac" },
-        { "h264", "h264" },
-        { "kar", "smf" },
-        { "m3u",  "m3u" },
-        { "m4a",  "mp4" },
-        { "m4v",  "m4v" },
-        { "mid",  "smf" },
-        { "mka",  "mkv" },
-        { "mks",  "mkv" },
-        { "mkv",  "mkv" },
-        { "moov", "mp4" },
-        { "mov",  "mp4" },
-        { "mp4",  "mp4" },
-        { "nsv",  "nsv" },
-        { "oga",  "ogg" },
-        { "ogg",  "ogg" },
-        { "ogm",  "ogg" },
-        { "ogv",  "ogg" },
-        { "ogx",  "ogg" }, /*RFC5334*/
-        { "opus", "ogg" }, /*draft-terriberry-oggopus-01*/
-        { "pva",  "pva" },
-        { "rm",   "avformat" },
-        { "rmi",  "smf" },
-        { "spx",  "ogg" },
-        { "voc",  "voc" },
-        { "wma",  "asf" },
-        { "wmv",  "asf" },
-    };
-
-    /* Here, we don't mind if it does not work, it must be quick */
-    static demux_mapping quick[] =
-    { /* NOTE: shall be sorted in asc order */
-        { "mp3", "mpga" },
-    };
-
-    demux_mapping *res = demux_lookup(ext, strong, ARRAY_SIZE(strong));
-
-    if (res == NULL && b_preparsing)
-        res = demux_lookup(ext, quick, ARRAY_SIZE(quick));
-
-    return (res != NULL) ? res->name : NULL;
-}
-
 demux_t *demux_New( vlc_object_t *p_obj, const char *psz_name,
                     stream_t *s, es_out_t *out )
 {
@@ -224,18 +167,27 @@ demux_t *demux_NewAdvanced( vlc_object_t *p_obj, input_thread_t *p_input,
     p_demux->pf_control = NULL;
     p_demux->p_sys      = NULL;
 
+    char *modbuf = NULL;
+
     if (strcasecmp(module, "any") == 0 && p_demux->psz_filepath != NULL)
     {
-        char const* psz_ext = strrchr( p_demux->psz_filepath, '.' );
-
-        if( psz_ext )
-            module = DemuxNameFromExtension( psz_ext + 1, b_preparsing );
+        const char *ext = strrchr(p_demux->psz_filepath, '.');
+
+        if (ext != NULL) {
+            if (b_preparsing && !vlc_ascii_strcasecmp(ext, ".mp3"))
+                module = "mpga";
+            else
+            if (likely(asprintf(&modbuf, "ext-%s", ext + 1) >= 0))
+                module = modbuf;
+        }
     }
 
     bool strict = strcmp(module, p_demux->psz_name) == 0;
 
     priv->module = vlc_module_load(p_demux, "demux", module, strict,
                                    demux_Probe, p_demux);
+    free(modbuf);
+
     if (priv->module == NULL)
     {
         free( p_demux->psz_filepath );



More information about the vlc-commits mailing list