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) */
};
/**
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 ) \
#include "extension.h"
#include "assert.h"
+#include <vlc_input.h>
+
/* Functions to register */
static const luaL_Reg p_reg[] =
{
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 );
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
void *data[10]; ///< Optional void* arguments
struct command_t *next; ///< Next command
} *command;
+
+ bool b_exiting;
};
/* Extensions: manager functions */
#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 );