[vlc-devel] [V4 PATCH 5/9] dvdnav: use ES_OUT_SET_VOUT_MOUSE_EVENT
Thomas Guillem
thomas at gllm.fr
Tue Jul 17 17:00:20 CEST 2018
---
modules/access/dvdnav.c | 85 ++++++++++++-----------------------------
1 file changed, 24 insertions(+), 61 deletions(-)
diff --git a/modules/access/dvdnav.c b/modules/access/dvdnav.c
index c48264e5d2..1c23352f8d 100644
--- a/modules/access/dvdnav.c
+++ b/modules/access/dvdnav.c
@@ -50,7 +50,7 @@
#include <vlc_demux.h>
#include <vlc_charset.h>
#include <vlc_fs.h>
-#include <vlc_vout.h>
+#include <vlc_mouse.h>
#include <vlc_dialog.h>
#include <vlc_iso_lang.h>
@@ -140,9 +140,6 @@ typedef struct
ps_track_t tk[PS_TK_COUNT];
int i_mux_rate;
- /* event */
- vout_thread_t *p_vout;
-
/* palette for menus */
uint32_t clut[16];
uint8_t palette[4][4];
@@ -165,6 +162,8 @@ typedef struct
vlc_tick_t i_pgc_length;
int i_vobu_index;
int i_vobu_flush;
+
+ vlc_mouse_t oldmouse;
} demux_sys_t;
static int Control( demux_t *, int, va_list );
@@ -185,10 +184,7 @@ static int ControlInternal( demux_t *, int, ... );
static void StillTimer( void * );
-static int EventMouse( vlc_object_t *, char const *,
- vlc_value_t, vlc_value_t, void * );
-static int EventIntf( vlc_object_t *, char const *,
- vlc_value_t, vlc_value_t, void * );
+static void EventMouse( const vlc_mouse_t *mouse, void *p_data );
/*****************************************************************************
* CommonOpen:
@@ -217,6 +213,7 @@ static int CommonOpen( vlc_object_t *p_this,
p_sys->i_vobu_index = 0;
p_sys->i_vobu_flush = 0;
p_sys->b_readahead = b_readahead;
+ vlc_mouse_Init( &p_sys->oldmouse );
if( 1 )
{
@@ -326,9 +323,6 @@ static int CommonOpen( vlc_object_t *p_this,
var_Create( p_demux->p_input, "menu-palette", VLC_VAR_ADDRESS );
var_Create( p_demux->p_input, "highlight", VLC_VAR_BOOL );
- /* catch vout creation event */
- var_AddCallback( p_demux->p_input, "intf-event", EventIntf, p_demux );
-
p_sys->still.b_enabled = false;
vlc_mutex_init( &p_sys->still.lock );
if( !vlc_timer_create( &p_sys->still.timer, StillTimer, p_sys ) )
@@ -507,15 +501,6 @@ static void Close( vlc_object_t *p_this )
demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys = p_demux->p_sys;
- /* Stop vout event handler */
- var_DelCallback( p_demux->p_input, "intf-event", EventIntf, p_demux );
- if( p_sys->p_vout != NULL )
- { /* Should not happen, but better be safe than sorry. */
- msg_Warn( p_sys->p_vout, "removing dangling mouse DVD callbacks" );
- var_DelCallback( p_sys->p_vout, "mouse-moved", EventMouse, p_demux );
- var_DelCallback( p_sys->p_vout, "mouse-clicked", EventMouse, p_demux );
- }
-
/* Stop still image handler */
if( p_sys->still.b_created )
vlc_timer_destroy( p_sys->still.timer );
@@ -1561,10 +1546,15 @@ static void ESNew( demux_t *p_demux, int i_id )
if( b_select && tk->es )
{
es_out_Control( p_demux->out, ES_OUT_SET_ES, tk->es );
+
+ if( tk->fmt.i_cat == VIDEO_ES )
+ {
+ es_out_Control( p_demux->out, ES_OUT_VOUT_SET_MOUSE_EVENT, tk->es,
+ EventMouse, p_demux );
+ ButtonUpdate( p_demux, false );
+ }
}
tk->b_configured = true;
-
- if( tk->fmt.i_cat == VIDEO_ES ) ButtonUpdate( p_demux, false );
}
/*****************************************************************************
@@ -1583,55 +1573,28 @@ static void StillTimer( void *p_data )
vlc_mutex_unlock( &p_sys->still.lock );
}
-static int EventMouse( vlc_object_t *p_vout, char const *psz_var,
- vlc_value_t oldval, vlc_value_t val, void *p_data )
+static void EventMouse( const vlc_mouse_t *newmouse, void *p_data )
{
demux_t *p_demux = p_data;
demux_sys_t *p_sys = p_demux->p_sys;
- /* FIXME? PCI usage thread safe? */
- pci_t *pci = dvdnav_get_current_nav_pci( p_sys->dvdnav );
- int x = val.coords.x;
- int y = val.coords.y;
-
- if( psz_var[6] == 'm' ) /* mouse-moved */
- dvdnav_mouse_select( p_sys->dvdnav, pci, x, y );
- else
+ if( !newmouse )
{
- assert( psz_var[6] == 'c' ); /* mouse-clicked */
-
- ButtonUpdate( p_demux, true );
- dvdnav_mouse_activate( p_sys->dvdnav, pci, x, y );
+ vlc_mouse_Init( &p_sys->oldmouse );
+ return;
}
- (void)p_vout;
- (void)oldval;
- return VLC_SUCCESS;
-}
-static int EventIntf( vlc_object_t *p_input, char const *psz_var,
- vlc_value_t oldval, vlc_value_t val, void *p_data )
-{
- demux_t *p_demux = p_data;
- demux_sys_t *p_sys = p_demux->p_sys;
+ /* FIXME? PCI usage thread safe? */
+ pci_t *pci = dvdnav_get_current_nav_pci( p_sys->dvdnav );
- if (val.i_int == INPUT_EVENT_VOUT)
+ if( vlc_mouse_HasMoved( &p_sys->oldmouse, newmouse ) )
+ dvdnav_mouse_select( p_sys->dvdnav, pci, newmouse->i_x, newmouse->i_y );
+ if( vlc_mouse_HasPressed( &p_sys->oldmouse, newmouse, MOUSE_BUTTON_LEFT ) )
{
- if( p_sys->p_vout != NULL )
- {
- var_DelCallback( p_sys->p_vout, "mouse-moved", EventMouse, p_demux );
- var_DelCallback( p_sys->p_vout, "mouse-clicked", EventMouse, p_demux );
- vlc_object_release( p_sys->p_vout );
- }
-
- p_sys->p_vout = input_GetVout( (input_thread_t *)p_input );
- if( p_sys->p_vout != NULL )
- {
- var_AddCallback( p_sys->p_vout, "mouse-moved", EventMouse, p_demux );
- var_AddCallback( p_sys->p_vout, "mouse-clicked", EventMouse, p_demux );
- }
+ ButtonUpdate( p_demux, true );
+ dvdnav_mouse_activate( p_sys->dvdnav, pci, newmouse->i_x, newmouse->i_y );
}
- (void) psz_var; (void) oldval;
- return VLC_SUCCESS;
+ p_sys->oldmouse = *newmouse;
}
/*****************************************************************************
--
2.18.0
More information about the vlc-devel
mailing list