新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 数字机顶盒字幕解码显示系统设计方案

数字机顶盒字幕解码显示系统设计方案

作者:时间:2013-01-11来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/185490.htm

  3.2 数据模块

  数据模块负责对PES 包进行

  字幕PES 包解码流程如图4 所示。

图4 字幕PES 包解析流程

图4 字幕PES 包解析流程。

字幕解码主要是对PES 包进行分析,包括PES包头的检测,PES 包头信息的提取和字幕段的分析。

  滤波得到一个PES 包后,首先判断包头是否合法,包括判断前四个字节是否为0×000001BD 和PES包长度是否合法。

  PES 包头信息提取包括提取PTS、PES 包头长度等。PTS 是该分组中承载的所要显示的数据的显示时间。根据包头长度可以定位到PES 的负载位置,进而分析PES 包的负载。

  分析PES 包的负载,首先判断前两个字节(定义字节和字幕流id)是否分别为0×20、0×00.若都符合,则可以确定这个包就是所要的封装有字幕数据的PES 包。然后进入字幕段分析,字幕字段的内容有四种情况。先找到同步头字节0×0f,再往后分析8bit 的段类型(segment_type),通过判断该字节值来确定data_field()携带的是哪种类型的数据。当segment_type为0×10 时[3],该段为页分段;当segment_type 为0×11时,则该段为区域分段;当segment_byte 为0×12 时,该段为CLUT 分段;当segment_byte 为0×13 时,该段为对象数据分段。最后,根据不同的类型调用不同的函数对各种类型的分段进行下一步的分析。

  在页分段的解析中找到该页的页id、显示终止时间、显示状态、该页由几个区域组成、每个区域的区域id 和每个区域的水平垂直坐标,并把这些数据存储起来。然后,根据从页分段中获取的区域的id 找到相应的区域分段,获取该区域的宽高、像素深度、该区域填充的颜色、颜色表id(CLUT_id)、区域的数据对象个数、每个数据对象编号(object_id),并存储这些数据。

  最后,通过CLUT_id 找到颜色表,得到颜色的Y、Cr、Cb、T 值。通过object_id 找到对象数据的内容,包括编码方式及编码数据。用相应的解码方式把这些相关的编码数据解码出来,并放入缓冲区。其中,在页分析时,当解析出的该页的显示终止时间已经过了,则并不需要分析该页,把跟与该页相关的数据缓冲区进行清空操作。

  由于一个PES 包可能包含多个字幕段(subtitling_segment),因此必须循环分析到最后一个字幕段。对每个字幕段分析完后,都要判断下一个字节是下一个字幕段的同步头(0×0f)还是字幕数据结束标志(0×ff)。若是下一个字幕段的同步头则继续分析,若是数据结束标志则代表该PES 包携带的负载分析完毕。最后,把得到的数据存放到显示缓冲区,通过分析得到的PTS 创建一个定时时间,当时间到的时候从缓冲区中把数据读出,并调用OSD 层驱动显示数据。

  在该解码中,对于合成页(composition_page_id)的处理分为两种,这是因为同一个PID 可能传送不同语言的字幕流,即语言不同的多个信息共享同一个PID流,所以在处理的时候可以把合成页设置为滤波器的深度。当一路数据流进来的时候,对符合该PID 的PES 包中对应的页ID 进行判断,与页ID 相同的就提取,不同的就丢弃,这是其中的一种解析提取方式。另一种方式是采用多种语言共用的PID 值去设置滤波器,把与该PID 值符合的字幕流提取出来,送去PES包解析。经过PES 解析出该页ID,这时再判断该页ID是否与在PMT 表解析得到的页ID 一样。如果一样的话,说明正是要找的包,反之则说明是一个无效的PES 包,则丢弃该包。

  3.3 字幕图层显示模块

  当用户在收看节目,启动字幕功能时,用户看到的是节目画面和字幕画面的叠加,OSD 界面显示技术是指在图像画面上叠加图文显示,使屏幕提供更多附加信息。

  为了控制字幕在屏幕上的正常显示,需要利用OSD 驱动模块提供的区域操作功能。在该字幕显示实现中主要用到的OSD 函数接口有OSD 初始化函数、区域清除函数、OSD 区域创建函数、OSD 区域显示函数和OSD 区域隐藏函数,在该系统中以回调函数的形式利用这些接口函数。在系统初始化中,必须先初始化字幕OSD 区域,获取OSD 层的设备id,注册字幕区域创建回调函数、字幕区域显示回调函数、字幕清屏回调函数和字幕区域隐藏回调函数。把这些函数的地址加以保存,当需要相应的OSD 服务时,就通过函数指针调用相应的函数。

  字幕显示可以根据分析PES 包得到时间信息,并通过这个时间信息与音视频同步。在每区域数据解码完毕后,显示模块创建相关的OSD 区域,分配内存空间,把解析完的数据连同该数据要显示的时间PTS 送到显示缓冲区。此时,根据当前系统时钟STC 和存储的PTS 创建一个定时器,如果显示时间已经超过了系统时间,那么显示缓冲区的数据就要清空掉;反之,当显示时间到的时候,定时器被触发,显示内容输出到OSD 缓冲区,并结合显示持续时间来进行字幕的显示。显示状态流程如图5 所示。

图5 显示状态流程

图5 显示状态流程

  由于字幕的显示和机顶盒菜单界面的显示都是基于区域的,对于不同的应用,不能同时往同一个位置填充不同的数据。因此,在字幕显示前要把菜单OSD 显示区域隐藏起来。当字幕正在显示又需要使用系统菜单时,调用字幕区域隐藏函数,设置显示标志为非需要显示状态。在菜单显示结束后,调用字幕区域显示函数,恢复字幕显示。采用这种方式可以解决字幕显示和界面显示的冲突。

  3.4 字幕用户控制模块

  控制模块是人机交换模块,主要负责用户请求的处理。本模块的首要任务是将用户的请求进行消息分类,再根据不同的消息与相关的模块进行通信,消息可分为以下几种:获取字幕控制信息消息、启动及停止字幕数据滤波消息、字幕数据解码及停止解码消息、OSD 区域显示消息、OSD 区域清除消息和OSD 区域隐藏消息。

  在机顶盒系统软件中,字幕的创建通过遥控器上的字幕键(SUBT)触发,发送消息启动数据控制信息提取模块,解析完毕后显示多语言字幕列表,供用户选择所要接收的语言(上下键选择及OK 键触发)。用户一旦选择后,启动字幕数据提取模块,进行字幕PES数据流的滤波和缓冲,同时启动显示模块,根据各种时间进行显示或者清屏。字幕的关闭由遥控器上的退出(EXIT)键触发,进而控制停止滤波、停止数据解码,释放字幕功能创建的各内存空间,停止字幕显示。

  在显示字幕的同时,进行界面菜单操作分成两种情况。一种是菜单操作进行了调台,用户控制模块发送消息关掉字幕功能、停止滤波、释放字幕功能创建的各内存空间;另一种情况是非调台的其他菜单操作,当界面操作结束后则发送字幕恢复显示消息给图层显示模块恢复显示。

  4 结束语

  本文采用模块化的设计思路,按照功能将机顶盒字幕解码系统分为四个模块,即数据提取、数据解码、数据显示和用户控制模块。在各个模块的实现上按照中间件和驱动层两个方面进行程序设计,使得编写的代码便于理解阅读,同时又易于实现不同平台间移植。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭