最近要在离子二代平台上移植数字电视播放器,采用NVIDIA的VDPAU硬解码,视频输出采用VDPAU,由于VDPAU不光有视频硬解码功能,还有HW Scale的功能,所以可以基于VDPAU做浮动OSD层(频道列表)。源于这个,最近仔细地分析了一下MPlayer的视频输出框架,着重解释了VDPAU视频输出插件。
1.视频输出框架
mplayer整体框架采用了函数指针来实现面向对象,视频输出依然不例外。mplayer视频输出包括两层:filter和video out层。video out层是被包含在filter之中。video out层的插件代码是以vo_开头,例如vo_x11.c,vo_xv.c,vo_vdpau.c等等。filter有一个典型的插件就是vf_vo.c,该filter是对video out层的包装。视频解码完毕后是通过filter(vf_vo.c)来调用vo_vdpau.c
2.视频输出插件介绍
每一个视频输出插件都至少包含如下函数:
1)preinit:预初始化视频输出插件,该步骤初始化和视频格式不相关的部分,例如视频输出的窗口大小和格式都不应该在该函数中完成。
VDPAU输出插件的preinit函数:子选项解析,vdpau库初始化,变量初始化。
2)control:控制视频输出插件。
VDPAU输出插件的control函数:主要实现了如下功能。
request = 2,视频输出格式查询
request = 32,设置和屏幕相关的信息,没有涉及到媒体的格式和分辨率。
request = 9, 为视频帧分配空间。
request = 13&
1.视频输出框架
mplayer整体框架采用了函数指针来实现面向对象,视频输出依然不例外。mplayer视频输出包括两层:filter和video out层。video out层是被包含在filter之中。video out层的插件代码是以vo_开头,例如vo_x11.c,vo_xv.c,vo_vdpau.c等等。filter有一个典型的插件就是vf_vo.c,该filter是对video out层的包装。视频解码完毕后是通过filter(vf_vo.c)来调用vo_vdpau.c
2.视频输出插件介绍
每一个视频输出插件都至少包含如下函数:
1)preinit:预初始化视频输出插件,该步骤初始化和视频格式不相关的部分,例如视频输出的窗口大小和格式都不应该在该函数中完成。
VDPAU输出插件的preinit函数:子选项解析,vdpau库初始化,变量初始化。
2)control:控制视频输出插件。
VDPAU输出插件的control函数:主要实现了如下功能。
request = 2,视频输出格式查询
request = 32,设置和屏幕相关的信息,没有涉及到媒体的格式和分辨率。
request = 9, 为视频帧分配空间。
request = 13&