使用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就知道用户何时进行了何种鼠标操作了.
相关文章推荐
- 安卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)
- .NET使用钩子捕获全局鼠标和键盘事件
- Windows下Qt使用Usb摄像头采集视频实现鼠标事件
- WDS使用捕获映像制作企业自定义映像
- 使用Javascript封装实现屏蔽鼠标右键系统键菜单,并绑定自定义的事件
- 捕获鼠标点击事件 做自定义右键菜单
- AS3自定义鼠标光标后应注意鼠标事件捕获问题
- 简易的自定义滚动条加鼠标滑轮事件结合使用
- WDS使用捕获映像制作企业自定义映像
- 制作c#安装程序/使用安装服务类自定义安装事件
- web前端实验一:利用Js捕获鼠标事件实现图片切换
- Android中使用ClassLoader修改自定义异常类继承来使异常捕获失效来坑害你的同事
- c#自定义事件的使用方法
- windows程序中怎样使用自定义鼠标(含动态鼠标)
- 如何使用AndriodStudio制作音乐播放器音乐列表界面和导入手机音乐资源
- IOS自定义View使用block实现点击事件
- 如何使用SendMessage函数实现模拟鼠标点击按钮事件?
- 使用VideoView自定义一个播放器控件
- flv视频网站制作 使用Flex和PHP创建自己的视频应用
- 捕获视频从Vgadvihdmi输出使用DVI2USB