天天看點

基于FPGA系統合成兩條視訊流實作3D視訊效果

目錄

1、概述

2、時鐘架構

3、帶鎖定視訊解碼器的同步系統

4、異步視訊系統

4.1、時鐘三态模式

4.2、兩條視訊流中的資料對齊誤差

4.3、行鎖定錄影機對齊誤差

4.4、不同的連接配接長度

4.5、視訊解碼器/HDMI接收器延遲

4.6、對齊誤差補償

4.7、對齊誤差測量

4.8、從兩個對齊視訊流生成3D視訊

4.9、并排3D視訊

視訊系統,目前已經深入消費應用的各個方面,在汽車、機器人和工業領域日益普遍。其在非消費應用中的增長主要源于HDMI标準以及更快、更高效的DSP和FPGA的出現。

本文将概要讨論利用模拟或HDMI錄影機實作立體視覺(3D視訊)的各種要求。文章将描述一個基于FPGA的系統,它将兩個視訊流結合成一個3D視訊流,通過HDMI 1.4發射器進行傳輸,同時還要介紹一個基于DSP的系統,與通常需從兩台錄影機接收資料相比,該系統可以節省DMA帶寬。另外,本文還将描述一種方法,該方法可以實作一種并排格式,可供3D錄影機或要求3D視訊的系統使用。

立體視覺要求使用兩台錄影機,二者相距大約5.5厘米,這是人類雙眼之間的典型間距,如圖1所示。

基于FPGA系統合成兩條視訊流實作3D視訊效果

圖2所示進階功能框圖使用了采用相同視訊标準的兩台同步錄影機、兩個視訊解碼器和一個FPGA。為了確定完全一緻的幀速率,錄影機必須行鎖定到共同的參考時序。如果沒有同步,不使用外部存儲器,就不可能将輸出組合起來并存儲為完整的視訊幀。

基于FPGA系統合成兩條視訊流實作3D視訊效果

圖3顯示兩個行鎖定視訊流被合并成一個立體圖像。

基于FPGA系統合成兩條視訊流實作3D視訊效果

圖4顯示,如果不将整個視訊幀儲存在外部存儲器中,則異步視訊流無法合并。

基于FPGA系統合成兩條視訊流實作3D視訊效果

然後,兩台同步錄影機的輸出由視訊解碼器(如ADV7181D、ADV7182或ADV7186,用于模拟錄影機)進行數字化處理;也可由HDMI接收器(如ADV7610或ADV7611,用于數字錄影機)進行數字化處理。

視訊解碼器和HDMI接收器都采用内部鎖相環(PLL)在其輸出總線上産生時鐘和像素資料。這意味着,在數字化模拟視訊,或者接收HDMI流時,将為兩台錄影機産生兩個獨立的時鐘域。另外,兩個視訊流可能存在對齊誤差。這些時序差異和對齊誤差必須在後端器件(如FPGA)中進行補償,先将資料帶至共同的時鐘域,然後再将兩個視訊圖像結合成單個立體視訊幀。然後,通過一個支援3D的HDMI 1.4 HDMI發射器(如ADV7511或ADV7513)發送同步後的視訊流——也可以将其提供給DSP(如ADSP-BF609 Blackfin®處理器)以便進一步處理。

視訊解碼器有兩種完全不同的時鐘源,具體取決于其是否鎖定。當視訊PLL被鎖定至輸入同步信号時——水準同步(視訊解碼器)或TMDS時鐘(HDMI)——結果會産生一個鎖定至輸入視訊源的時鐘。當視訊失鎖時,或者當PLL處于強制自由運作模式時,視訊PLL不會鎖定至輸入同步信号,結果會産生一個鎖定至晶振時鐘的時鐘輸出。另外,時鐘可能不會在複位後輸出,因為LLC時鐘驅動器在複位後設定為高阻抗模式。

是以,如果系統有兩個或多個始于視訊解碼器或HDMI接收器的視訊路徑,即使将同一晶振時鐘提供給兩個視訊解碼器或HDMI接收器,仍會有兩個不同頻率、不同相位的不同時鐘域,因為每個器件都會基于自己的PLL産生自己的時鐘。

典型的立體視訊使用兩個視訊源,其中,每個視訊解碼器都會鎖定至輸入視訊信号,并會基于輸入水準同步或TMDS時鐘産生自己的時鐘。

當兩台錄影機同步——或行鎖定至同一參考時序時——分幀線将始終對齊。由于兩個獨立的視訊解碼器會收到相同的水準同步信号,是以,像素時鐘将擁有相同的像素時鐘頻率。這樣,就可以将兩條資料路徑帶入同一個時鐘域,如圖5所示。

基于FPGA系統合成兩條視訊流實作3D視訊效果

不幸的是,其中一個視訊解碼器可能因視訊源信号品質欠佳而失鎖,如圖6所示。

基于FPGA系統合成兩條視訊流實作3D視訊效果

或者,錄影機因視訊鍊路斷開而失去同步性,如圖7所示。

基于FPGA系統合成兩條視訊流實作3D視訊效果

這會在兩條資料路徑中導緻不同的頻率,結果又會導緻進入後端中的資料量不對稱。

視訊失鎖可以通過使用一個中斷(SD視訊解碼器為SD_UNLOCK,分量視訊解碼器為CP_UNLOCK,或HDMI接收器中的TMDSPLL_LCK寄存器)來檢測,該中斷會在一定延遲後介入。

視訊解碼器內建了不穩定水準同步平滑機制,是以,視訊失鎖的檢測可能需要兩三行。該延遲可通過控制FPGA中的失鎖來減少。

在設計FPGA時鐘資源時,必須知道,預設情況下,許多視訊解碼器和HDMI産品在複位後将時鐘和資料線路置為三态模式。是以,LLC像素時鐘不适用于同步複位。

為了簡化系統并減少合并兩幅圖像所需存儲器,到達FPGA的資料應進行同步,以使來自第一台錄影機的第M行第N個像素與來自第二台錄影機的第M行第N個像素同時收到。

在FPGA輸入端,這可能很難實作,因為兩條視訊路徑可能具有不同的延遲:行鎖定錄影機可能輸出存在對齊誤差的行,不同的連接配接長度可能加大對齊誤差,而視訊解碼器則可能帶來可變啟動延遲。受這些延遲影響,采用行鎖定錄影機的系統會有一些存在對齊誤差的像素。

即使是行鎖定錄影機也可能輸出存在對齊誤差的視訊行。圖 8 顯示來自兩台錄影機的CVBS 輸出端的垂直同步信号。一台錄影機 ( 同步主機) 為第二台錄影機 ( 同步從機 ) 提供行鎖定信号。 380 ns 的對齊誤差是清楚可見的。

基于FPGA系統合成兩條視訊流實作3D視訊效果

圖9展示的是這些錄影機輸出端的視訊解碼器傳輸的資料。可以看到11 個像素的位移。

基于FPGA系統合成兩條視訊流實作3D視訊效果

所有電氣連接配接都會帶來傳播延遲,是以,要確定兩條視訊路徑具有相同的軌道和電纜長度。

所有視訊解碼器都會帶來可能因啟用的功能而異的延遲。另外,有些視訊器件含有可能增加随機啟動延遲的因素——如深色FIFO。采用視訊解碼器的典型立體系統的随機啟動延遲大約為5個像素時鐘。含有HDMI發射器和接收器的系統(如圖10所示)的随機啟動延遲可能為40個像素時鐘左右。

基于FPGA系統合成兩條視訊流實作3D視訊效果

圖11所示系統中,一個視訊解碼器對來自各錄影機的模拟信号進行數字化處理。各視訊路徑的資料和時鐘是獨立的。兩條視訊路徑都連接配接至FIFO,後者對輸入資料進行緩沖,以補償資料對齊誤差。

在輸出資料時,FIFO使用來自其中一個解碼器的共用時鐘。在鎖定系統中,兩條資料路徑應具有完全相同的時鐘頻率,以確定在錄影機行鎖定且視訊解碼器鎖定的情況下,不會出現FIFO溢出或下溢現象。

通過啟用或禁用FIFO輸出,控制子產品可以維持FIFO電平以盡量減少像素對齊誤差。如果采取了正确的補償措施,則FPGA子產品的輸出應為與第一個像素對齊的兩條資料路徑。然後該資料提供給FPGA後端,以生成3D格式。

基于FPGA系統合成兩條視訊流實作3D視訊效果

兩個數字化資料流之間的對齊誤差可以在視訊FIFO輸出端進行測量,其方法是使用一個單一時鐘計數器,該計數器在輸入信号之一的垂直同步(VS)脈沖上複位。圖12所示兩個視訊流(vs_a_in和vs_b_in)的對齊誤差為4個像素。計數器使用清單1中所示方法測量對齊誤差。計數從VS1的上升沿開始,并在VS2的上升沿終止。如果一個幀的總像素長度是已知的,則可以通過從幀長中減去計數值,進而算出負偏斜(VS2位于VS1之前)。該負值應在偏斜超過像素幀長的一半時計算。結果應用來重新對齊FIFO中存儲的資料。

基于FPGA系統合成兩條視訊流實作3D視訊效果

一旦像素、行和幀資料都真正同步,FPGA可以将視訊資料轉換成3D視訊流,如圖13所示。

基于FPGA系統合成兩條視訊流實作3D視訊效果

輸入資料由共用時鐘讀入存儲器。同步時序分析儀檢查輸入的同步信号,并抽取視訊時序,包括水準前後沿長度、垂直前後沿、水準和垂直同步長度、水準有效行長、垂直有效行數和同步信号極化。

将該資訊與目前水準和垂直像素位置一起傳給同步時序再發生器,這樣可以生成經修改的時序,以便支援所需3D視訊結構。新生成的時序應延遲,以確定FIFO含有所需資料量。

對存儲器要求最低的架構是并排格式,隻需要一個兩行緩沖器(FIFO)即可存儲來自兩個視訊源的行内容。并排格式的寬度應為原始輸入模式的兩倍。為此,應使用一個雙倍時鐘來為擁有雙倍水準行長度的再生同步時序提供時鐘。用于為後端提供時鐘的雙倍時鐘将以雙倍速率清空第一個FIFO和第二個FIFO,這樣即可并排顯示圖像,如圖14所示。并排圖像如圖15所示。

基于FPGA系統合成兩條視訊流實作3D視訊效果
基于FPGA系統合成兩條視訊流實作3D視訊效果

繼續閱讀