#include <vlc_vout.h> /* vout_PutSubpicture / subpicture_t */
#include <libbluray/bluray.h>
+#include <libbluray/keys.h>
#include <libbluray/meta_data.h>
#include <libbluray/overlay.h>
static void blurayOverlayProc(void *ptr, const BD_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 );
+
#define FROM_TICKS(a) (a*CLOCK_FREQ / INT64_C(90000))
#define TO_TICKS(a) (a*INT64_C(90000)/CLOCK_FREQ)
#define CUR_LENGTH p_sys->pp_title[p_demux->info.i_title]->i_length
assert(p_sys->bluray);
bd_close(p_sys->bluray);
- if (p_sys->p_vout != NULL)
+ 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);
vlc_object_release(p_sys->p_vout);
+ }
if (p_sys->p_input != NULL)
vlc_object_release(p_sys->p_input);
if (p_sys->p_parser)
vlc_gc_decref(p_subpic->updater.p_sys->p_overlay);
}
+/*****************************************************************************
+ * 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)
+{
+ demux_t *p_demux = (demux_t*)p_data;
+ demux_sys_t *p_sys = p_demux->p_sys;
+ mtime_t now = mdate();
+ VLC_UNUSED(old);
+ VLC_UNUSED(p_vout);
+
+ if (psz_var[6] == 'm') //Mouse moved
+ bd_mouse_select(p_sys->bluray, now, val.coords.x, val.coords.y);
+ else if (psz_var[6] == 'c') {
+ bd_mouse_select(p_sys->bluray, now, val.coords.x, val.coords.y);
+ bd_user_input(p_sys->bluray, now, BD_VK_MOUSE_ACTIVATE);
+ } else {
+ assert(0);
+ }
+ return VLC_SUCCESS;
+}
+
/*****************************************************************************
* libbluray overlay handling:
*****************************************************************************/
p_sys->p_overlays[i] = NULL;
}
}
+ var_DelCallback(p_sys->p_vout, "mouse-moved", &onMouseEvent, p_demux);
+ var_DelCallback(p_sys->p_vout, "mouse-clicked", &onMouseEvent, p_demux);
vlc_object_release(p_sys->p_vout);
p_sys->p_vout = NULL;
}
if (p_sys->p_vout == NULL)
p_sys->p_vout = input_GetVout(p_sys->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);
bluraySendOverlayToVout(p_demux);
}
} else