APP下载

隐藏式字幕解码与显示系统的FPGA实现

2017-03-07喻金华肖铁军

电子科技 2017年2期
关键词:隐藏式状态机字幕

王 涛,喻金华,肖铁军

(江苏大学 计算机科学与通信工程学院,江苏 镇江 212013)

隐藏式字幕解码与显示系统的FPGA实现

王 涛,喻金华,肖铁军

(江苏大学 计算机科学与通信工程学院,江苏 镇江 212013)

针对传统的数字电视隐藏式字幕解码与显示方案中广泛采用专用解码芯片,其代码不易移植、接口不易修改、功能不易扩展以及额外的芯片花费多等问题,提出了一种采用FPGA作为处理芯片,研究设计了基于SMPTE协议和708CC标准的隐藏式字幕解码与显示方案。该方案采用Verilog HDL硬件描述语言进行编程,实现了隐藏式字幕原始数据的提取,以及DTVCC数据包、字幕服务数据的重组。并对字幕服务数据解码,实现了字幕的叠加显示。同时提出并应用了一种待显示字符的叠加方法,实现了字幕窗口、字幕字符的定位。测试结果表明,FPGA运行稳定,实现了隐藏式字幕的解码与显示。

隐藏式字幕;FPGA; 708CC; DTVCC

隐藏式字幕(Closed Caption,CC )最初的理念就是给听力有障碍的人士带来更完美的视频观看体验[1-3],后来运用到像声音嘈杂的机场或者候车大厅以及人们用来学习和练习外语和口语,并取得了良好的效果[4]。

随着高清节目源的增多,高清数字电视成为了当今的主流。采用专用的解码芯片来实现隐藏式字幕,不仅难以满足集成度高的设计要求,同时也增加了产品的成本。并且单纯的专用解码芯片设计方案,在数据处理速度上也将出现瓶颈。采用现场可编程门阵列(FPGA)的隐藏式字幕实现方案是一个不错的选择,FPGA集丰富的硬件资源于一体,拥有强大的并行处理数据能力,即能够满足集成度要求高的设计产品,又能够实现高速处理数据的要求。

目前国内外已经有许多专用监视器厂商采用FPGA作为处理视频的主处理器。如果利用其FPGA的资源实现隐藏式字幕解码与显示系统,不仅节约成本,也提高了产品的集成度。因此实现隐藏式字幕系统的FPGA方案具有深远的现实意义。本文主要对数字电视高清SDI信号进行分析并提取出隐藏式字幕原始数据,然后进行DTVCC数据包的重组,接着对字幕服务包数据重组,再去对用户选择的字幕服务数据包进行解码,并添加同步处理模块,实现隐藏式字幕与音频的同步显示。

1 系统总体设计

本文研究的隐藏式字幕解码与显示系统以SMPTE标准中的VANC协议和CDP协议作为隐藏式字幕原始数据提取的依据[5-7],并以708CC协议作为实现隐藏式字幕数据解码和显示的指导标准[8],通过FPGA实现系统的硬件设计[9]。

系统总体设计结构主要分为7个部分,如图1所示,场辅助数据检测、字幕传输包CDP分析、字幕数据分析、字幕服务数据分析、字幕服务数据解码、字幕同步、字幕数据显示。

图1 隐藏式字幕解码与显示系统架构图

该系统研究了一种隐藏式字幕解码与显示的硬件实现方案,并实现了针对高清SDI信号源的隐藏式字幕数据的分析提取方法。方法描述如下:首先需要对SDI信号进行场辅助数据包开始的判断,并进入到用户数据字UDW数据段,然后近一步对UDW中高清字幕数据中的CDP进行分析,提取出隐藏式字幕原始数据并缓存。整个硬件实现方案中包括以下几个关键模块:隐藏式字幕数据提取模块、字幕数据分析模块、字幕服务数据分析模块、字幕服务数据解码模块、字幕同步处理模块、字幕数据解析显示模块。

2 系统硬件设计实现

2.1 隐藏式字幕数据提取模块

该模块主要包括3个处理部分:场辅助数据VANC的分析、字幕传输包CDP的分析以及字幕原始数据的缓存。对于输入的高清SDI数字视频信号,场辅助数据VANC的分析通过状态机实现。状态机如图2所示。

图2 场辅助数据VANC分析状态机

当进入场辅助数据分析状态机中,只有在包头信息ADF、DID、SDID都正确的情况下,进入对用户数据字UDW数据分析即实现字幕传输包CDP分析,并通过UDW字节数DC实现状态机回到空闲状态,等待下一个场辅助数据的到来。字幕传输包CDP的分析也是通过状态机来实现。字幕传输包CDP分析状态机如图3所示。

图3 字幕传输包CDP分析状态机

当VANC状态机进入到用户数据字UDW状态时,只有在CDP包头信息正确的情况下,进入到CDP分析状态机。从CDP语法结构可以知道,只有包头和包尾是必有的,其时间码、字幕数据和字幕服务信息3部分是不一定的。依据这个特点,虽然在CDP分析状态机对每一部分都进行分析,但是只对字幕数据进行提取,通过字幕数据段的cc_count读出24 bit字幕数据并通过FIFO进行缓存输出到字幕数据分析模块。

2.2 字幕数据分析模块

从隐藏式字幕数据提取模块缓存中读出的24 bits字幕数据,即5 bit的marker_bits,1bit的cc_valid、2 bits的cc_type和两个分别为8 bits的字幕数据cc_data_1和cc_data_1。通过判断cc_valid和cc_type值,实现DTVCC数据包的重组。当cc_valid为0时,字幕数据无效。当cc_valid为1时,cc_type为00和01时,为608CC字幕数据,未进行缓存处理;cc_type为10时,为DTVCC数据,通过FIFO进行缓存,并尽力输出给字幕服务数据分析模块;cc_type为11时,表示DTVCC数据包开始。通过给予定义的内部变量dtvcc_pkt_start一个时钟的高电平表示DTVCC数据包开始,并输出给字幕服务分析模块,判断DTVCC数据包的开始。

2.3 字幕服务数据分析模块

本模块主要的功能是实现DTVCC数据包的分析,并进行字幕服务数据的重组。重组的DTVCC数据包结构如图4所示。

图4 DTVCC数据包结构图

由图4可知,DTVCC数据包中主要由DTVCC数据包包头和n个service block服务块组成,每个服务块都有自己的header且不跨越DTVCC数据包,其中如果DTVCC数据包最后多出1 Byte的数据空间,则用NULL补充,即表示DTVCC数据包结束。

该系统中只对前6个标准字幕服务数据进行数据重组。通过上一个模块的内部变量dtvcc_pkt_start为高电平判断DTVCC数据包的开始,读取缓存中的DTVCC数据。读入的第一个数据为DTVCC数据包header,即DTVCC数据包序列号和DTVCC数据包大小,通过内部变量dtvcc_seq_num和dtvcc_pkt_size保存。dtvcc_seq_num应该为从0~3的循环数,是判断DTVCC数据包是否丢包的依据。如果DTVCC数据包丢包则清空缓存中存在的所有DTVCC数据,等待下一个DTVCC数据包的到来。通过dtvcc_pkt_size可实现DTVCC数据包的计数。读入的第二个数据即为服务块header。如果高3 bit全为1,则为扩展字幕服务,不再分析DTVCC数据包剩余的数据,等待下一个DTVCC数据包的到来;如果header高3 bit不全为1,则为标准字幕服务,通过内部变量service_num和block_size分别保存服务序列号和服务块大小。通过service_num进行字幕服务数据的分类,block_size进行计数,就可以实现字幕服务数据包的重组,并通过FIFO去缓存字幕服务数据。如果缓存的字幕服务数据为用户选择的字幕服务,在进行缓存前,需要判断Reset和DelayCancel指令字。如果出现Reset指令字,则复位该字幕服务缓存中的字幕数据。

2.4 字幕数据解码模块

从字幕服务数据分析模块缓存中读入的字幕服务数据主要分为两种,即字幕指令字数据和字幕文本数据,通过查找编码映射表实现字幕服务数据种类的判定,进行字幕服务数据的解码。对于双字节DTVCC指令字(即ClearWindows、DisplayWindows、HideWindows、ToggleWindows、DeleteWindows、Delay),则在解码时只通过内部定义变量保存低8bits,并只保持一个时钟就清零,这样即可判断指令字的变化;对于多字节DTVCC指令字(即DefineWindows、SetWindowAttributes),还需要根据其指令字的码长,全部处理完,再输出;由于SetpenAttributes、SetPenColor、和SetPenLocation指令字都是出现在SetCurrentWindow指令字之后,出现在字幕文本之前,所以将其缓存到对于的窗口FIFO中;对于C0中的字符文本控制指令CR、HCR、FF同样缓存到对于窗口的FIFO中;对于字幕文本数据,都是出现在SetCurrentWindow指令字之后,结束在下一个指令字或者一个ASCII字符ETX(end of text)到来之前。这样我们就可以通过SetCurrentWindow指令字将不同窗口的字幕文本数据缓存到不同窗口的FIFO中。

2.5 字幕同步处理模块

从字幕数据的提取到字幕数据的显示,如果没用接收到Delay指令字,都应该采用“尽力交付”的原则进行数据的处理,以实现字幕的同步显示[10]。接收到Delay指令字,当延时时间完成或者接收到了DelayCancel指令字,则继续对字幕服务数据进行解码,保障字幕的同步显示。

2.6 字幕数据解析显示模块

本模块主要的功能是解析DTVCC指令字和将字幕文本显示在对于的窗口中。在本文中只描述一个窗口和一种大小的字符的显示原理(因此SetpenAttributes指令字未说明),其余窗口和字符显示的方法是相同的。

2.6.1 字幕窗口的定位

字幕窗口是实现字幕显示的基础,字幕窗口应显示在屏幕安全显示区内。对输入的DefineWindows指令字,首先需要根据DefineWindows中的窗口行数rc和列数cc,计算窗口的大小,即窗口宽度 = (列数cc+1)×字符ROM中字型码宽度像素;窗口高度 = (行数rw+1)×字符ROM中字型码高度像素。然后根据DefineWindows中的锚点Anchor point的ID和坐标,计算出窗口x扫描坐标开始有效信号window_x_start_valiad、x扫描坐标结束有效信号window_x_end_valiad、y扫描坐标开始有效信号window_y_start_valiad、y扫描坐标结束有效信号window_y_end_valiad的有效范围,实现窗口的定位。如果当前窗口已经存在,则只需要更新窗口参数即可。

2.6.2 字幕窗口中字符显示区域的定位

字幕字符显示区域的定位是在实现字幕显示窗口定位的基础上实现的。由上可知字幕窗口的大小是根据字符ROM中字型码宽度和高度像素以及字幕窗口的rc行数和cc列数计算出来的,因此字幕窗口正好可以分成(rc+1)×(cc+1)个字符显示区域[11-12]。并定义变量char_eara[P][Q]表示第P行Q列字符待显示区域满足扫描坐标条件,高电平有效。

本系统中对字符只采用从左到右,从上到下的显示风格(因此SetPenLocation指令未解析),因此字幕窗口中第一个字符待显示区域即为字幕字符实际显示区域。通过字符指令CR、HCR、FF、ETX控制字符在字幕窗口显示中每行字符之间的转换,确定每行字幕待显示区域实际需要显示的字符个数;同时定义内部变量window_enchar[K][N]表示第K行N列待显示区域有字幕字符显示,高电平有效。对于同时满足char_eara[A][B]和window_enchar[A][B]都为高电平的字符显示区域,给予定义的字符显示使能变量window_char_dispaly[A][B]高电平。

2.6.3 字符字型码存储与读取

字符字型码的存储通过单端口ROM来实现,并通过ISE中的coe文件将95个像素为32×64的标准ASCII码存储在ROM中[13]。其中输入地址addr为17 bits;输出像素数据data_pix为1 bit的点阵数据。图5为字型码ROM接口图。

图5 字型码ROM接口图

通过变量window_char_dispaly[A][B]为高电平,确定在窗口中哪一个字幕显示区域有字符的显示。将从窗口缓存中读出的字幕窗口文本数据减去8’h20,然后将低7 bit保存到变量window_char_base_addr作为读字型码基地址;由于字幕窗口中字符的显示是连续的,所以字型码水平偏移地址x_offset_distance等于(vid_x_coord-window_x_satrt-32*B)扩号内的差值,同理垂直偏移地址y_offset_distance等于 (vid_y_coord-window_y_satrt - 64*A)括号内的差值。其中vid_x_coord和vid_y_coord为来自SDI接口模块的像素扫描坐标值,window_x_satrt和window_y_satrt为窗口水平x和垂直y的开始像素坐标值。通过地址addr,其中高7 bit为字型码索引号(基地址);低5 bit为水平x偏移地址,中间6 bit为垂直y偏移地址,即可读出字型码像素数据data_pix。同时给窗口读字型码变量window_rdstring_en高电平。

2.6.4 字幕窗口中显示区域的划分

字幕窗口中显示区域分为3部分,即窗口背景区、字符前景区、字符背景区。3个区域都应满足window_x_start_valiad、window_x_end_valiad、window_y_start_valiad和window_y_end_valiad这4个变量同时有效的情况,如果无效则为窗口外的视频显示区域。当上述4个变量同时有效时,同时变量window_rdstring_en为低电平时为窗口背景区;变量window_rdstring_en为高电平时,同时输出像素数据data_pix为高电平时为字符前景区,反之data_pix为低电平则为字符背景区[14-15]。

字幕窗口中每个区域定位实现之后,根据指令字SetPenColor和SetWindowAttributes实现各区域的着色。

2.6.5 窗口与字符的显示

ClearWindows指令字可以删除字幕窗口中显示的字幕;DisplayWindows指令字将窗口中的字幕显示在窗口中;反之HideWindows指令字则是将窗口中显示的字幕隐藏起来;ToggleWindows指令字则是将原来隐藏的字幕显示出来或原来显示的字幕隐藏起来;DeleteWindows指令字是将字幕窗口和字幕全部删除。

3 系统验证与结果分析

为验证基于FPGA的隐藏式字幕系统的显示效果,编写根据SMPTE标准中相同语法结构的隐藏式字幕数据存入ROM中(由于没有含有隐藏式字幕的信号源设备),通过隐藏式字幕提取模块去读取ROM中的数据,接着对隐藏式字幕数据进行处理,最后与输入的SDI信号视频源进行叠加,通过监视器终端显示出来。图6所示为1 280×720分辨率的源视频图像上显示隐藏式字幕窗口和字符的显示效果。

图6 隐藏式字幕显示效果图

字幕窗口的背景色为红色,字符的前景色为白色和背景色为绿色。这样夸张的显示效果是为了验证字幕窗口显示区域与字符显示区域的划分。在实际隐藏式字幕显示中会根据用户的需求,通过OSD设置选择更完美的视频和隐藏式字幕显示效果。用户也可以选择关闭字幕的显示。

验证结果表明,该系统能够实现隐藏式字幕数据的解码与显示,但是也有一些不足之处,如没有把DTVCC更多的显示效果实现出来。

4 结束语

隐藏式字幕作为专业监视器重要的功能之一,也是欧美数字电视必不可少的组成部分,具有广泛的应用。本文根据SMPTE相关协议和708CC标准,并结合FPGA并发处理数据的特点,通过硬件电路实现了隐藏式字幕解码与显示系统的设计,具有实时性强,处理数据量大的优点。同时利用FPGA处理视频数据的富足资源去实现隐藏式字幕功能,具有成本低、集成度高的优势。是采用FPGA做视频处理芯片的监视器厂商,实现隐藏式字幕显示功能的首选方案,具有一定的实际运用价值。为达到更佳完美的显示效果,该系统还有一定的改进空间。

[1] 王俊杰.欧美国家发展隐藏式字幕的策略[J].中国广播电视学刊,1997(7):79-80.

[2] Brian Markwalter. 数字电视时代的隐藏式字幕[J]. 中国电子商情:基础电子,2007(12):51-53.

[3] 郑婷.数字电视隐蔽字幕显示的研究与实现[D].天津:天津大学,2007.

[4] 季申.闭合字幕解码软件的分析与设计[D].上海:复旦大学,2006.

[5] SMPTE.Vertical ancillary data mapping of caption data and other related data, SMPTE 334-1-2007[S].USA:SMPTE,2007.

[6] SMPTE. Vertical ancillary data mapping for bit-serial interface,SMPTE 334M-2000[S].USA:SMPTE,2000.

[7] SMPTE.Caption distribution packet definition,SMPTE334-2-2007[S].USA:SMPTE,2007.

[8] CEA.Digital television closed caption,CEA-708-D[S].USA:CEA,2008.

[9] 田耘.Xilinx FPGA开发实用教程[M].北京:清华大学出版社,2008.

[10] 江维. 数字电视隐藏字幕解码器在数字电视机顶盒中的实现[J].现代电视技术,2014(2):114-116.

[11] 符浩敏,喻金华,肖铁军. 基于新型二步索引算法OSD电路的FPGA实现[J].电子测量技术,2014,37(7):49-52.

[12] 喻金华,符浩敏,肖铁军. 基于SoPC的OSD控制器设计[J]. 电子技术应用, 2014, 40(6):10-13.

[13] 刘科,张生才,史在峰,等.基于改进型二步索引算法OSD电路的FPGA实现[J].电子测量技术,2007, 30(7):94-96.

[14] 罗国柱,张涌.DM6446中的Qt GUI视频叠加显示方法 [J].现代电子技术,2013,36(14):85-88.

[15] 李慧玲.MB90092芯片在成像测井字符叠加中的应用[J].兰州工业高等专科学校学报,2012, 19(1): 12-14.

Implementation of Closed Caption Decoding and Display System Based on FPGA

WANG Tao,YU Jinhua,XIAO Tiejun

(School of Computer Science and Communication Engineering, Jiangsu University, Zhenjiang 212013, China)

The special decoder chip used in the traditional DTVCC (Closed Caption, CC) display and decoding scheme suffers difficult code transplant, the interface modification, inflexible function and extra chip cost. In view of the above problems, a new scheme using FPGA is proposed based on SMPTE protocol and 708CC standard. This scheme uses the Verilog HDL hardware description language for programming, implements the extraction of the closed caption original data, realizes the reorganization of DTVCC data packets, and then reorganizes the service data and decodes caption service data. Finally, the overlay display of closed caption is realized. A superposition method is also proposed and used to display the characters, which can be used to realize the positioning of the caption window and the location of the caption character. The test results show that the FPGA is stable and capable of the decoding and display of the closed caption.

closed caption; FPGA; 708CC; DTVCC

2016- 04- 11

王涛(1990-),男,硕士研究生。研究方向:嵌入式系统等。喻金华(1984-),男,工程师。研究方向:FPGA设计。肖铁军(1963-),男,教授,硕士生导师。研究方向:嵌入式技术。

10.16180/j.cnki.issn1007-7820.2017.02.039

TN873

A

1007-7820(2017)02-149-05

猜你喜欢

隐藏式状态机字幕
关于消除隐藏式把手功能故障的研究
隐藏式字幕助听障观众轻松看电影
一种新型老年代步车的设计与研究
基于有限状态机的交会对接飞行任务规划方法
轿车隐藏式车门把手试验台的设计与开发
电视剧字幕也应精益求精
三段式状态机在单片机中的实现
整合适应选择度下的动画电影字幕翻译——以《冰河世纪》的字幕汉译为例
论纪录片的字幕翻译策略
字幕翻译中非言语信息的言语转换——以《BJ单身日记》字幕翻译为例