0
P2P数字电视机顶盒OSD概述数字电视的迅速发展,让越来越多的模拟电视面临淘汰的局面。但由于庞大的模拟电视用户群,不可能在一夜之间全部消失,因此作为一种过渡产品,数字电视机顶盒应运而生,它让人们在享受到高清晰的视频信号之外,又可以进行电子商务、远程教育、在线游戏等交互式活动。
根据传输介质的不同,数字电视机顶盒可分为卫星数字电视机顶盒(DVB-S)、地面数字电视机顶盒(DVB-T)、有线数字电视机顶盒(DVB-C)。由于目前国内有线电视网络普遍采用光纤同轴混合网(HFC),全双工通信改造起来简单,成本低廉,因此有线数字电视机顶盒具有广阔的应用前景。
OSD是机顶盒中的重要组成部分,它关系到用户与软件系统的交互,只有设计良好的OSD,才能获得良好的用户体验,但在TI公司Davinci技术TMS320DM6446开发平台上开发出良好的OSD还具有一些实现上的挑战,文中通过深入研究OSD的原理与实现机制给予在该平台上的解决方案。
1
P2P数字电视机顶盒OSD研究与实现
P2P机顶盒是利用了先进的peer-to-peer(P2P)技术,在视频点播的过程中,同时实现下载和上传视频文件流以达到分担视频文件服务器负载和提高下载速度的目的,其原理图如图1所示,在图中每个数字电视机顶盒相当于一个Peer结点,它根据客户端电子节目单(EPGClient)列表项通过网络向EPGServer查询视频资源的地址,EPGServer还回一个URL,然后机顶盒根据统一资源定位URL所给定的地址找到资源所在地服务器,下载资源并向Tracker登记自己的下载进度以及地址等相关信息,当有若干个机顶盒同时在请求同一个视频资源的时候,因为P2P资源是分片存放在服务器上的,所以每一个机顶盒都可以在下载的同时给其它的机顶盒提供自己已经下载好的资源片断,并且也可以同时从其它机顶盒上请求别人已经下载好的资源片断,这样就可以分担服务器的负载同时提高资源下载的速度。
1.1
P2P数字电视机顶盒OSD开发模型
消息驱动模型是创建用户界面软件的高效方法,它有很多优点,如:可重用性、高移植性、实时性等。在本机顶盒OSD编程中就是采用应用层的消息驱动模型,通过共享内存实现与其他进程的通信,如图2所示,其中IRD为红外线遥控器守护进程,OSDComponent为响应OSD菜单的控件,EPGClient为EPGServer的客户端,具体实现如下:
客户通过遥控器遥控机顶盒,触发红外线遥控器守护进程IRD,IRD捕获触发事件并将要显示的OSD数据(如从EPGClient中读入的节目列表、从OSDComponent中读入的按键控件变更信息等)存入共享内存中,然后OSD显示模块函数根据相应的驱动事件的消息从共享内存中读取数据并显示在LCD上。
1.2
P2P数字电视机顶盒OSD体系结构
DaVinci DM6446开发平台处理器支持六层OSD体系结构,从下向上依次是背景窗口层(background)、两个视频窗口层(Video Window 0、Video Window 1)、两个OSD窗口层(OSD Window 0、OSD Window 1)以及一个鼠标窗口层(Cursor)[3],其中视频窗口层采用YCbCr色彩编码方案,而OSD窗口层采用RGB色彩编码方案。如图3所示。
①YCbCr:主要用于视频图像中,其中Y是指亮度分量,也就是灰阶质;Cb指蓝色色度分量;而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。主要的子采样格式有YCbCr 4:2:0、YCbCr 4:2:2和YCbCr 4:4:4。
②RGB:红绿蓝(RGB)是计算机显示的基色,RGB有多种格式,如RGB24(8:8:8)、RGB16(5:6:5)、RGB15(5:5:5),其中RGB24、RGB16、RGB15支持的色深分别为每像素24位、16位、15位,总共可以表达的色彩种类分别为2^24=16M种、2^16=64k种、2^15=32k种。
因为这里重点研究OSD部分,所以下面只研究RGB图像的操作。
(1)图像分层与混合。
对于RGB图像我们知道每一个像素点都由红、绿、蓝三种通道,而红、绿、蓝三个通道里的像素都是(灰阶值为0-255)灰色的,在两个图层上的图像不是直接“混合”的,而是通过各自的红、绿、蓝通道进行“混合”的。由于混合模式算法有很多种,如线性减淡R=a+b,滤色R=a+b-a*b/255,正片叠底:R=a*b/255等。这里a表示“基层”,“基层”就是被混合的层(图层位置在下面),b表示“混合层”,“混合层”就是去混合“基层”的层(图层位置在上面),混合模式算法中对a、b的位置是有要求的,有些可以上下颠倒位置,有些则不能颠倒。这里仅讨论
用于图像混合的正片叠底图层混合模式算法:
①a表示“基层”,b表示“混合层”,R表示混合后的图像;
②a、b、R又分别表示“基层”、“混合层”、混合后图像中通道的灰阶值,并且分别表示R、G、B。
③a、b、R分别取[0,255]之间的正整数;
则运算公式如下:
R=a*b/255
举例如下:
一幅“基层”图像某点的{R、G、B}为{86、73、253},而一幅“混合层”图像某点的{R、G、B}为{82、42、214},则混合后图像的{R、G、B}计算结果如下:
对于R通道中的计算:
R=86*82/255=27.655
对于G通道中的计算:
R=73*42/255=12.024
对于B通道中的计算:
R=253*214/255=212.322
即运算后图像的{R、G、B}为{27、12、212},因此可以得到混合后要输出的结果。 |