From: Pierre d'Herbemont Date: Fri, 29 Jan 2010 00:43:19 +0000 (+0100) Subject: lua/extension: Export extension_SetInput(). X-Git-Tag: 1.1.0-ff~718 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=9ceb897c7bebb801951ec533a32dc10bed120f02;p=vlc lua/extension: Export extension_SetInput(). --- diff --git a/include/vlc_extensions.h b/include/vlc_extensions.h index f64c3af72a..d43214d76d 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 05c08daa4a..8ef54b906b 100644 --- a/modules/misc/lua/extension.c +++ b/modules/misc/lua/extension.c @@ -26,6 +26,8 @@ #include "extension.h" #include "assert.h" +#include + /* 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 bf15b70484..2bd925228d 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 37ed82e3ea..3d7fa58295 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 );