視頻系統在消費類應用中已經無處不在,在汽車、機器人和工業領域越來越普遍。這種向非消費類應用的增長主要是由于HDMI標準以及更快、更高效的DSP和FPGA的引入。
本文概述了使用模擬或HDMI攝像機實現立體視覺(3D視頻)的要求。它描述了一個基于 FPGA 的系統,該系統將兩個視頻流組合成一個 3D 視頻流,以便通過 HDMI 1.4 發射器傳輸,以及一個基于 DSP 的系統,與從兩個攝像頭接收數據通常需要的帶寬相比,該系統節省了 DMA 帶寬。此外,它還展示了一種實現并排格式的方法,用于3D相機或需要3D視頻的系統。
一般概述
立體視覺需要兩個相距約5.5厘米的攝像機,這是人眼之間的典型間距。
圖2所示的高級框圖使用兩個使用相同視頻標準的同步攝像機、兩個視頻解碼器和一個FPGA。為了確保完全相同的幀速率,攝像機必須行鎖定到公共定時參考。如果沒有同步,則無法在不使用外部存儲器存儲完整視頻幀的情況下組合輸出。
圖2.高級框圖。
圖 3 顯示了兩個線路鎖定的視頻流被合并到單個立體圖像中。圖 4 顯示了如何在不將整個視頻幀保存在外部存儲器中的情況下無法合并異步視頻流。
圖3.合并兩個同步的視頻流。
圖4.如果不使用外部存儲器,則無法合并異步視頻流。
然后,兩個同步攝像機的輸出由視頻解碼器(如用于模擬攝像機的ADV7181D、ADV7182或ADV7186)進行數字化; 或通過HDMI接收器,如帶有數字攝像機的ADV7610或ADV7611。
視頻解碼器和HDMI接收器使用內部鎖相環(PLL)在其輸出總線上產生時鐘和像素數據。這意味著在數字化模擬視頻或接收HDMI流時,將為兩個相機生成兩個獨立的時鐘域。此外,兩個視頻流可能會未對齊。這些時序差異和失調必須在FPGA等后端設備中進行補償,將數據帶到公共時鐘域,然后再將兩個視頻圖像合并為單個立體視頻幀。然后,同步視頻流通過支持HDMI 1.4 3D的HDMI發射器(如ADV7511或ADV7513)發送,或者呈現給DSP,例如ADSP-BF609 黑鰭金槍魚處理器?—用于進一步處理。
時鐘架構
視頻解碼器有兩個不同的時鐘源,具體取決于它們是鎖定還是解鎖。當視頻PLL鎖定到輸入同步信號(視頻解碼器的水平同步或HDMI的TMDS時鐘)時,它會生成一個鎖定到輸入視頻源的時鐘。當視頻鎖定丟失或PLL處于強制自由運行模式時,視頻PLL不會鎖定到輸入的同步信號,而是產生鎖定到晶體時鐘的時鐘輸出。此外,由于LLC時鐘驅動器在復位后設置為高阻抗模式,因此復位后時鐘可能無法輸出。
因此,如果系統具有來自視頻解碼器或HDMI接收器的兩個或多個視頻路徑,則即使向兩個視頻解碼器或HDMI接收器提供相同的晶體時鐘,它也會具有兩個具有不同頻率和相位的不同時鐘域,因為每個設備都會基于自己的PLL生成自己的時鐘。
帶鎖定視頻解碼器的同步系統
對于使用兩個源的典型立體視頻,每個視頻解碼器鎖定到輸入的視頻信號,并根據輸入的水平同步或TMDS時鐘生成自己的時鐘。當兩臺攝像機同步或鎖定到同一時序參考時,幀線將始終對齊。由于兩個獨立的視頻解碼器接收相同的水平同步,因此像素時鐘將具有相同的像素時鐘頻率。這允許將兩條數據路徑引入一個公共時鐘域,如圖5所示。
圖5.兩個攝像機同步到一個公共參考。兩個視頻解碼器接收相同的同步信號,因此它們也被鎖定。
兩個視頻解碼器接收相同的同步信號,因此它們也被鎖定。
異步視頻系統
遺憾的是,其中一個解碼器可能會由于視頻源信號質量差而失去鎖定,如圖6所示;或者相機可能會因視頻鏈路斷開而失去同步,如圖7所示。這將導致兩條數據路徑中的頻率不同,從而導致進入后端的數據量不對稱。
圖6.具有未鎖定視頻解碼器的線鎖定攝像機。
圖7.帶鎖定視頻解碼器的解鎖攝像機。
通過使用中斷(SD視頻解碼器的中斷SD_UNLOCK,分量視頻解碼器的中斷CP_UNLOCK或HDMI接收器中的TMDSPLL_LCK寄存器)可以在延遲后啟動來檢測丟失的視頻鎖定。視頻解碼器集成了平滑不穩定水平同步的機制,因此檢測丟失的視頻鎖定可能需要幾行時間。這種延遲可以通過控制FPGA內的丟失鎖來減少。
時鐘三態模式
在設計FPGA時鐘資源時,重要的是要知道,默認情況下,許多視頻解碼器和HDMI產品在復位后將時鐘和數據線置于三態模式。因此,LLC像素時鐘將不適合同步復位。
兩個視頻流中的數據未對齊
為了簡化系統并減少合并兩個圖像所需的內存,到達FPGA的數據應同步,以便N千M 的像素千來自第一個相機的線與 N 一起接收千M 的像素千來自第二個攝像頭的線。
這可能很難在FPGA輸入端實現,因為兩條視頻路徑可能具有不同的延遲:線路鎖定相機可能輸出未對齊的線路,不同的連接長度可能導致未對齊,視頻解碼器可能會引入可變的啟動延遲。由于這些延遲,預計具有線鎖定攝像頭的系統將具有許多未對準的像素。
線鎖定相機未對準
即使是線路鎖定的攝像機也可以輸出未對齊的視頻線。圖8顯示了來自兩個攝像頭CVBS輸出的垂直同步信號。一臺攝像機(同步主站)向另一臺攝像機(同步從站)提供線路鎖定信號。380 ns的未對準清晰可見。圖9顯示了視頻解碼器在這些攝像機輸出端傳輸的數據。可以看到 11 像素的偏移。
圖8.線路鎖定攝像機之間的 380 ns 視頻未對準。
圖9.數字域中未補償的 11 像素視頻未對準。
不同的連接長度
所有電氣連接都會引入傳播延遲,因此請確保兩個視頻路徑具有相同的軌道和電纜長度。
視頻解碼器/HDMI 接收器延遲
所有視頻解碼器都會引入延遲,延遲可能因啟用的功能而異。此外,某些視頻部分包含可能會增加隨機啟動延遲的元素,例如深色FIFO。使用視頻解碼器的典型立體系統可能具有大約5像素時鐘的隨機啟動延遲。如圖10所示,包含HDMI發射器和接收器的系統可能具有約40像素時鐘的隨機啟動延遲。
圖 10.管道延遲測量設置。
不對中補償
圖11顯示了一個系統,其中來自每個攝像頭的模擬信號由視頻解碼器數字化。每個視頻路徑的數據和時鐘是分開的。兩個視頻路徑都連接到FIFO,FIFO緩沖輸入數據以補償數據錯位。在輸出數據時,FIFO使用來自其中一個解碼器的公共時鐘。在鎖定系統中,兩條數據路徑應具有完全相同的時鐘頻率,確保只要攝像機被鎖定并且視頻解碼器被鎖定,就不會有FIFO溢出或下溢。
通過啟用或禁用FIFO輸出,控制塊可保持FIFO電平,以最大程度地減少像素錯位。如果補償正確進行,FPGA模塊的輸出應該是與第一個像素對齊的兩條數據路徑。然后將該數據提供給FPGA后端用于3D格式制作。
圖 11.使用數字FIFO重新對齊視頻圖片。
未對準測量
兩個數字化數據流之間的未對準可以在視頻FIFO的輸出端使用一個時鐘計數器來測量,該計數器在其中一個輸入信號的垂直同步(VS)脈沖上復位。圖 12 顯示了兩個未對齊 4 像素的視頻流(vs_a_in 和 vs_b_in)。計數器使用清單 1 中所示的方法測量未對準。計數從 VS1 的上升沿開始,在 VS2 的上升沿停止。
如果幀的總像素長度已知,則可以通過從幀長度中減去計數值來計算負偏斜(VS2 在 VS1 之前)。當偏差超過像素幀長度的一半時,應計算此負值。結果應用于重新調整存儲在FIFO中的數據。
圖 12.未對準測量。
清單 1.簡單的錯位測量(Verilog)。
module misalign_measurement(
input wire reset,
input wire clk_in,
input wire vs_a_in,
input wire vs_b_in,
output reg [15:0] misalign,
output reg ready);
reg [15:0] cnt;
reg cnt_en, cnt_reset;
reg vs_a_in_r, vs_b_in_r;
assign vs_a_rising = vs_a_in > vs_a_in_r;
assign vs_b_rising = vs_b_in > vs_b_in_r;
always @(posedge clk_in)
begin
vs_a_in_r <= vs_a_in;
vs_b_in_r <= vs_b_in;
end
always @(posedge clk_in)
if (reset)
begin
{ ready, cnt_en } <= 2'b00;
misalign <= 0;
end else begin
if ((vs_a_in == 1'b0) && (vs_b_in == 1'b0))
{ ready, cnt_reset } <= 2'b01;
else
cnt_reset <= 1'b0;
/* beginning */
if (vs_a_rising && vs_b_rising)
begin
misalign <= 0;
{ ready, cnt_en } <= 2'b10;
end
else if ((vs_a_rising > vs_b_in) || (vs_b_rising > vs_a_in))
{ ready, cnt_en } <= 2'b01;
/* ending */
if ((cnt_en == 1'b1) && (vs_a_rising || vs_b_rising))
begin
{ ready, cnt_en } <= 2'b10;?
misalign <= vs_a_rising ? (-(cnt + 1)) : (cnt + 1);
end
end
always @(posedge clk_in) /* counter */
if ((cnt_reset) || (reset))
cnt <= 0;
else if (cnt_en)
cnt <= cnt + 1;
endmodule
從兩個對齊的視頻流制作 3D 視頻
一旦像素、線和幀數據真正同步,FPGA就可以將視頻數據形成3D視頻流,如圖13所示。
圖 13.實現 3D 格式的簡化架構。
傳入的數據由公共時鐘讀入內存。同步時序分析儀檢查輸入的同步信號并提取視頻時序,包括水平前后門廊長度、垂直前后門廊、水平和垂直同步長度、水平有源線長度、垂直有源線數和同步信號極化。將此信息與當前水平和垂直像素位置一起傳遞給同步時序再生器,使其能夠生成經過修改以適應所需 3D 視頻結構的時序。應延遲新創建的計時,以確保 FIFO 包含所需的數據量。
并排 3D 視頻
就內存而言,要求最低的架構是并排格式,它只需要一個 2 行緩沖區 (FIFO) 來存儲來自兩個視頻源的行的內容。并排格式的寬度應為原始傳入格式的兩倍。為此,應使用雙倍時鐘為重新生成的同步時序提供雙倍水平線長度的時鐘。用于為后端計時的雙倍時鐘將以雙倍速率清空第一個FIFO,然后清空第二個FIFO,使其能夠并排放置圖片,如圖14所示。并排圖片如圖 15 所示。
圖 14.使用簡單的 FPGA 線路緩沖器并排拼接兩張圖片。
圖 15.并排 576p 圖片與視頻計時
結論
ADI公司的解碼器和HDMI產品以及簡單的后處理可以創建并實現真正的立體3D視頻傳輸。如圖所示,可以使用簡單的數字塊實現3D視頻,而無需昂貴的內存。該系統可用于需要3D視覺的任何類型的系統,從簡單的視頻錄制相機到基于ADSP-BF609 DSP的專用系統,可用于跟蹤物體及其距離。
審核編輯:郭婷
-
dsp
+關注
關注
553文章
7987瀏覽量
348742 -
FPGA
+關注
關注
1629文章
21729瀏覽量
602986 -
機器人
+關注
關注
211文章
28379瀏覽量
206913
發布評論請先 登錄
相關推薦
評論