[vlc-commits] sout_std: try to guess muxer if opening failed

Rafaël Carré git at videolan.org
Tue Nov 8 03:46:32 CET 2011


vlc | branch: master | Rafaël Carré <funman at videolan.org> | Mon Nov  7 21:08:27 2011 -0500| [c4f54ba8d2afbd627a986a5ce8785ce635ba3a6d] | committer: Rafaël Carré

sout_std: try to guess muxer if opening failed

do it not only if muxer was not precised

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

 modules/stream_out/standard.c |   40 +++++++++++++++++++++++++---------------
 1 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/modules/stream_out/standard.c b/modules/stream_out/standard.c
index 4e8f29c..10a201e 100644
--- a/modules/stream_out/standard.c
+++ b/modules/stream_out/standard.c
@@ -210,9 +210,9 @@ static void create_SDP(sout_stream_t *p_stream, sout_access_out_t *p_access)
     free (dhost);
 }
 
-static const char *getMuxFromExt( const char *psz_url )
+static const char *getMuxFromAlias( const char *psz_alias )
 {
-    static struct { const char ext[6]; const char mux[32]; } exttomux[] =
+    static struct { const char alias[6]; const char mux[32]; } mux_alias[] =
     {
         { "avi", "avi" },
         { "ogg", "ogg" },
@@ -238,16 +238,12 @@ static const char *getMuxFromExt( const char *psz_url )
         { "webm", "ffmpeg{mux=webm}"},
     };
 
-    if( !psz_url )
+    if( !psz_alias )
         return NULL;
-    const char *psz_ext = strrchr( psz_url, '.' );
-    if( !psz_ext )
-        return NULL;
-    psz_ext++;
 
-    for( size_t i = 0; i < sizeof exttomux / sizeof *exttomux; i++ )
-        if( !strcasecmp( psz_ext, exttomux[i].ext ) )
-            return exttomux[i].mux;
+    for( size_t i = 0; i < sizeof mux_alias / sizeof *mux_alias; i++ )
+        if( !strcasecmp( psz_alias, mux_alias[i].alias ) )
+            return mux_alias[i].mux;
 
     return NULL;
 }
@@ -259,7 +255,10 @@ static int fixAccessMux( sout_stream_t *p_stream, char **ppsz_mux,
     char *psz_access = *ppsz_access;
     if( !psz_mux )
     {
-        const char *psz_mux_byext = getMuxFromExt( psz_url );
+        const char *psz_ext = strrchr( psz_url, '.' );
+        if( psz_ext )
+            psz_ext++; /* use extension */
+        const char *psz_mux_byext = getMuxFromAlias( psz_ext );
 
         if( !psz_access )
         {
@@ -393,11 +392,22 @@ static int Open( vlc_object_t *p_this )
     p_sys->p_mux = sout_MuxNew( p_sout, psz_mux, p_access );
     if( !p_sys->p_mux )
     {
-        msg_Err( p_stream, "no suitable sout mux module for `%s/%s://%s'",
-                 psz_access, psz_mux, psz_url );
+        const char *psz_mux_guess = getMuxFromAlias( psz_mux );
+        if( psz_mux_guess && strcmp( psz_mux_guess, psz_mux ) )
+        {
+            msg_Dbg( p_stream, "Couldn't open mux `%s', trying `%s' instead",
+                psz_mux, psz_mux_guess );
+            p_sys->p_mux = sout_MuxNew( p_sout, psz_mux_guess, p_access );
+        }
 
-        sout_AccessOutDelete( p_access );
-        goto end;
+        if( !p_sys->p_mux )
+        {
+            msg_Err( p_stream, "no suitable sout mux module for `%s/%s://%s'",
+                psz_access, psz_mux, psz_url );
+
+            sout_AccessOutDelete( p_access );
+            goto end;
+        }
     }
 
     if( var_GetBool( p_stream, SOUT_CFG_PREFIX"sap" ) )



More information about the vlc-commits mailing list