您的位置:首页 > 其它

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

2011-09-18 20:23 856 查看

使用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
intlibvlc_video_get_mouse_event(libvlc_media_player_t*p_mi,unsignednum);
VLC_PUBLIC_API
intlibvlc_video_set_mouse_event(libvlc_media_player_t*p_mi,unsignednum,intvalue);

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

intlibvlc_video_get_mouse_event(libvlc_media_player_t*p_mi,unsignednum)
{
vout_thread_t*p_vout=GetVout(p_mi,num);
if(p_vout==NULL)
return-1;
returnvar_GetInteger(p_vout,"user_mouse_event");
}

intlibvlc_video_set_mouse_event(libvlc_media_player_t*p_mi,unsignednum,intvalue)
{
vout_thread_t*p_vout=GetVout(p_mi,num);
if(p_vout==NULL)
return-1;
returnvar_SetInteger(p_vout,"user_mouse_event",value);
}


最后在应用程序中开一个后台线程或循环通过libvlc_video_get_mouse_event读取user_mouse_event就知道用户何时进行了何种鼠标操作了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: