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的地方則以背景色填充
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章