X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fmisc%2Flua%2Flibs%2Fosd.c;h=86388767a2ddfdf460dcd571115a69cd34638a92;hb=a72aa02a860ffcb133eb485548d8dd530c96a04a;hp=cb9ac9c955e753481a362d99201c7ea62fe38e6e;hpb=776b826403cda061217ede59b2d89b26e3dca166;p=vlc diff --git a/modules/misc/lua/libs/osd.c b/modules/misc/lua/libs/osd.c index cb9ac9c955..86388767a2 100644 --- a/modules/misc/lua/libs/osd.c +++ b/modules/misc/lua/libs/osd.c @@ -40,6 +40,7 @@ #include "../vlc.h" #include "../libs.h" +#include "input.h" /***************************************************************************** * OSD @@ -72,20 +73,37 @@ static int vlclua_osd_icon( lua_State *L ) int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL ); if( !i_icon ) return luaL_error( L, "\"%s\" is not a valid osd icon.", psz_icon ); - else + + input_thread_t *p_input = vlclua_get_input_internal( L ); + if( p_input ) { - vlc_object_t *p_this = vlclua_get_this( L ); - vout_OSDIcon( p_this, i_chan, i_icon ); - return 0; + vout_thread_t *p_vout = input_GetVout( p_input ); + if( p_vout ) + { + vout_OSDIcon( p_vout, i_chan, i_icon ); + vlc_object_release( p_vout ); + } + vlc_object_release( p_input ); } + return 0; } static int vlclua_osd_message( lua_State *L ) { const char *psz_message = luaL_checkstring( L, 1 ); int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL ); - vlc_object_t *p_this = vlclua_get_this( L ); - vout_OSDMessage( p_this, i_chan, "%s", psz_message ); + + input_thread_t *p_input = vlclua_get_input_internal( L ); + if( p_input ) + { + vout_thread_t *p_vout = input_GetVout( p_input ); + if( p_vout ) + { + vout_OSDMessage( p_vout, i_chan, "%s", psz_message ); + vlc_object_release( p_vout ); + } + vlc_object_release( p_input ); + } return 0; } @@ -117,25 +135,37 @@ static int vlclua_osd_slider( lua_State *L ) if( !i_type ) return luaL_error( L, "\"%s\" is not a valid slider type.", psz_type ); - else + + input_thread_t *p_input = vlclua_get_input_internal( L ); + if( p_input ) { - vlc_object_t *p_this = vlclua_get_this( L ); - vout_OSDSlider( p_this, i_chan, i_position, i_type ); - return 0; + vout_thread_t *p_vout = input_GetVout( p_input ); + if( p_vout ) + { + vout_OSDSlider( p_vout, i_chan, i_position, i_type ); + vlc_object_release( p_vout ); + } + vlc_object_release( p_input ); } + return 0; } static int vlclua_spu_channel_register( lua_State *L ) { - int i_chan; - vlc_object_t *p_this = vlclua_get_this( L ); - vout_thread_t *p_vout = vlc_object_find( p_this, VLC_OBJECT_VOUT, - FIND_ANYWHERE ); + input_thread_t *p_input = vlclua_get_input_internal( L ); + if( !p_input ) + return luaL_error( L, "Unable to find input." ); + + vout_thread_t *p_vout = input_GetVout( p_input ); if( !p_vout ) + { + vlc_object_release( p_input ); return luaL_error( L, "Unable to find vout." ); + } - i_chan = spu_RegisterChannel( vout_GetSpu( p_vout ) ); + int i_chan = vout_RegisterSubpictureChannel( p_vout ); vlc_object_release( p_vout ); + vlc_object_release( p_input ); lua_pushinteger( L, i_chan ); return 1; } @@ -143,14 +173,19 @@ static int vlclua_spu_channel_register( lua_State *L ) static int vlclua_spu_channel_clear( lua_State *L ) { int i_chan = luaL_checkint( L, 1 ); - vlc_object_t *p_this = vlclua_get_this( L ); - vout_thread_t *p_vout = vlc_object_find( p_this, VLC_OBJECT_VOUT, - FIND_ANYWHERE ); + input_thread_t *p_input = vlclua_get_input_internal( L ); + if( !p_input ) + return luaL_error( L, "Unable to find input." ); + vout_thread_t *p_vout = input_GetVout( p_input ); if( !p_vout ) + { + vlc_object_release( p_input ); return luaL_error( L, "Unable to find vout." ); + } - spu_ClearChannel( vout_GetSpu( p_vout ), i_chan ); + vout_FlushSubpictureChannel( p_vout, i_chan ); vlc_object_release( p_vout ); + vlc_object_release( p_input ); return 0; }