天天看點

視訊之五:視訊資料處理與搬移

文中我們将從處理器的角度來考察視訊流,把注意力放在那些能實作高效資料處理與轉移的結構和功能特色上。 

視訊端口的功能特色 

要處理視訊流,處理器就必須具有适當的接口,以保證資料能高速輸入和輸出該子產品。有些處理器是通過一片連接配接到處理器的外部存儲接口上的 FPGA  和/或FIFO 來實作上述接口的。這種器件一般用于協調出入處理器的、速度恒定且較慢的視訊流(NTSC 視訊的速度約~27 MB/s)與零星而高速的、猝發性的外部存儲控制器資料流(其容量達到約 133 MWords/s 或者 266 MB/s 的水準)之間的關系。 

    不過,這樣的安排仍然存在問題。例如,FPGA 和 FIFO 價格昂貴,往往與視訊處理器本身相當。此外,使用外部存儲器的接口來進行視訊信号的傳遞,也會奪走其在這些系統中的另一項主要用途——在處理器核心與外部存儲之間來回傳送視訊緩沖資料——所需的帶寬。 

    是以,媒體處理系統最好采用一個專有的視訊接口。例如在 Blackfin 處理器上就采用了“并行外設接口(PPI)”。PPI 是一種多功能的并行接口,它可以配置為8 和 16bit 兩種帶寬。它支援雙向的資料流,并包含了 3 條同步線以及一個與外部時鐘相連的時鐘引腳。PPI 可以對 ITU‐R  BT.656 資料進行無縫解碼,而且還可以與 ITU‐R  BT.601 視訊源與顯示裝置,例如 TFT LCD 平闆顯示器接口。它可以用作高速模數轉換器(ADC)和數模轉換器(DAC)的連接配接管道。它還可以為外部處理器仿真出主要接口。 

    PPI  的一些内置的功能可以降低系統的成本,并改善資料的流動。例如,在BT.656 模式中,PPI 可以對輸入視訊流進行解碼并自動忽略有效視訊之外的任何信号,進而可以有效地将一路 NTSC 輸入視訊流的碼率從 27MB/s 降低到 20MB/s,并顯著減少處理視訊所需的片外存儲器的大小。或者,它也可以忽略有效的視訊區,而隻讀入那些嵌入到垂直消隐間隔中的輔助資料。圖 1 對這些模式進行了圖示。 

​​

視訊之五:視訊資料處理與搬移

​​

圖 1:PPI 接口對 BT.656 各區域的有選擇性的掩蔽 

圖中:Entire Field    Sent 發送整個場,Active Video Only Sent——僅發送有效的視訊,Blanking 

Only Sent——僅發送消隐信号。Blanking——消隐,Field 1 Active Video——場 1 的有效視訊,

Field 2 Active Video——場 2 的有效視訊 

類似的,在隔行掃描中 PPI 可以每隔一個場“忽略”一個場,換句話說,它不會把這些資料繼續送出給DMA 控制器。雖然這種方法可以立即讓輸入帶寬的要求降低 50%,但它也删除了 50%的視訊源内容,是以有時這種折衷是無法令人接受的。不過,當輸入視訊的分辨率遠高于所需要的輸出分辨率時,這是一項有用的功能。 

類似的,PPI 允許“跳過”編号為奇數或者偶數的分量,再次将所跳過的像素單元對應的 DMA 帶寬節約下來。例如,在一個 4:2:2 的 YCbCr 流中,該功能将隻容許亮度或者色度信号被讀入,提供了在各種不同處理器之間進行算法劃分的便捷方法;一個處理器可以讀入亮度信号,而另一個則可以讀入色度信号。它還提供了将一幅圖像或者一路視訊流轉換為灰階級(僅有亮度信号)的簡單方法。最後,在帶有交織的 I/Q 資料的高速轉換器應用上,這一特色使得在這些同相和正交分量之間進行劃分成為可能。 

重要的是,PPI并不知曉資料格式,因為它并未針對特定的視訊标準來進行硬體連線。它容許使用者對行長度和幀長度進行程式設計設定。這就給那些需要諸如CIF或者QCIF視訊,而非标準的NTSC/PAL格式的應用幫了大忙。一般而言,隻要輸入的視訊具有恰當的EAV./SAV代碼(BT.  656視訊)或者硬體同步信号(BT.601視訊),PPI就可以對其進行處理。

封包 

雖然BT.656和BT.601推薦方案可以提供10bit的像素單元,但這對于處理來說不是一個友好的字長度。這裡的問題是,大多數處理器在處理按8bit、16bit或者32bit分塊的資料方面效率很高,而對于處于這些值之間的那些量值都會造成資料搬移方面的效率低下問題。例如,即使一個10bit像素值隻比8bit像素值寬2bit,但大多數處理器都會将其作為一個6個高位(MSB)為0的16bit資料來處理。這不僅會浪費内部資料傳輸總線(DMA)的帶寬,而且還會浪費很多記憶體——這對于視訊應用來說是不利的,此時,若幹個整幀的緩沖資料往往要存儲在外部存儲器中。 

資料尺寸大于8bit所帶來的效率低下,還表現在資料打包無法達到最佳性能。往往一個高性能的媒體處理器将在其周邊形成資料包封機制,該包封居于外部世界和處理器内部的資料傳送總線之間,其目标是盡可能減少資料出入外設時總體上給這些總線的帶寬造成的負擔。是以,一路8bit的視訊流以27MB/s的時鐘頻率輸入外設時,可以被打包到32bit  的内部資料搬移總線上,相應的,隻需該總線提供27/4或者說6.75MHz  的服務即可。請注意,總的資料傳輸速率仍然相同(6.75MHz * 32bit=27MB/s)。與之相反,一個以27MB/s傳輸的10bit的視訊流将隻能以2個16bit資料片的形式封裝到32bit内部總線上,這就将總的傳輸速率降低至27/2或者說13.5MHz。在這種情況下,在每16位資料中隻有10bit資料是相關的,故内部總線帶寬的37.5%被浪費了。 

可能的資料流 

對多媒體系統中的視訊端口的一些連接配接方式進行考察,展示系統作為一個整體與構成系統的

每種資料流動之間的互相依存關系,将是很有益的。在圖 2a 中,圖像源将資料發送到 PPI

中,在該處 DMA 引擎将其配屬 L1 記憶體,在 L1 記憶體中,資料經過處理,轉換為其最終形式,然後通過一個高速序列槽發送出去。該模型對于低分辨率的視訊處理和 JPEG 等圖像壓縮算法來說是十分有效的,此類算法可以對小規模的視訊資料塊(對應若幹行)進行處理,此後,這些資料塊在随後的過程中将不再為系統所需要。上述的流程對于有些資料轉換器應用來說也是十分有效的。 

在圖

 2b 

中,視訊資料并沒有被路由到

 L1 

記憶體,而是被引向

 L3 

存儲器。這種配置可以支援

MPEG

MPEG

等算法,這些算法需要将中間視訊幀存儲在存儲器中,以執行時間域的壓縮。在這種情形中,

L1

 L3 

存儲器之間的雙向

 DMA 

流就可以實作像素宏塊以及其他中間性資料的傳送。

​​

視訊之五:視訊資料處理與搬移

​​

圖中:Image Data and Syncs——圖像資料和同步信号;Processor——處理器,Memory——

記憶體,Serial Port——串行端口,Compressed Video——經過壓縮的視訊;Video Data and Syncs

——視訊資料和同步信号。 

視訊 ALU 

 大多數視訊應用都需要對 8bit 資料進行處理,因為各像素分量(無論是 RGB或是 YCbCr)往往都是按位元組計量的。是以,8bit 視訊 ALU 和基于位元組的位址生成可以帶來像素處理方式上的巨大差異。這一點并非無足輕重,因為嵌入式處理器一般工作在 16bit 或者 32bit 的範圍内。 

    嵌入式媒體處理器有時支援那些能高效地處理 8bit 視訊和資料的語句。以表 1為例,其中總結出專門的 Blackfin 指令,綜合運用這些指令,就可以實作各種不同類型的視訊操作。 

​​

視訊之五:視訊資料處理與搬移

​​

讓我們考察幾個關于這些指令的運用的示例。

4 重的 8bit  減法-絕對值-累加(SAA)指令非常适合于基于塊的視訊運動估算。該指令先對 4 對位元組進行減法操作,并取每個內插補點的絕對值,然後将結果累加起來。這都是在一個周期内發生的。下面是其确切的表達式。 

​​

視訊之五:視訊資料處理與搬移

​​

 試考慮如圖 3a 所示的宏塊。16 像素×16 像素的基準幀可以進一步分為 4 組。一個非常合理的假設是相鄰的視訊幀是彼此相關的。也就是說,如果存在運動,則每個幀的各片區域将相對于前面諸幀的宏塊發生移動。對宏塊的運動進行編碼所需要的資訊,要少于将每個視訊幀視為單獨對象進行編碼時所需的資訊 ,MPEG 壓縮使用了此技術。 

    這種對宏塊進行的運動檢測可分解為兩個基本步驟。設定一個幀中的基準宏塊之後,我們就能搜尋下一幀中所有在其周圍的宏塊(目标宏塊),以決定最接近的比對。基準宏塊(在幀 n 中)的位置與可與之實作最佳比對的目标宏塊(在幀n+1 中)之間存在的偏移,就是運動矢量。 

 圖 3b 圖示出了系統中該方法的具體展現方式。 

 圓 = 視訊幀中的某些對象 

 實線方框  =  基準宏塊 

 虛線方框  =  對區域進行搜尋,以發現可能的宏塊。 

 點方框  =  最佳比對的目标宏塊(例如代表圓物體的運動矢量宏塊) 

​​

視訊之五:視訊資料處理與搬移

​​

一個 Blackfin  處理器的 SAA 指令執行速度很快,因為它在每個時鐘周期中可利用 4 個 8bit  ALU。我們可以實作如下的循環,以對圖 3b 所示的 4 個對象中的每一個進行疊代處理。  

/*  用于對圖像組塊進行疊代處理的循環中    */ 

SAA (R1:0,R3:2) || R1 = [I0++]    || R2 = [I1++]; /*計算出絕對值并累加*/ 

SAA (R1:0,R3:2) (R) || R0 = [I0++] || R3 = [I1++]; 

SAA (R1:0,R3:2) || R1 = [I0 ++ M3] || R2 = [I1++M1];    /*取出目标組塊的第 4 個字

後,指針指向下一行*/ 

SAA (R1:0,R3:2) (R) || R0 = [I0++] || R2 = [I1++]; 

    現在讓我們考慮另一個執行個體,即求 4 個相鄰值平均值的運算,圖 4a 示出其基本核心。通常情況下,必須進行 4 次加法和一次除法(或者乘法或者移位),才能計算出平均值。BYTEOP2P 指令可以加快該濾波器的實作。 

圖 4b 中心像素的量值被定義為: 

x = Average(xN, xS, xE, xW)  

    BYTEOP2P 可以在一個周期内對兩個像素執行這種求平均值處理(圖 6.21 c,d)。是以,如果x1 = Average(x1N, x1S, x1E, x1W),x2 = Average(x2N, x2S, x2E, x2W),則 

R3 = BYTEOP2P(R1:0, R3:2); 

将在單個周期内同時計算出兩個像素的平均值,前提是

 x1 (N, S, E, W)

資訊存儲在

 R1 

R0

x2 (N, S, E, W)

則從

 R3 

 R2 

取出。

​​

視訊之五:視訊資料處理與搬移

​​

關于 DMA 的考慮 

 具備二維  DMA(2D DMA)能力的嵌入式媒體處理器可以在系統層次上提供若幹優點。對于新手而言,2D DMA 可以實作宏塊對應于外部存儲器的來回傳遞,進而使得對資料的處理成為實際傳輸的一部分。這消除了傳輸非連續資料時相應出現的開銷。它還可以讓系統進行有選擇性的傳輸,即僅傳輸輸入圖像中為人們所需要的區域,而不是傳輸整幅圖像,進而盡可能減小資料的帶寬。 

    另一個執行個體是,2D DMA 可以讓資料置入存儲器的順序更順應處理的需求。例如,如圖 5 所示,RGB 資料可以從一個 CCD 傳感器以交織的 RGB444 格式進入處理器的 L2 存儲器,但是在使用 2D  DMA 的情況下,它可以以分離的 R、G 和 B平面形式傳送到 L3 存儲器中。對視訊和圖象資料顔色空間的分量進行交織/解交織化在處理前節省了額外的資料搬移。 

​​

視訊之五:視訊資料處理與搬移

​​

平面化和間插式緩沖格式的對比 

在“存儲緩沖采用交織的結構還是平面化的結構?”這一問題上,你應該如何做出決策?交織的資料的優點是,它是圖像傳感器的自然輸出格式,而且也是視訊編碼器自然而然的輸入格式。不過,平面化的緩沖器(即每個像素分量存儲在存儲器中互相分離的區域中)對許多視訊算法而言是更為有效的結構,因為它們中的許多(包括 JPEG 和 MPEG)都是依靠單獨的亮度和色度信号來工作的。此 外,對 L3 中平面化緩沖器的通路,其效率要比跨越交織資料進行讀取的操作更高,這是因為,當緩沖器采用平面化結構時,  SDRAM頁面缺失造成的延遲會随着圖樣尺寸的大幅增加而發散。 

雙重緩沖 

    我們在前面已經讨論了對雙重緩沖的需求,這是因為它可以確定目前資料不被新的資料所覆寫,直到你已經為這種覆寫做好準備為止。對視訊顯示緩沖區的管理就是這一方法的絕好執行個體。通常,在系統中,如果各種視訊源與最終顯示的内容之間存在傳輸速率差異的話,就應該保證在老的内容和新的視訊幀之間實作平滑的切換。這是利用雙緩沖管理方法來實作的。一個緩沖區指向目前的視訊幀,該幀被以一定的重新整理速率送到顯示器上。第二個緩沖區則用最新輸出的幀來填充。當後一個緩沖器被填滿時,DMA  發出中斷信号,訓示現在應該将新的幀發送到顯示器上。此時,第一個緩沖區開始填充經過處理的、用于顯示的視訊信号,而第二個緩沖區則輸出目前的顯示幀。這兩個緩沖區以“乒乓”方式來回切換。 

    我們應該注意的是,系統可以使用多個緩沖區而不僅僅是兩個,以便為同步化提供更大的餘地,并降低中斷發生的頻率及其相應造成的延遲。