From: Srikanth Raju Date: Mon, 8 Feb 2010 17:57:08 +0000 (+0530) Subject: Lua: Add new callback playing_changed for playing status changes X-Git-Tag: 1.1.0-ff~33 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=eeda6528dd9bf2fbb7bc5a61bb5744a59e913847;p=vlc Lua: Add new callback playing_changed for playing status changes Signed-off-by: Jean-Philippe André --- diff --git a/include/vlc_extensions.h b/include/vlc_extensions.h index 7d9452472c..07c6221ae7 100644 --- a/include/vlc_extensions.h +++ b/include/vlc_extensions.h @@ -75,6 +75,7 @@ enum EXTENSION_TRIGGER, /**< arg1: extension_t* */ EXTENSION_TRIGGER_MENU, /**< arg1: extension_t*, int (uint16_t) */ EXTENSION_SET_INPUT, /**< arg1: extension_t*, arg2 (input_thread_t) */ + EXTENSION_PLAYING_CHANGED, /**< arg1: extension_t*, arg2 int( playing status ) */ }; /** @@ -153,6 +154,13 @@ static inline int extension_SetInput( extensions_manager_t *p_mgr, return extension_Control( p_mgr, EXTENSION_SET_INPUT, p_ext, p_input ); } +static inline int extension_PlayingChanged( extensions_manager_t *p_mgr, + extension_t *p_ext, + int state ) +{ + return extension_Control( p_mgr, EXTENSION_PLAYING_CHANGED, p_ext, state ); +} + /** 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 90e588edaf..16c363f6e8 100644 --- a/modules/misc/lua/extension.c +++ b/modules/misc/lua/extension.c @@ -43,12 +43,14 @@ static const luaL_Reg p_reg[] = #define EXT_TRIGGER_ONLY (1 << 1) ///< Hook: trigger. Not activable #define EXT_INPUT_LISTENER (1 << 2) ///< Hook: input_changed #define EXT_META_LISTENER (1 << 3) ///< Hook: meta_changed +#define EXT_PLAYING_LISTENER (1 << 4) ///< Hook: status_changed const char* const ppsz_capabilities[] = { "menu", "trigger", "input-listener", "meta-listener", + "playing-listener", NULL }; @@ -529,7 +531,18 @@ static int Control( extensions_manager_t *p_mgr, int i_control, va_list args ) UnlockExtension( p_ext ); break; } - + case EXTENSION_PLAYING_CHANGED: + { + extension_t *p_ext; + p_ext = ( extension_t* ) va_arg( args, extension_t* ); + assert( p_ext->psz_name != NULL ); + i = ( int ) va_arg( args, int ); + if( p_ext->p_sys->i_capabilities & EXT_PLAYING_LISTENER ) + { + PushCommand( p_ext, CMD_PLAYING_CHANGED, i ); + } + break; + } default: msg_Warn( 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 22cf46d60b..0f56853240 100644 --- a/modules/misc/lua/extension.h +++ b/modules/misc/lua/extension.h @@ -39,6 +39,7 @@ TYPEDEF_ARRAY( extension_t, array_extension_t ); #define CMD_SET_INPUT 6 /* No arg. Just signal current input changed */ #define CMD_UPDATE_META 7 /* No arg. Just signal current input item meta * changed */ +#define CMD_PLAYING_CHANGED 8 /* Arg1 = int*, New playing status */ //Data types typedef enum diff --git a/modules/misc/lua/extension_thread.c b/modules/misc/lua/extension_thread.c index 41faaf5dc6..1df3cf4cf3 100644 --- a/modules/misc/lua/extension_thread.c +++ b/modules/misc/lua/extension_thread.c @@ -122,6 +122,7 @@ static void FreeCommands( struct command_t *command ) break; case CMD_TRIGGERMENU: + case CMD_PLAYING_CHANGED: free( command->data[0] ); // Arg1 is int*, to free break; @@ -228,6 +229,19 @@ int __PushCommand( extension_t *p_ext, bool b_unique, int i_command, cmd->data[0] = pi; } break; + case CMD_PLAYING_CHANGED: + { + int *pi = malloc( sizeof( int ) ); + if( !pi ) + { + free( cmd ); + vlc_mutex_unlock( &p_ext->p_sys->command_lock ); + return VLC_ENOMEM; + } + *pi = va_arg( args, int ); + cmd->data[0] = pi; + } + break; case CMD_CLOSE: case CMD_SET_INPUT: case CMD_UPDATE_META: @@ -362,6 +376,13 @@ static void* Run( void *data ) break; } + case CMD_PLAYING_CHANGED: + { + lua_ExecuteFunction( p_mgr, p_ext, "playing_changed", + LUA_NUM, *((int *)cmd->data[0]), LUA_END ); + break; + } + default: { msg_Dbg( p_mgr, "Unknown command in extension command queue: %d",