使用libVLC制作视频播放器的自定义鼠标事件的捕获

 

使用libvlc制作视频播放器等软件时,有时需要捕获用户的鼠标操作,从而进行一些定制化操作,如自定义右键菜单等等..     

  首先,vlc播放视频时的鼠标处理在src\video_output\display.c中的VoutDisplayEventMouse函数中,如果说我们的应用程序中需要处理双击事件,那就在VOUT_DISPLAY_EVENT_MOUSE_DOUBLE_CLICK这个case中进行处理,如何将这个事件传到我们的应用程序中呢?

我的方法是这样的:在src\video_output\video_output.c中的vout_Create中函数中创建一个vlc的视频输出的变量

    var_Create(p_vout,"my_mouse_event",VLC_VAR_INTEGER);
//初始化变量
 var_SetInteger(p_vout,"user_mouse_event",0);

回到VOUT_DISPLAY_EVENT_MOUSE_DOUBLE_CLICK这个case中,在case中设置这个变量,暂定为1,我们还可以定义许多其他值,如单击鼠标:2,鼠标释放:3等等

var_SetInteger(osys->vout,"user_mouse_event",100);


这样就知道用户何时在视频播放界面上进行了什么鼠标操作,第一步就完成了,下一步是如何在应用程序中获取上面的信息呢?

我们可以在libvlc的接口中添加两个接口:一个是读取上面自定义的鼠标事件user_mouse_event的值,一个是清零user_mouse_event

VLC_PUBLIC_API
int libvlc_video_get_mouse_event( libvlc_media_player_t *p_mi,unsigned num);
VLC_PUBLIC_API
int libvlc_video_set_mouse_event( libvlc_media_player_t *p_mi,unsigned num,int value);

上面是函数申明,函数实现可以这样做:

int libvlc_video_get_mouse_event( libvlc_media_player_t *p_mi,unsigned num)
{
	vout_thread_t *p_vout = GetVout (p_mi, num);
    if (p_vout == NULL)
        return -1;
	return var_GetInteger(p_vout, "user_mouse_event");
}

int libvlc_video_set_mouse_event( libvlc_media_player_t *p_mi,unsigned num,int value)
{
	 vout_thread_t *p_vout = GetVout (p_mi, num);
    if (p_vout == NULL)
        return -1;
	return var_SetInteger(p_vout, "user_mouse_event",value);
}


最后在应用程序中开一个后台线程或循环 通过libvlc_video_get_mouse_event 读取user_mouse_event就知道用户何时进行了何种鼠标操作了.

你可能感兴趣的:(VLC开发)