something about teletext

  

 以前一直有开个博客的想法,却因总总原因,始终没有去实现。今天开个胡,并且决定以后咬咬牙坚持着写下去。知识在于积累,这是真理,尤其在IT这一行。以前觉得自己很厉害,以为那些接触过的概念,一些代码的构思,解决过的bug都能记得住。可现在想想,还是笔杆子比较靠谱,脑袋用来想问题就好,至于记忆方面的事情还是靠其他手段辅助比较好,没必要和自己过不去嘛。

  前两周的工作任务是整理 DVB teletext模块。刚接到这活的时候,觉得真没啥干劲,在互联网如此发达的年代,teletext这功能在电视上总觉得有些鸡肋。不过没办法,拿人工资,替人卖命嘛。经过一个月的奋战总算顺利完成任务,而且这次整理感觉让自己收获不小。


  公司之前的teletext模块是在应用层完成实现的,完全没有模块的概念,这次任务就是要是把teletext模块化并添加到中间层去,本以为这是件容易的事,可是看了源码才知道那源码的混乱程度超出想象,没办法只好自己重新编写一个。在此之前我对teletext的概念也仅仅停留在功能上,根本没有任何的研究。所以就得先了解它的概念,从网上找了不少资料,现在自己已经把他们总结成一个文档了

1.1 Teletext简介

Teletext是上世纪7O年代在英国发展起来的一种信息广播系统,它主要利用电视信号场消隐期(VBI)中的某几行(也可以占用电视信号的全部有效行)传送图文和数据信息。由于图文电视广播业务能以低廉的费用,向大众传播即时的新闻、体育、天气、电视节目预告和字幕(subtitle)等信息。由于它提供的信息丰富多彩,而且还有图形,Teletext甚至被认为是互联网的前身。它与互联网相比也有自身的优势,如用户数量庞大,用户数量增加不会影响接收速度,廉价的接受终端。30多年来,图文电视技术与业务已在世界许多国家和地区得到了普及和推广,尤其在欧洲应用更是非常普及。目前出口到欧洲的机顶盒都具有VBI Teletext功能,有部分机顶盒还具有OSDTeletext功能。基本的Teletext是由一组页组成,每页由3位数字做编号,每页是由24行40列的字符及图形组成。这些页不停地被循环发送到用户端。

1.2 Teletext的特性

(1)24X40的文本字符显示,也支持简单的图象信息的显示.

 

(2)支持多页码,应用程序可以自由切换到任意选定的页.

 

(3)支持多语言,可以在teletext中指定所使用的语言.

 

(4)文本支持自定义背景色,自定义前景色.支持长度,宽度加倍(double width,double height)

 

(5)所有数据采用了奇偶校验和汉明码编码,具有比较强的错误处理功能.

 

(6)格式基本兼容模拟TTX,支持VBI插入teletext数据.

2 数据组织元素

根据en_300706(Teletxt)的文档,我们知道,teletext的数据组织元素分为以下3种:magazine,pagepacket

 

Magazine: Teletext通常采用杂志(Magazine)方式组织信息,至多有8种不同杂志,100-199(M=1),200-299(M=2),300-399(M=3),400-499(M=4),500-599(M=5),600-699(M=6),700-799(M=7),800-899(M=0),每个杂志可有至多100页的页码,每一页叉可有若干子页(sub-page),从而使每个杂志可以有几百页信息。例如从100页至199页,它的杂志号是1,它的内容是新闻;从200页至299页,它的杂志号是2,它的内容是体育。

 

Page:每一页对应一个屏幕的图文信息,每页图文最多显示包含25行,每行至多有40个字母、数字或图形符号,而且也有字符颜色、闪烁、倍高等属性控制。

 

Packet: 每包数据固定是45字节,包有3种基本类型:页头包普通行包扩展包

 

页头包(包地址Y=0):包含页号和控制信息,加上32个包括时间的显示字符。它对应显示的第一行

 

直接显示的普通行包(包地址Y=l-25):包含40 Byte(625行电视信号)对应一行的40个显示字符。包地址对应行的垂直位置

 

扩展包(包地址Y=26-31):这些包并不直接显示,它们用于为高级的解码器提供增强性能,或者提供特殊数据服务。


3.1  Teletext 级别

ETS300706技术规范中定义了以下4级图文电视级别:

 级别1: 镶嵌字符,空属性,固定调色板,24行x40字符等特点;

   

级别1.5: 在级别1基础上扩充了字符集;

   

级别2.5扩充语言种类,增加可重定义颜色的调色板,引入非空格属性.允许许多简单重定义字符,提供增加文字和图形的嵌板;

  

级别3.5扩充重定义字符的数量及复杂度,引人不同的字体类型和相称的空格.

 

以上不同级别的表示及应用特性是向下兼容的,从而使采用低级协议及解码器的用户,不受发送方图文标准升级的影响.从而维护了数千万早期用户的利益。

3.2  字符图形集

3.2.1     字符集

teletext的字符集有G0, G2字符集和13个国家的选项子集,还包括G1,G3图形集一些G0,G2的一些变种.级别 1是严格以G0基本字符集加上13组国家选项子集来传输的. 图形集支持G1.G2字符集和G3图形集以及根据G0, G2 改进的字符集出现在级别1.5以上,由一些拓展包来控制,这些控制比较复杂.具体的要仔细阅读300706标准.

 

下面将对级别1的本文档标准的字符集和图形集以及显示做一些介绍。G0 基本字符集一共包含96个字符, 支持latin,Cyrillic,greek,Arabic, hebrew一共5个语种,除了cyrillic有3个G0表之外,其它的语种有且只有一个G0表(详见300706标准). 其中latin语种又支持13组国家选项子集.现以Latin语种为例.

     

                                                         Figure 4.2.1 latin_table

 

Figure 4.2.1,是latin G0字符表(只截图一部分,完整图见300706标准) , 一个16row* 6colomn 的表, 一共96个字符. 具体选择哪一个字符由Packet X/1-X/25 中的后40个字节来决定,一个字节可以指定一个字符(有效字符数据范围0x20-0x7f). 比如有一个字节是 0x34, 换成二进制即: 00110100 , 查表即可知道是B7B6B5 = 011 B4B3B2B1 =0100 ,即 表中的 字符 ’ 4’.所谓latin 的13 组国家选项子集,如下图(引用300706)



                    Figure 4.2.2latin 国家选项子集

 

这个是用来代替G0表中的带阴影的13个字符的. 一共有13组.每一组刚好13个字符. 其中表头中的2/3代表图1-1中的B7B6B5 = 2 (即010) B4B3B2B1 = 3(即 0011) . 而具体选择13组(行)中的哪一组(行), 是由C12C13C14(具体含义见300706标准)控制字符来决定的.

3.2.2     图形集

下图是G1 图形集



                     图1-3 G1 图形集(部分截图)

G1的有效数据范围也是0x20-0x7f, 我们可以看到中间两列有些地方写着(1), 这个是需要用G0表中的字符填充的.

4.1 颜色控制

Teletext支持自定义前景色和背景色.就在每一行数据的40个字节中.作为控制字的数据范围是0x00-0x1f.在teletext中称为spacing 属性.(见300706 12.2章节).0x00-0x07:设置前景色,颜色分别是黑,红,绿,黄,蓝,洋青,洋蓝,白(设置后生效,也就是说,显示程序遇到这些代码,在随后的显示中必须改变前景色到对应的颜色)

   0x08:开始闪烁功能,设置后生效.

   0x09:结束闪烁功能,设置后生效

   0x0a:BOX结束,设置后生效.

   0x0b:BOX开始,设置后生效.

……

上述主要参考300706标准的Tabel 26, 这里就不一一列出了. 注意, 马赛克, 即G1 字符也是由此引入

 4.2    显示控制

Teletext的单个字符的大小经 300706 介绍应该是12pixels长, 10 pixels高(见15.6章节). 但从同方留下来的代码来看,我们单个文本字符大小却是按照 14pixel长, 20pixels 高来处理的, 而masaic , 即 G1字符是按照.

Teletext的显示是以页为单位的, 一页的显示包括页包头,和1-24行正文. 而正文部分则可以看成是一个24行*40列的一个矩阵. 24行对应Packet x/1 – x/24, 即一行对应一个包, 40列对应包中的除了前面5个字节的控制字之外的40个字节(当然, 40 列不一定会全部是字符显示,也有可能是颜色控制字符. 可显示的字符的 ASCII的范围是0x20~0x7f). 字符与字符挨个显示,便组成了页, 既然字符组成了页,那么单个字符本身又是如何显示的呢.

  我们会先到字符集数组里面取出我们所要显示的字符的点阵.即上诉代码中的CharAddr. 字符集数组详见teletext char_set.c . 我们通过函数ttx_source_draw_point 确定一个字符点阵中的一个点的颜色. 字符点阵是14*20的点阵, 点为1的地方用前景色填充,点为0的地方则以背景色填充
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值