Commit 9ceb897c authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

lua/extension: Export extension_SetInput().

parent 714ef56a
...@@ -73,6 +73,7 @@ enum ...@@ -73,6 +73,7 @@ enum
EXTENSION_TRIGGER_ONLY, /**< arg1: extension_t*, arg2: bool* */ EXTENSION_TRIGGER_ONLY, /**< arg1: extension_t*, arg2: bool* */
EXTENSION_TRIGGER, /**< arg1: extension_t* */ EXTENSION_TRIGGER, /**< arg1: extension_t* */
EXTENSION_TRIGGER_MENU, /**< arg1: extension_t*, int (uint16_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, ...@@ -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 ); 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? /** Can this extension only be triggered but not activated?
Not compatible with HasMenu */ Not compatible with HasMenu */
#define extension_TriggerOnly( mgr, ext ) \ #define extension_TriggerOnly( mgr, ext ) \
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
#include "extension.h" #include "extension.h"
#include "assert.h" #include "assert.h"
#include <vlc_input.h>
/* Functions to register */ /* Functions to register */
static const luaL_Reg p_reg[] = static const luaL_Reg p_reg[] =
{ {
...@@ -462,6 +464,20 @@ static int Control( extensions_manager_t *p_mgr, int i_control, va_list args ) ...@@ -462,6 +464,20 @@ static int Control( extensions_manager_t *p_mgr, int i_control, va_list args )
i = ( int ) va_arg( args, int ); i = ( int ) va_arg( args, int );
return TriggerMenu( p_ext, i ); 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: default:
msg_Err( p_mgr, "Control '%d' not yet implemented in Extension", msg_Err( p_mgr, "Control '%d' not yet implemented in Extension",
i_control ); i_control );
......
...@@ -65,7 +65,11 @@ struct extension_sys_t ...@@ -65,7 +65,11 @@ struct extension_sys_t
vlc_mutex_t command_lock; vlc_mutex_t command_lock;
vlc_mutex_t running_lock; vlc_mutex_t running_lock;
vlc_cond_t wait; 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 extensions_manager_t *p_mgr; ///< Parent
/* Queue of commands to execute */ /* Queue of commands to execute */
struct command_t struct command_t
...@@ -74,6 +78,8 @@ struct extension_sys_t ...@@ -74,6 +78,8 @@ struct extension_sys_t
void *data[10]; ///< Optional void* arguments void *data[10]; ///< Optional void* arguments
struct command_t *next; ///< Next command struct command_t *next; ///< Next command
} *command; } *command;
bool b_exiting;
}; };
/* Extensions: manager functions */ /* Extensions: manager functions */
......
...@@ -46,12 +46,24 @@ ...@@ -46,12 +46,24 @@
#include "playlist.h" #include "playlist.h"
#include "../vlc.h" #include "../vlc.h"
#include "../libs.h" #include "../libs.h"
#include "../extension.h"
static const luaL_Reg vlclua_input_reg[]; static const luaL_Reg vlclua_input_reg[];
static const luaL_Reg vlclua_input_item_reg[]; static const luaL_Reg vlclua_input_item_reg[];
input_thread_t * vlclua_get_input_internal( lua_State *L ) 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 ); playlist_t *p_playlist = vlclua_get_playlist_internal( L );
input_thread_t *p_input = playlist_CurrentInput( p_playlist ); input_thread_t *p_input = playlist_CurrentInput( p_playlist );
vlclua_release_playlist_internal( p_playlist ); vlclua_release_playlist_internal( p_playlist );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment