数字机顶盒字幕解码显示系统设计
3.3 字幕图层显示模块
当用户在收看节目,启动字幕功能时,用户看到的是节目画面和字幕画面的叠加,OSD 界面显示技术是指在图像画面上叠加图文显示,使屏幕提供更多附加信息。
为了控制字幕在屏幕上的正常显示,需要利用OSD 驱动模块提供的区域操作功能。在该字幕显示实现中主要用到的OSD 函数接口有OSD 初始化函数、区域清除函数、OSD 区域创建函数、OSD 区域显示函数和OSD 区域隐藏函数,在该系统中以回调函数的形式利用这些接口函数。在系统初始化中,必须先初始化字幕OSD 区域,获取OSD 层的设备id,注册字幕区域创建回调函数、字幕区域显示回调函数、字幕清屏回调函数和字幕区域隐藏回调函数。把这些函数的地址加以保存,当需要相应的 OSD 服务时,就通过函数指针调用相应的函数。
字幕显示可以根据分析PES 包得到时间信息,并通过这个时间信息与音视频同步。在每区域数据解码完毕后,显示模块创建相关的OSD 区域,分配内存空间,把解析完的数据连同该数据要显示的时间PTS 送到显示缓冲区。此时,根据当前系统时钟STC 和存储的PTS 创建一个定时器,如果显示时间已经超过了系统时间,那么显示缓冲区的数据就要清空掉;反之,当显示时间到的时候,定时器被触发,显示内容输出到OSD 缓冲区,并结合显示持续时间来进行字幕的显示。显示状态流程如图5 所示。
图5 显示状态流程
由于字幕的显示和机顶盒菜单界面的显示都是基于区域的,对于不同的应用,不能同时往同一个位置填充不同的数据。因此,在字幕显示前要把菜单OSD 显示区域隐藏起来。当字幕正在显示又需要使用系统菜单时,调用字幕区域隐藏函数,设置显示标志为非需要显示状态。在菜单显示结束后,调用字幕区域显示函数,恢复字幕显示。采用这种方式可以解决字幕显示和界面显示的冲突。
3.4 字幕用户控制模块
控制模块是人机交换模块,主要负责用户请求的处理。本模块的首要任务是将用户的请求进行消息分类,再根据不同的消息与相关的模块进行通信,消息可分为以下几种:获取字幕控制信息消息、启动及停止字幕数据滤波消息、字幕数据解码及停止解码消息、OSD 区域显示消息、OSD 区域清除消息和OSD 区域隐藏消息。
在机顶盒系统软件中,字幕的创建通过遥控器上的字幕键(SUBT)触发,发送消息启动数据控制信息提取模块,解析完毕后显示多语言字幕列表,供用户选择所要接收的语言(上下键选择及OK 键触发)。用户一旦选择后,启动字幕数据提取模块,进行字幕PES数据流的滤波和缓冲,同时启动显示模块,根据各种时间进行显示或者清屏。字幕的关闭由遥控器上的退出(EXIT)键触发,进而控制停止滤波、停止数据解码,释放字幕功能创建的各内存空间,停止字幕显示。
在显示字幕的同时,进行界面菜单操作分成两种情况。一种是菜单操作进行了调台,用户控制模块发送消息关掉字幕功能、停止滤波、释放字幕功能创建的各内存空间;另一种情况是非调台的其他菜单操作,当界面操作结束后则发送字幕恢复显示消息给图层显示模块恢复显示。
4 结束语
本文采用模块化的设计思路,按照功能将机顶盒字幕解码系统分为四个模块,即数据提取、数据解码、数据显示和用户控制模块。在各个模块的实现上按照中间件和驱动层两个方面进行程序设计,使得编写的代码便于理解阅读,同时又易于实现不同平台间移植。
- 以数字方式管理电源的简便方法(11-30)
- 数字电位器在DC-DC变换器中的应用(11-30)
- 数字放大器对电源带来挑战(01-09)
- 热插拨和数字电源监控常见问答(01-18)
- PMBus——数字电源开放标准协议(01-18)
- 基于PIC单片机的数字式智能铅酸电池充电器的设计 (01-02)