[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