]> git.sesse.net Git - vlc/commitdiff
a straighforward still image demuxer with 100% compatibility with fake:// --fake...
authorJoseph Tulou <brezhoneg1@yahoo.fr>
Mon, 5 Jan 2009 13:12:03 +0000 (14:12 +0100)
committerAntoine Cellerier <dionoea@videolan.org>
Sat, 17 Jan 2009 14:33:15 +0000 (15:33 +0100)
Signed-off-by: Antoine Cellerier <dionoea@videolan.org>
modules/access/fake.c

index 2e0d990f2ad37c0bf22318713930ed1ddb416e61..030192dad68b717d705f672ba096765cfc3c10ff 100644 (file)
@@ -33,6 +33,7 @@
 #include <vlc_plugin.h>
 #include <vlc_access.h>
 #include <vlc_demux.h>
+#include <vlc_image.h>
 
 /*****************************************************************************
  * Module descriptior
@@ -70,7 +71,7 @@ vlc_module_begin ()
                  true );
 
     add_shortcut( "fake" )
-    set_capability( "access_demux", 0 )
+    set_capability( "access_demux", 100 )
     set_callbacks( Open, Close )
 vlc_module_end ()
 
@@ -97,10 +98,43 @@ static int Open( vlc_object_t *p_this )
     demux_sys_t *p_sys;
     es_format_t fmt;
 
-    /* Only when selected */
-    if( *p_demux->psz_access == '\0' )
+    if( *p_demux->psz_access != '\0' )
+    {
+       /* if an access is provided, then it has to be "fake" */
+       if( strcmp( p_demux->psz_access, "fake" ) != 0 )
         return VLC_EGENERIC;
 
+        msg_Dbg( p_demux, "fake:// access_demux detected" );
+    }
+    else
+    {
+       /**
+        * access is not provided,
+        * then let's see if path could be an image
+        **/
+
+        if( !p_demux->psz_path || !*p_demux->psz_path )
+            return VLC_EGENERIC;
+
+        vlc_fourcc_t i_codec = image_Ext2Fourcc( p_demux->psz_path );
+        if( !i_codec )
+            return VLC_EGENERIC;
+
+        char* p_codec = (char*) &i_codec;
+        msg_Dbg( p_demux, "still image detected with codec format %c%c%c%c",
+                   p_codec[0], p_codec[1], p_codec[2], p_codec[3] );
+
+        vlc_object_t* p_input = vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT );
+        if( !p_input )
+            return VLC_EGENERIC;
+
+        /* set up fake-file on the fly */
+        var_Create( p_input, "fake-file", VLC_VAR_STRING );
+        var_SetString( p_input, "fake-file", p_demux->psz_path );
+
+        vlc_object_release( p_input );
+    }
+
     /* Set up p_demux */
     DEMUX_INIT_COMMON(); p_sys = p_demux->p_sys;
     p_demux->info.i_update = 0;