vlc | branch: master | Thomas Guillem <[email protected]> | Tue Jul 17 14:34:38 2018 +0200| [7e850e75c389cbd6fc9ddd6e7f693a2f7e3938b7] | committer: Thomas Guillem
bluray: use ES_OUT_VOUT_SET_MOUSE_EVENT > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7e850e75c389cbd6fc9ddd6e7f693a2f7e3938b7 --- modules/access/bluray.c | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/modules/access/bluray.c b/modules/access/bluray.c index ee82260fed..4af9e32a94 100644 --- a/modules/access/bluray.c +++ b/modules/access/bluray.c @@ -42,6 +42,7 @@ #endif #include <vlc_common.h> +#include <vlc_mouse.h> #include <vlc_plugin.h> #include <vlc_demux.h> /* demux_t */ #include <vlc_input.h> /* Seekpoints, chapters */ @@ -183,6 +184,7 @@ typedef struct /* */ vout_thread_t *p_vout; + vlc_mouse_t oldmouse; es_out_id_t *p_dummy_video; @@ -280,11 +282,9 @@ static int bluraySetTitle(demux_t *p_demux, int i_title); static void blurayOverlayProc(void *ptr, const BD_OVERLAY * const overlay); static void blurayArgbOverlayProc(void *ptr, const BD_ARGB_OVERLAY * const overlay); -static int onMouseEvent(vlc_object_t *p_vout, const char *psz_var, - vlc_value_t old, vlc_value_t val, void *p_data); +static void onMouseEvent(const vlc_mouse_t *mouse, void *user_data); static int onIntfEvent(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *); - static void blurayResetParser(demux_t *p_demux); static void notifyDiscontinuity( demux_sys_t *p_sys ); @@ -349,9 +349,6 @@ static void blurayReleaseVout(demux_t *p_demux) demux_sys_t *p_sys = p_demux->p_sys; if (p_sys->p_vout != NULL) { - var_DelCallback(p_sys->p_vout, "mouse-moved", onMouseEvent, p_demux); - var_DelCallback(p_sys->p_vout, "mouse-clicked", onMouseEvent, p_demux); - for (int i = 0; i < MAX_OVERLAY; i++) { bluray_overlay_t *p_ov = p_sys->p_overlays[i]; if (p_ov) { @@ -423,6 +420,9 @@ static void startBackground(demux_t *p_demux) es_out_Send(p_demux->out, p_sys->p_dummy_video, p_block); + es_out_Control( p_demux->out, ES_OUT_VOUT_SET_MOUSE_EVENT, + p_sys->p_dummy_video, onMouseEvent, p_demux ); + out: es_format_Clean(&fmt); } @@ -680,6 +680,8 @@ static int blurayOpen(vlc_object_t *object) TAB_INIT(p_sys->i_title, p_sys->pp_title); TAB_INIT(p_sys->i_attachments, p_sys->attachments); + vlc_mouse_Init(&p_sys->oldmouse); + vlc_mutex_init(&p_sys->pl_info_lock); vlc_mutex_init(&p_sys->bdj_overlay_lock); vlc_mutex_init(&p_sys->read_block_lock); /* used during bd_open_stream() */ @@ -1057,6 +1059,9 @@ static es_out_id_t *esOutAdd(es_out_t *p_out, const es_format_t *p_fmt) } } } + if (p_es && fmt.i_cat == VIDEO_ES) + es_out_Control( p_demux->out, ES_OUT_VOUT_SET_MOUSE_EVENT, p_es, + onMouseEvent, p_demux ); es_format_Clean(&fmt); return p_es; } @@ -1269,23 +1274,20 @@ static subpicture_t *bluraySubpictureCreate(bluray_overlay_t *p_ov) /***************************************************************************** * User input events: *****************************************************************************/ -static int onMouseEvent(vlc_object_t *p_vout, const char *psz_var, vlc_value_t old, - vlc_value_t val, void *p_data) +static void onMouseEvent(const vlc_mouse_t *newmouse, void *user_data) { - demux_t *p_demux = (demux_t*)p_data; + demux_t *p_demux = user_data; demux_sys_t *p_sys = p_demux->p_sys; - VLC_UNUSED(old); - VLC_UNUSED(p_vout); - if (psz_var[6] == 'm') //Mouse moved - bd_mouse_select(p_sys->bluray, -1, val.coords.x, val.coords.y); - else if (psz_var[6] == 'c') { - bd_mouse_select(p_sys->bluray, -1, val.coords.x, val.coords.y); + if (!newmouse) + vlc_mouse_Init(&p_sys->oldmouse); + + if (vlc_mouse_HasMoved(&p_sys->oldmouse, newmouse)) + bd_mouse_select(p_sys->bluray, -1, newmouse->i_x, newmouse->i_y); + + if (vlc_mouse_HasPressed( &p_sys->oldmouse, newmouse, MOUSE_BUTTON_LEFT)) bd_user_input(p_sys->bluray, -1, BD_VK_MOUSE_ACTIVATE); - } else { - vlc_assert_unreachable(); - } - return VLC_SUCCESS; + p_sys->oldmouse = *newmouse; } static int sendKeyEvent(demux_sys_t *p_sys, unsigned int key) @@ -2439,13 +2441,8 @@ static void blurayHandleOverlays(demux_t *p_demux, int nread) bool display = ov->status == ToDisplay; vlc_mutex_unlock(&ov->lock); if (display) { - if (p_sys->p_vout == NULL) { + if (p_sys->p_vout == NULL) p_sys->p_vout = input_GetVout(p_demux->p_input); - if (p_sys->p_vout != NULL) { - var_AddCallback(p_sys->p_vout, "mouse-moved", onMouseEvent, p_demux); - var_AddCallback(p_sys->p_vout, "mouse-clicked", onMouseEvent, p_demux); - } - } /* NOTE: we might want to enable background video always when there's no video stream playing. Now, with some discs, there are perioids (even seconds) during which the video window _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
