]> git.sesse.net Git - vlc/blobdiff - modules/misc/lua/demux.c
Merge branch 'master' into lpcm_encoder
[vlc] / modules / misc / lua / demux.c
index 29d80139c93952e72288302d6676c36cb0938671..f924512a3d62cd16264ce0c548130320c053e0b6 100644 (file)
@@ -135,18 +135,28 @@ static int probe_luascript( vlc_object_t *p_this, const char * psz_filename,
     /* Load Lua libraries */
     luaL_openlibs( L ); /* FIXME: Don't open all the libs? */
 
+    vlclua_set_this( L, p_demux );
     luaL_register( L, "vlc", p_reg );
     luaopen_msg( L );
     luaopen_strings( L );
-    lua_pushlightuserdata( L, p_demux );
-    lua_setfield( L, -2, "private" );
-    lua_pushstring( L, p_demux->psz_path );
+    luaopen_stream( L );
+    luaopen_xml( L );
+    luaopen_md5( L );
+    lua_pushstring( L, p_demux->psz_location );
     lua_setfield( L, -2, "path" );
     lua_pushstring( L, p_demux->psz_access );
     lua_setfield( L, -2, "access" );
 
     lua_pop( L, 1 );
 
+    /* Setup the module search path */
+    if( vlclua_add_modules_path( p_demux, L, psz_filename ) )
+    {
+        msg_Warn( p_demux, "Error while setting the module search path for %s",
+                  psz_filename );
+        goto error;
+    }
+
     /* Load and run the script(s) */
     if( luaL_dofile( L, psz_filename ) )
     {
@@ -159,14 +169,14 @@ static int probe_luascript( vlc_object_t *p_this, const char * psz_filename,
 
     if( !lua_isfunction( L, -1 ) )
     {
-        msg_Warn( p_demux, "Error while runing script %s, "
+        msg_Warn( p_demux, "Error while running script %s, "
                   "function probe() not found", psz_filename );
         goto error;
     }
 
     if( lua_pcall( L, 0, 1, 0 ) )
     {
-        msg_Warn( p_demux, "Error while runing script %s, "
+        msg_Warn( p_demux, "Error while running script %s, "
                   "function probe(): %s", psz_filename,
                   lua_tostring( L, lua_gettop( L ) ) );
         goto error;
@@ -197,16 +207,11 @@ error:
 int Import_LuaPlaylist( vlc_object_t *p_this )
 {
     demux_t *p_demux = (demux_t *)p_this;
-    lua_State *L;
     int ret;
 
-    p_demux->p_sys = (demux_sys_t*)malloc( sizeof( demux_sys_t ) );
+    p_demux->p_sys = calloc( 1, sizeof( demux_sys_t ) );
     if( !p_demux->p_sys )
-    {
         return VLC_ENOMEM;
-    }
-
-    p_demux->p_sys->psz_filename = NULL;
 
     p_demux->pf_control = Control;
     p_demux->pf_demux = Demux;
@@ -246,16 +251,18 @@ static int Demux( demux_t *p_demux )
 
     if( !lua_isfunction( L, -1 ) )
     {
-        msg_Warn( p_demux, "Error while runing script %s, "
+        msg_Warn( p_demux, "Error while running script %s, "
                   "function parse() not found", psz_filename );
+        vlc_object_release( p_input_thread );
         return VLC_EGENERIC;
     }
 
     if( lua_pcall( L, 0, 1, 0 ) )
     {
-        msg_Warn( p_demux, "Error while runing script %s, "
+        msg_Warn( p_demux, "Error while running script %s, "
                   "function parse(): %s", psz_filename,
                   lua_tostring( L, lua_gettop( L ) ) );
+        vlc_object_release( p_input_thread );
         return VLC_EGENERIC;
     }