
引言:
作為消費者,我們對于各種形式的視訊系統都已經非常熟悉了。但是從嵌入式開發人員的角度來看,視訊就好像是一張紛繁複雜的網絡,裡面充滿了各種不同的分辨率、格式、标準與顯示等。
數字視訊:
在20世紀90年代中期之前,幾乎所有的視訊都是模拟類型的。直到出現了MPEG-2壓縮标準,流媒體在網際網路上廣泛流行,以及FCC(Federal Communications Commission,美國聯邦電信委員會)采用了數字電視(DTV)标準,才産生了一次所謂的”完美風暴”,也就是把數字表示方法的好處帶到了視訊領域内。相對模拟視訊而言,數字視訊的優點包括:更高的信噪比,提高了帶寬使用率(在現有的每一個模拟傳輸通道中可同時傳輸多個通道的數字視訊信号),以及通過數字壓縮技術降低了對存儲空間的要求。
從根本上來說,對模拟視訊信号進行數字化處理包括兩個方面:采樣和量化。在視訊幀的二維結構中,采樣就必須向畫格子一樣,先将圖像按空間劃分為一些小的區域,然後根據每個區域顔色空間成分強度的不同配置設定一些相對的幅值。需要注意的是,模拟視訊已經經過了垂直采樣(離散的行數)和時間采樣(每秒離散的幀數)。
采樣與量化
量化是這樣一個過程:在采樣過程中決定那些離散的幅度值。在消費領域内,經常用8比特的視訊,也就是說在每個顔色通道(RGB或者YCbCr)中用0表示最暗(即純黑色),用255表示最亮(即白色)。但是,我們應該注意到,每個顔色通常中10比特和12比特的量化正在快速進入主流的視訊品中,這些額外的精度可以用來減小舍入誤差,進而降低接受圖像的噪聲。
常用視訊采樣率
數字視訊的出現,在很大程度上為NTSC和PAL系統接口的标準化提供了一個極好的機會。當國際電信聯盟(ITU)開會制定數字視訊标準的建議時,主要議題集中在如何實作NTSC和PAL标準之間最大程度的共用性,這樣一來,兩個标準就可以共享同一種編碼格式。
國際電信聯盟(ITU)定義了兩個各自獨立的建議——ITU-R BT.601和ITU-R BT.656。這兩個建議放在一起,就定義了一種結構,可以使不同的數字視訊系統進行互操作。BT.601定義了數字視訊傳輸的參數,而BT.656定義了接口本身。
FPGA處理656格式視訊資料流
ITU-RBT.601:
BT.601标注定義了以數字方式編碼視訊信号的方法,為了有效利用通道的帶寬,使用了YcbCr顔色空間。該标注中建議将4:2:2 YcbCr作為廣播視訊中優先的格式。另外還提供了同步信号(HSYNC’ VSYNC’FIELD)和一個時鐘信号,用來描述活動視訊區域的邊界。
每一個BT.601像素分量(Y’Cr或Cb)被量化為8比特或10 比特,NTSC和PAL系統的活動視訊區域中每一行有720像素。但是,這兩個系統在垂直分辨率上有所不同。30幀/秒的NTSC系統有525行(包括垂直消隐或者回掃區),而25幀/秒的PAL系統比NTSC系統增加了100行,達到625行,這樣PAL系統也适用同樣的标準。
ITU-RBT.601輸入時序圖
BT.601标準中規定,Y分量在名義上的數值範圍是16(純黑)到235(全白)。色度分量Cb和Cr的數值範圍是16~240,數值128相當于沒有顔色。有時候,由于噪聲或者舍入誤差的影響,有的值落在了名義範圍之外,但是卻永遠不會超過0~255的範圍。
ITU-R BT.656:
BT.601描述的是如何對視訊信号進行數字化編碼,而BT.601所必須的實體接口和資料流。該标準定義了并行和串行兩種模式。并行模式僅僅需要一個27MHz的時鐘信号(NTSC 30幀/秒)和8或者10根資料線(根據像素的分辨率調整)。所有的同步信号都内嵌在資料流中,因而不需要額外的硬體連線。下圖是使用嵌入式幀同步信号時的常用時序關系,包括BT:656 4:2:2YcbCr格式,以及”BT.656風格”的4:4:4YcbCr和RGB格式。
常用數字視訊格式
串行模式下,隻需要在單個通道上有一個多路複用的每像素10比特的串行資料流,但是這中間涉及一些複雜的技術,例如同步,頻譜定形和時鐘恢複等。而且,碼流時鐘頻率接近300MHz,是以在許多系統中,實作串行BT.656是一個挑戰。
ITU-R BT.656幀分割
ITU-R BT.656資料流
在BT.656标準中,水準同步(H)、垂直同步(V)和場同步(F)信号作為食品資料流中的一部分發送,這些資料構成了一個控制字。活動視訊起始(SAV)信号和活動視訊結束(EAV)信号表示每一行需要讀入的資料的開始點和結束點。SAV是指H信号由1變為0,EAV是指H信号由0變為1。視訊的一個整場由活動視訊、水準消隐(EAV和SAV碼子之間的間隔)和垂直消隐(V=1的間隔)組成。
一個視訊的場從F比特的變化開始。”奇數場”由F=0表示,而F=1則表示”偶數場”。逐行掃描的視訊中,場1和場2 之間沒有任何差別,但是在隔行掃描視訊中,則要求專門對每一個場進行獨立的處理,因為每個場中交替的掃描行組合起來構成了實際的視訊圖像幀。
SAV/EAV前導資訊碼
上圖列出了關于SAV和EAV碼字的具體細節。要注意的是,在前面由一個預定義的長度為3個位元組的前導資訊(對于8比特視訊為0xFF、0x00、0x00,對于10 比特視訊為0x3FF、0x000、0x000),後面緊跟着的是控制位元組,依次為F(場)、V(處置消隐)和H(水準消隐)位,然後為4個保留位吧,用于單比特的錯誤檢測和糾正。注意,F和V僅僅允許在EAV序列(也就是說H從0變為1)中改變。另外還要注意,對于10比特的視訊,額外的兩個比特加在了最低有效位,而不是加在最高有效位。
各個比特的定義如下:
-
- F=0表示場1
- F=1表示場2
- V=1表示垂直消隐區
- V=0表示不在垂直消隐區
- H=0表示SAV
- H=1表示EAV
- P3=V XOR H
- P2=F XOR H
- P1=F XOR V
- P0=F XOR V XORH
垂直消隐的間隔内(即V=1的時間段),可以用來發送一些非視訊的資訊,例如音頻、圖文電視、閉路字幕,甚至是互動電視應用中的資料。BT.656使用輔助資料包實作了這種功能。和正常的控制位元組前面的前導資訊”0xFF、0x00、0x00”不同的是,輔助資料包的前導資訊為”0x00、0xFF、0xFF”。
假定不發送輔助資料,水準消隐和垂直消隐期間,(Cb、Y、Cr、Y、Cb、Y、···)資料流是(0x80、0x10、0x80、0x10、0x80、0x10、···)。另外,由于數值0x00和0xFF專門留作控制前導字之用,它們不允許作為活動視訊流中的一部分。在10 比特的系統中,數值0x00到0x003和0x3FC到0x3FF頁保留值,以免引起8比特實作時同樣的問題。
從系統角度看視訊:
上圖是一個常見的端到端嵌入式數字視訊系統。在這種情況下,視訊源輸入到媒體處理器中(如果必要的話,首先要有視訊解碼器進行數字化處理)。視訊資料在存儲到本地或者發送到網絡之前還需要用軟體編碼器進行壓縮處理。
與此過程相反,我們可以從網絡或者大容量存儲器中得到壓縮碼流。然後通過軟體解碼器解壓縮後,直接發送到數字輸出顯示裝置上(例如TFT-LCD屏)進行顯示,或者通過視訊編碼器轉化為模拟信号,進而可以在傳統的CRT顯示器上進行顯示。
視訊壓縮編碼标準發展趨勢
請牢牢記住,壓縮和解壓縮僅僅是媒體處理器上可實作的所有可能視訊處理算法中的一部分而已。
由于篇幅,嵌入式視訊基礎這期内容先分享到這裡,下期更精彩。
版權所有權歸卿萃科技,轉載請注明出處
作者:卿萃科技ALIFPGA
原文位址:卿萃科技FPGA極客空間 微信公衆号
掃描二維碼關注卿萃科技FPGA極客空間
轉載于:https://www.cnblogs.com/alifpga/p/7639616.html