手机端
or

欢迎您加入我爱方案网QQ群

1.智能产品外包服务群(311606115)
2.嵌入式项目开发群(491609563)

基于DM6446的P2P数字电视机顶盒OSD研究与实现

黄益贵,王汝传| 数字电视,机顶盒,P2P,中文显示| 2010-11-14
1090 收藏
分享到: 
每日精选
热门推荐

【中心议题】
    * 提出了一种
P2P数字电视机顶盒OSD
    * 给出了具体设计方案
【解决方案】

    * 采用消息驱动模型
    * 采用六层体系结构

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.1 P2P数字电视机顶盒OSD开发模型

消息驱动模型是创建用户界面软件的高效方法,它有很多优点,:可重用性、高移植性、实时性等。在本机顶盒OSD编程中就是采用应用层的消息驱动模型,通过共享内存实现与其他进程的通信,如图2所示,其中IRD为红外线遥控器守护进程,OSDComponent为响应OSD菜单的控件,EPGClientEPGServer的客户端,具体实现如下:

图2

客户通过遥控器遥控机顶盒,触发红外线遥控器守护进程IRD,IRD捕获触发事件并将要显示的OSD数据(如从EPGClient中读入的节目列表、从OSDComponent中读入的按键控件变更信息等)存入共享内存中,然后OSD显示模块函数根据相应的驱动事件的消息从共享内存中读取数据并显示在LCD上。

1.2 P2P数字电视机顶盒OSD体系结构

DaVinci DM6446开发平台处理器支持六层OSD体系结构,从下向上依次是背景窗口层(background)、两个视频窗口层(Video Window 0Video Window 1)、两个OSD窗口层(OSD Window 0OSD Window 1)以及一个鼠标窗口层(Cursor)[3],其中视频窗口层采用YCbCr色彩编码方案,OSD窗口层采用RGB色彩编码方案。如图3所示。

图3

YCbCr:主要用于视频图像中,其中Y是指亮度分量,也就是灰阶质;Cb指蓝色色度分量;Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。主要的子采样格式有YCbCr 4:2:0YCbCr 4:2:2YCbCr 4:4:4

RGB:红绿蓝(RGB)是计算机显示的基色,RGB有多种格式,RGB24(8:8:8)RGB16(5:6:5)RGB15(5:5:5),其中RGB24RGB16RGB15支持的色深分别为每像素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表示“混合层”,“混合层”就是去混合“基层”的层(图层位置在上面),混合模式算法中对ab的位置是有要求的,有些可以上下颠倒位置,有些则不能颠倒。这里仅讨论

用于图像混合的正片叠底图层混合模式算法:

a表示“基层”,b表示“混合层”,R表示混合后的图像;

abR又分别表示“基层”、“混合层”、混合后图像中通道的灰阶值,并且分别表示RGB

abR分别取[0,255]之间的正整数;

则运算公式如下:

R=a*b/255

举例如下:

一幅“基层”图像某点的{RGB}{8673253},而一幅“混合层”图像某点的{RGB}{8242214},则混合后图像的{RGB}计算结果如下:

对于R通道中的计算:

R=86*82/255=27.655

对于G通道中的计算:

R=73*42/255=12.024

对于B通道中的计算:

R=253*214/255=212.322

即运算后图像的{RGB}{2712212},因此可以得到混合后要输出的结果。

(2)Alpha通道。

OSD图像混合中,为了实现图像的透明效果,采取在图像文件的处理与存储中附加上另一个8位信息的方法,这个附加的通道代表图像中各个像素点透明度的信息就叫做Alpha通道。Alpha通道使用8位二进制数,最多可以表示2^8=256级灰度,256级的透明度。这样一来,一幅完整的全信息图像应该是24RGB彩色加8256级的透明信息,一共是32位。Alpha通道通常白色值为255,用以定义完全不透明的像素,而黑色值为0,用以定义完全透明像素,介于黑白之间的灰度(值为0-255)Alpha像素用以定义从完全透明到完全不透明之间的过渡像素。

计算机图形学中总是把[0-255]映射到[0-1]区间上,Alpha值为0-1之间的数值,这样一个完成的图像分量信号就由RGBA组成(其中A就是Alpha),并且每幅图像的输出等于{R*AG*AB*A},图像混合后的输出就是

Output=Alpha*foreground+(1-Alpha)*background

其中Output为输出混合后的图像,foreground为“混合层”图像,background为“基层”图像。调整这个Alpha值便可以得到不同的混合效果。当Alpha0,只显示“基层”图像;Alpha值为1,只显示“混合层”图像,当取其它介于0-1之间的值可取得按照一定比率混合的图像,这样就可以按照一定的方式实现文字叠加、图片混合等效果,可以调整Alpha值直到符合要求。

(3)DM6446中的具体实现。

DaVinci DM6446平台中,TI公司把视频输出硬件抽象成一个帧缓冲设备,这样在linux操作系统下,可以直接对其执行像操作一般文件一样打开、读、写和关闭等操作,因此可以直接在其上进行快速OSD开发。在OSD体系结构图2,OSDWIN1是用于配制混合图像属性的窗口(例如透明度),OSDWIN0是用于显示图像的窗口。由于DM6446支持RGB565或位图数据两种格式,又由于RGB图像格式表达的色彩种类可达64k,因此这里选用RGB565格式,但是RGB数据是原始未压缩数据,不包含常用于图像编辑器识别图像的头信息,且种类众多,没有可以利用的图像编辑器直接生成RGB565图像文件。BMP位图数据也是未压缩的,但它在每个位图数据后面附有文件格式头信息,且当每像素使用相同的位数表示时,位图数据格式和RGB565数据格式本质上是一样的。这样在实际应用中,就需要对BMP位图文件进行转换,使之生成RGB16图像文件。由于BMP图像是24位的,且其位图信息在文件中是按照颜色顺序为BGR (24,每种颜色分量为8)的顺序存放的,读出来后分别取RGB分量的高5,6,5位的颜色信息,并丢弃低3(R)2(G)3( B)位的颜色信息,将之转换为16位的,且颜色顺序为RGB(5 6 5)RGB565数据,然后再存放到文件中去。使用fread()库函数从位图文件流中分别读取蓝、绿、红的图像色彩分量,然后作为OSD数据写入RGB16数据中,这样就可以得到所需要的RGB565格式图像文件。将该图像文件拷贝到OSD数据缓冲区中,即可查看图像输出效果,调整OSDWIN1中的图像混合属性配制,修改其中的Alpha通道值,使其图像的混合输出达到满意效果。

1.3 P2P数字电视机顶盒OSD菜单设计

OSD菜单作为直接关系到用户体验的满意度,要求必须具有良好的人性化设计,还要能够实现强大的操作功能,因此我们对此进行了合理的规划与设计。

OSD菜单主要包括四个组成部分:

1)本地节目(LocalWindow):该菜单读取本地硬盘上存取节目的列表,并对之进行播放、删除、上传、下载等操作等。

2)P2P网络(NetworkWindow):该菜单与EPGClient交互,读取EPGServer服务器上的当前频道列表以及节目信息并对之进行相应操作等。

3)系统设置(Setup):该菜单主要实现服务器IP和用户名、密码还有上传速度以及下载速度,同时允许连接数、端口等的设置。

4)工具(Tools):该菜单主要实现第三方软件的安装、使用以及升级,如浏览器、游戏等。

在本OSD菜单中,采用双向动态链表进行导航操作,实现父子窗口、父子控件以及同屏翻页、同屏滚动等事件的操作,数据结构如下:

typedef struct osd_ui_t

{

struct osd_ui_t * prev;

struct osd_ui_t * next;

osd_item_t * head;

osd_item_t * focus;

OSD_UI_FUNCTION next_focus;

OSD_UI_FUNCTION prev_focus;

}osd_ui_t;

当窗口链的状态发生变化时,必须动态分配和撤销这些存储区。窗口的创建、撤销、关闭等OSD内部函数及消息提供了很好的内存管理方法,它是整个OSD系统能否稳定运行的基础。

2 P2P数字电视机顶盒OSD中文显示解决方案

由于DaVinci DM6446平台不支持中文显示,因此要在应用程序界面上使用中文字符,需要自己开发中文显示函数。在图形操作系统中,中文字符(包括英文)通常有两种存储格式:一种是存储字符的矢量图形,例如,用样条的方式,拟合一个字符的所有笔画轮廓,存储样条的关键点,来实现字符的存储,这种字库称为矢量字库;另一种是存储字符的图形点阵,即是以位图形式存储字符,在数据中,01区分汉字的笔画,这种字库称为位图字库或点阵字库。这两种方式各有优缺点,矢量字库不存在放大以后失真的问题,并且因为存储的是笔画样条,可以对字符做旋转、缩放、高斯模糊,甚至三维拉伸都不会失真,但是矢量字库存储的是样条,在显示的时候,增加了计算量,不便于快速显示。而对于点阵字体,虽然在放大的时候边缘会产生锯齿,影响整个字符的美观,但是由于每个相同大小的字符存储所用空间是固定的,且便于管理、易于显示,适应于性能和资源相对比较欠缺的嵌入式环境,因此在本嵌入式平台中,使用的是16点阵的位图字体库。

众所周知,在计算机内一个英文字符用一个字节的ACSII码表示,该字节的最高位经常用于奇偶校验位,因此实际表示字符的只有7,即可以表示2^7=128个字符,但是由于汉字的复杂性,需要使用两个字节表示一个汉字,针对这种情况国家制定了国标码。

国标码规定,组成两字节代码的各字节的最高位均为0,即每个字节仅只使用7,这样在机器内使用时,由于英文的ASCII码也在使用,可能将国标码误看作两个ASCII,因而在机器内使用汉字时,每个字节的最高位均为1,以表示该码表示的是汉字,这些国标码两字节最高位加1后的代码称为机器内的代码,俗称“内码”。

汉字内码与区位码有固定的转换关系,例如汉字字符“国”字的内码0xb9fa,它所对应的区码和位码分别为:qm=0xb9-0xa0;wm=0xfa-0xa0;因而该汉字在16*16点阵汉字库中距离字库文件头的偏移位置offset(以字节为单位),可计算得:

offset=(94*(qm-1)+(wm-1))*32L

获取偏移位置后,调用fseek()函数和fread()函数从事先已经fopen()的字库中提取要显示汉字的字模,将获取的汉字字模存储到一个字符数组中。这样,顺序读取32字节的点阵信息后,利用画图函数drawpixel(int x,int y,int r,int g,int b)在屏幕上指定的(x,y)位置上对一个16*16像素的图形区域进行色彩填充(设置rgb),如果点阵汉字中某位为1,则填充该像素点;若为0,则不填充该像素点,从而就可以显示出来一个汉字。

查找字库显示点阵有两种方式:一种是边查找边显示,即在显示每个汉字之前,先根据区位号读取点阵字模,对于16*16的点阵,需要16*16/8=32个字节的存储空间,这样在显示所有汉字点阵之前需要大量地频繁查找字库,消耗了大量的CPU时间。另一种是先从字库中读取所有要显示汉字的点阵字模,放到一个缓冲区中,然后再显示,这样对于100个汉字所占用的缓冲区空间大约为3kB(100*32=3200)。由于机顶盒CPU需要处理大量的视频和音频数据,并且对于嵌入式系统,点阵缓冲所占用的空间并不算大,综合考虑,采用第二种方案更加合理。

3 结束语

文中所描述的基于TI公司DaVinci技术TMS320DM6446P2P机顶盒OSD研究与实现,较好地解决了该平台适应于P2P流媒体播放技术时界面操作和面向本土化开发所欠缺的问题,从理论和工程实践上研究了OSD的原理以及具体实现,汉字显示的原理以及具体实现。实践证明,该方案获得了良好的效果。

点赞

深圳市中电网络技术有限公司 Copyright© www.52solution.com 粤ICP备10202284号