期刊投稿-高清数字电视机顶盒3D OSD显示框架的设计与实现.doc_第1页
期刊投稿-高清数字电视机顶盒3D OSD显示框架的设计与实现.doc_第2页
期刊投稿-高清数字电视机顶盒3D OSD显示框架的设计与实现.doc_第3页
期刊投稿-高清数字电视机顶盒3D OSD显示框架的设计与实现.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高清数字电视机顶盒3D OSD显示框架的设计与实现江维罗才华四川九州电子科技股份有限公司技术开发中心摘要:本文阐述了在高清数字电视机顶盒中如何利用OpenGL ES 构建3D OSD显示框架,以及应用中的几个问题。关键词:OpenGL ES 高清数字电视机顶盒1 引言随着手机、平板电脑等个人消费电子产品越来越多的使用3D UI交互界面,机顶盒传统平面化的2D OSD很难再吸引用户眼球。同时,大尺寸平板电视机的普及和具备3D硬件加速功能的高清数字电视机顶盒解码芯片的逐步推出,为高清数字电视机顶盒的OSD具备3D效果和动画功能提供了显示平台和硬件支持。OpenGL ES (OpenGL for Embedded Systems) 是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。目前主流的高清数字电视机顶盒解码芯片都支持OpenGL ES,比如博通公司的BCM7125系列芯片支持OpenGL ES 1.1,BCM7231系列芯片支持OpenGL ES 2.0,意法半导体公司的STi7167系列芯片支持OpenGL ES 2.0。2 OpenGL ES 3D OSD显示框架OpenGL ES是一个平台独立的图形库,在它能够工作之前,需要与一个实际的窗口系统关联起来,这与OpenGL相同。但不同的是,这部份工作是有标准的,这个标准就是EGL。在不同的芯片平台上有不同的机制关联窗口系统。通常,机顶盒芯片厂商会提供OpenGL ES和EGL的驱动接口。通常,支持OpenGL ES的系统软件构架如图1所示。机顶盒解码芯片底层驱动OpenGL ES/EGL驱动机顶盒应用程序中间层API接口图12.1 OpenGL ES初始化在OpenGL ES工作之前,需要对OpenGL ES进行初始化。主要包括五个步骤:获取Display,初始化EGL,选择Config,创建Surface ,创建Context。其中Surface的大小和数量将影响3D显示速度。针对高清机顶盒,为了使其在不同的分辨率下都有高质量、清晰的OSD输出,一般将surface大小设置为480P到1080i之间的中间值720P。Surface的数量设置为2个以上,使得显示的Surface和正在操作的Surface分开。如果想进一步提高显示速度,Surface数量必须设置为3个以上,使得显示的Surface和正在操作的Surface之间再间隔一个Surface,避免因为互斥操作而降低显示速度。初始化完成后,Surface与Display之间的关系如图2所示。BlitHD DisplaySD DisplayHD FramebufferSD Framebuffer当前操作当前显示OpenGL SurfaceBlit图2其中,SD Framebuffer可以直接由OpenGL当前显示的Surface Blit生成,或者由HD Framebuffer Blit生成。如果由HD Framebuffer Blit生成,可以进一步提高3D显示速度。2.2 构建3D显示模块OpenGL ES初始化完成后,需要在机顶盒应用程序中构建3D显示模块。这个模块作为3D显示的核心模块,是一个独立的线程,处理窗口系统发来的OpenGL ES指令,同时控制3D显示帧率和系统资源消耗,保证流畅的3D显示效果的同时,尽量降低系统资源消耗,主要是CPU和内存总线资源。另外,这个模块还要处理不同窗口之间三维场景切换。它的工作流程如图3所示,可以描述为:当一个窗口被激活后,窗口把更新所需要的一系列OpenGL ES指令和显示逻辑发给3D显示模块;3D显示模块在接收到指令后,打开计时器开始计时,然后开始处理OpenGL ES指令;当所有指令执行完毕后,3D显示模块检查计时器,得到指令执行一遍所需要的时间,然后根据事先设定的显示帧率,计算下一次指令执行需要等待的时间,并等待;等待超时后,重复执行OpenGL ES指令,直到窗口系统发来停止显示的消息;3D显示模块收到停止显示的消息后,进入休眠状态,等待下一次窗口系统发来消息。至此,OpenGL ES 3D OSD显示框架构建基本完成。另外,还需要纹理预处理,2D和3D显示混合等模块配合才能更好的满足实际OSD显示需求。等待一定时间后重复运行收到停止显示消息OpenGL指令和显示逻辑RunningWaiting图33 纹理预处理由于机顶盒采用Nor或者Nand Flash作为存储器,它们的读速度相对较慢。而且纹理一般由PNG或者BMP图片生成,在生成纹理前需要先读取PNG或者BMP图片,然后根据图片和纹理的Pixel格式进行格式转换和内存拷贝,最后调用OpenGL ES API生成纹理。生成纹理是一个相对耗时的过程,特别是针对大纹理。因此,需要通过在机顶盒启动时,预先加载和处理纹理的方式,提高3D显示速度。如果内存不足以全部加载所需纹理时,需要对纹理进行动态预加载,类似于内存交换技术,当内存不足时,卸载一部分纹理,以便留出空间加载新的纹理。4 2D和3D显示混合2D和3D显示混合的需求主要来自于字符显示。在OpenGL ES中显示字符,常用的有两种模式:1. 将字符做成图片,然后通过加载纹理的方式显示。2. 根据要显示的字符,动态的生成对应的字符纹理,然后显示。这两种模式都有比较明显的缺点,就是当需要显示的字符较多时,第一种模式将无法满足需求,第二种模式会降低3D显示速度。这时,需要将2D和3D显示进行混合,将2D的字符混合到3D上。 常用的混合模式有两种:1. 在OpenGL ES当前操作的Surface上,叠加2D操作。当OpenGL ES完成对当前操作的Surface的动作后,通知2D显示模块,将需要显示的内容叠加到这个Surface上。这种模式下,2D的内容会覆盖3D的内容。2. 单独创建一个2D Surface,在这个Surface上完成所有的2D的操作。当OpenGL ES当前显示的Surface向Framebuffer Blit的时候,先让2D Surface与3D Surface进行混合,然后再Blit到Framebuffer上。这种模式更加灵活,2D的内容可以在3D内容的上面或者下面。由于2D显示采用的是二维坐标系,3D显示采用的是三维坐标系,因此在2D和3D显示混合时还需要解决二维坐标和三维坐标转换的问题。比如,三维坐标(-80,-80,-100)这个点对应视窗的二维坐标(100,100)这个点,如果要在(-80,-80,-100)这个点为起始位置显示一个字符,那么实际上是在视窗的(100,100)这个点显示。如图4所示,需要将投影面的(x,y,z)坐标转换为视窗上(x,y)的坐标,转换的算法根据glFrustumf建立的场景而定。图45 结束语本文阐述了在高清数字电视机顶盒中利用OpenGL ES 构建3D OSD显示框架的软件设计方法,该设计已应用于自主研发的高清机顶盒,3D显示速度和系统资源消耗都满足实际需求,3D OSD显示效果给用户带来了全新的视觉体验和使用感受。参考文献1. Aaftab Munshi, Jon Leech, ”OpenGL ES Common/Common-Lite Profile Specification Version 1.1.12 (Full Specification)”, The Khronos Group Inc.2. Aaftab Munshi, Jon Leech, ” OpenGL ES Common Profile Specification Version 2.0.25 (Full Specification)”, The Khronos Group Inc.3. Aaftab Munshi, Dan Ginsburg, Dave Shreiner著,OpenGL ES 2.0 Programming Guide,Addison-Wesley Professional,2008作者信息: 姓名:江维职称:工程师学位:学士学位单位:四川九州电子科技股份有限公司地址:四

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论