[vlc-devel] commit: lua/extension: Export extension_SetInput(). (Pierre d'Herbemont )

git version control git at videolan.org
Fri Jan 29 11:49:34 CET 2010


vlc | branch: master | Pierre d'Herbemont <pdherbemont at free.fr> | Fri Jan 29 01:43:19 2010 +0100| [9ceb897c7bebb801951ec533a32dc10bed120f02] | committer: Pierre d'Herbemont 

lua/extension: Export extension_SetInput().

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

 include/vlc_extensions.h      |    9 +++++++++
 modules/misc/lua/extension.c  |   16 ++++++++++++++++
 modules/misc/lua/extension.h  |    8 +++++++-
 modules/misc/lua/libs/input.c |   12 ++++++++++++
 4 files changed, 44 insertions(+), 1 deletions(-)

diff --git a/include/vlc_extensions.h b/include/vlc_extensions.h
index f64c3af..d43214d 100644
--- a/include/vlc_extensions.h
+++ b/include/vlc_extensions.h
@@ -73,6 +73,7 @@ enum
     EXTENSION_TRIGGER_ONLY,   /**< arg1: extension_t*, arg2: bool* */
     EXTENSION_TRIGGER,        /**< arg1: extension_t* */
     EXTENSION_TRIGGER_MENU,   /**< arg1: extension_t*, int (uint16_t) */
+    EXTENSION_SET_INPUT,      /**< arg1: extension_t*, arg2 (input_thread_t) */
 };
 
 /**
@@ -143,6 +144,14 @@ static inline int extension_TriggerMenu( extensions_manager_t *p_mgr,
     return extension_Control( p_mgr, EXTENSION_TRIGGER_MENU, p_ext, i );
 }
 
+/** Trigger an entry of the extension menu */
+static inline int extension_SetInput( extensions_manager_t *p_mgr,
+                                        extension_t *p_ext,
+                                        struct input_thread_t *p_input )
+{
+    return extension_Control( p_mgr, EXTENSION_SET_INPUT, p_ext, p_input );
+}
+
 /** Can this extension only be triggered but not activated?
     Not compatible with HasMenu */
 #define extension_TriggerOnly( mgr, ext ) \
diff --git a/modules/misc/lua/extension.c b/modules/misc/lua/extension.c
index 05c08da..8ef54b9 100644
--- a/modules/misc/lua/extension.c
+++ b/modules/misc/lua/extension.c
@@ -26,6 +26,8 @@
 #include "extension.h"
 #include "assert.h"
 
+#include <vlc_input.h>
+
 /* Functions to register */
 static const luaL_Reg p_reg[] =
 {
@@ -462,6 +464,20 @@ static int Control( extensions_manager_t *p_mgr, int i_control, va_list args )
             i = ( int ) va_arg( args, int );
             return TriggerMenu( p_ext, i );
 
+        case EXTENSION_SET_INPUT:
+        {
+            p_ext = ( extension_t* ) va_arg( args, extension_t* );
+            input_thread_t *p_input = va_arg( args, struct input_thread_t * );
+
+            bool ok = LockExtension(p_ext);
+            if (!ok)
+                return VLC_EGENERIC;
+            vlc_object_release(p_ext->p_sys->p_input);
+            p_ext->p_sys->p_input = vlc_object_hold(p_input);
+            UnlockExtension(p_ext);
+
+            return VLC_SUCCESS;
+        }
         default:
             msg_Err( p_mgr, "Control '%d' not yet implemented in Extension",
                      i_control );
diff --git a/modules/misc/lua/extension.h b/modules/misc/lua/extension.h
index bf15b70..2bd9252 100644
--- a/modules/misc/lua/extension.h
+++ b/modules/misc/lua/extension.h
@@ -65,7 +65,11 @@ struct extension_sys_t
     vlc_mutex_t command_lock;
     vlc_mutex_t running_lock;
     vlc_cond_t wait;
-    bool b_exiting;
+
+    /* The input this extension should use for vlc.input
+     * or NULL if it should use playlist's current input */
+    struct input_thread_t *p_input;
+
     extensions_manager_t *p_mgr;     ///< Parent
     /* Queue of commands to execute */
     struct command_t
@@ -74,6 +78,8 @@ struct extension_sys_t
         void *data[10];         ///< Optional void* arguments
         struct command_t *next; ///< Next command
     } *command;
+
+    bool b_exiting;
 };
 
 /* Extensions: manager functions */
diff --git a/modules/misc/lua/libs/input.c b/modules/misc/lua/libs/input.c
index 37ed82e..3d7fa58 100644
--- a/modules/misc/lua/libs/input.c
+++ b/modules/misc/lua/libs/input.c
@@ -46,12 +46,24 @@
 #include "playlist.h"
 #include "../vlc.h"
 #include "../libs.h"
+#include "../extension.h"
 
 static const luaL_Reg vlclua_input_reg[];
 static const luaL_Reg vlclua_input_item_reg[];
 
 input_thread_t * vlclua_get_input_internal( lua_State *L )
 {
+    extension_t *p_extension = vlclua_extension_get( L );
+    if( p_extension )
+    {
+        input_thread_t *p_input = p_extension->p_sys->p_input;
+        if (p_input)
+        {
+            vlc_object_hold(p_input);
+            UnlockExtension(p_extension);
+            return p_input;
+        }
+    }
     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
     input_thread_t *p_input = playlist_CurrentInput( p_playlist );
     vlclua_release_playlist_internal( p_playlist );




More information about the vlc-devel mailing list