視頻系統(tǒng)在消費(fèi)類(lèi)應(yīng)用中已經(jīng)無(wú)處不在,在汽車(chē)、機(jī)器人和工業(yè)領(lǐng)域越來(lái)越普遍。這種向非消費(fèi)類(lèi)應(yīng)用的增長(zhǎng)主要是由于HDMI標(biāo)準(zhǔn)以及更快、更高效的DSP和FPGA的引入。
本文概述了使用模擬或HDMI攝像機(jī)實(shí)現(xiàn)立體視覺(jué)(3D視頻)的要求。它描述了一個(gè)基于 FPGA 的系統(tǒng),該系統(tǒng)將兩個(gè)視頻流組合成一個(gè) 3D 視頻流,以便通過(guò) HDMI 1.4 發(fā)射器傳輸,以及一個(gè)基于 DSP 的系統(tǒng),與從兩個(gè)攝像頭接收數(shù)據(jù)通常需要的帶寬相比,該系統(tǒng)節(jié)省了 DMA 帶寬。此外,它還展示了一種實(shí)現(xiàn)并排格式的方法,用于3D相機(jī)或需要3D視頻的系統(tǒng)。
一般概述
立體視覺(jué)需要兩個(gè)相距約5.5厘米的攝像機(jī),這是人眼之間的典型間距。
圖2所示的高級(jí)框圖使用兩個(gè)使用相同視頻標(biāo)準(zhǔn)的同步攝像機(jī)、兩個(gè)視頻解碼器和一個(gè)FPGA。為了確保完全相同的幀速率,攝像機(jī)必須行鎖定到公共定時(shí)參考。如果沒(méi)有同步,則無(wú)法在不使用外部存儲(chǔ)器存儲(chǔ)完整視頻幀的情況下組合輸出。
圖2.高級(jí)框圖。
圖 3 顯示了兩個(gè)線(xiàn)路鎖定的視頻流被合并到單個(gè)立體圖像中。圖 4 顯示了如何在不將整個(gè)視頻幀保存在外部存儲(chǔ)器中的情況下無(wú)法合并異步視頻流。
圖3.合并兩個(gè)同步的視頻流。
圖4.如果不使用外部存儲(chǔ)器,則無(wú)法合并異步視頻流。
然后,兩個(gè)同步攝像機(jī)的輸出由視頻解碼器(如用于模擬攝像機(jī)的ADV7181D、ADV7182或ADV7186)進(jìn)行數(shù)字化; 或通過(guò)HDMI接收器,如帶有數(shù)字?jǐn)z像機(jī)的ADV7610或ADV7611。
視頻解碼器和HDMI接收器使用內(nèi)部鎖相環(huán)(PLL)在其輸出總線(xiàn)上產(chǎn)生時(shí)鐘和像素?cái)?shù)據(jù)。這意味著在數(shù)字化模擬視頻或接收HDMI流時(shí),將為兩個(gè)相機(jī)生成兩個(gè)獨(dú)立的時(shí)鐘域。此外,兩個(gè)視頻流可能會(huì)未對(duì)齊。這些時(shí)序差異和失調(diào)必須在FPGA等后端設(shè)備中進(jìn)行補(bǔ)償,將數(shù)據(jù)帶到公共時(shí)鐘域,然后再將兩個(gè)視頻圖像合并為單個(gè)立體視頻幀。然后,同步視頻流通過(guò)支持HDMI 1.4 3D的HDMI發(fā)射器(如ADV7511或ADV7513)發(fā)送,或者呈現(xiàn)給DSP,例如ADSP-BF609 黑鰭金槍魚(yú)處理器?—用于進(jìn)一步處理。
時(shí)鐘架構(gòu)
視頻解碼器有兩個(gè)不同的時(shí)鐘源,具體取決于它們是鎖定還是解鎖。當(dāng)視頻PLL鎖定到輸入同步信號(hào)(視頻解碼器的水平同步或HDMI的TMDS時(shí)鐘)時(shí),它會(huì)生成一個(gè)鎖定到輸入視頻源的時(shí)鐘。當(dāng)視頻鎖定丟失或PLL處于強(qiáng)制自由運(yùn)行模式時(shí),視頻PLL不會(huì)鎖定到輸入的同步信號(hào),而是產(chǎn)生鎖定到晶體時(shí)鐘的時(shí)鐘輸出。此外,由于LLC時(shí)鐘驅(qū)動(dòng)器在復(fù)位后設(shè)置為高阻抗模式,因此復(fù)位后時(shí)鐘可能無(wú)法輸出。
因此,如果系統(tǒng)具有來(lái)自視頻解碼器或HDMI接收器的兩個(gè)或多個(gè)視頻路徑,則即使向兩個(gè)視頻解碼器或HDMI接收器提供相同的晶體時(shí)鐘,它也會(huì)具有兩個(gè)具有不同頻率和相位的不同時(shí)鐘域,因?yàn)槊總€(gè)設(shè)備都會(huì)基于自己的PLL生成自己的時(shí)鐘。
帶鎖定視頻解碼器的同步系統(tǒng)
對(duì)于使用兩個(gè)源的典型立體視頻,每個(gè)視頻解碼器鎖定到輸入的視頻信號(hào),并根據(jù)輸入的水平同步或TMDS時(shí)鐘生成自己的時(shí)鐘。當(dāng)兩臺(tái)攝像機(jī)同步或鎖定到同一時(shí)序參考時(shí),幀線(xiàn)將始終對(duì)齊。由于兩個(gè)獨(dú)立的視頻解碼器接收相同的水平同步,因此像素時(shí)鐘將具有相同的像素時(shí)鐘頻率。這允許將兩條數(shù)據(jù)路徑引入一個(gè)公共時(shí)鐘域,如圖5所示。
圖5.兩個(gè)攝像機(jī)同步到一個(gè)公共參考。兩個(gè)視頻解碼器接收相同的同步信號(hào),因此它們也被鎖定。
兩個(gè)視頻解碼器接收相同的同步信號(hào),因此它們也被鎖定。
異步視頻系統(tǒng)
遺憾的是,其中一個(gè)解碼器可能會(huì)由于視頻源信號(hào)質(zhì)量差而失去鎖定,如圖6所示;或者相機(jī)可能會(huì)因視頻鏈路斷開(kāi)而失去同步,如圖7所示。這將導(dǎo)致兩條數(shù)據(jù)路徑中的頻率不同,從而導(dǎo)致進(jìn)入后端的數(shù)據(jù)量不對(duì)稱(chēng)。
圖6.具有未鎖定視頻解碼器的線(xiàn)鎖定攝像機(jī)。
圖7.帶鎖定視頻解碼器的解鎖攝像機(jī)。
通過(guò)使用中斷(SD視頻解碼器的中斷SD_UNLOCK,分量視頻解碼器的中斷CP_UNLOCK或HDMI接收器中的TMDSPLL_LCK寄存器)可以在延遲后啟動(dòng)來(lái)檢測(cè)丟失的視頻鎖定。視頻解碼器集成了平滑不穩(wěn)定水平同步的機(jī)制,因此檢測(cè)丟失的視頻鎖定可能需要幾行時(shí)間。這種延遲可以通過(guò)控制FPGA內(nèi)的丟失鎖來(lái)減少。
時(shí)鐘三態(tài)模式
在設(shè)計(jì)FPGA時(shí)鐘資源時(shí),重要的是要知道,默認(rèn)情況下,許多視頻解碼器和HDMI產(chǎn)品在復(fù)位后將時(shí)鐘和數(shù)據(jù)線(xiàn)置于三態(tài)模式。因此,LLC像素時(shí)鐘將不適合同步復(fù)位。
兩個(gè)視頻流中的數(shù)據(jù)未對(duì)齊
為了簡(jiǎn)化系統(tǒng)并減少合并兩個(gè)圖像所需的內(nèi)存,到達(dá)FPGA的數(shù)據(jù)應(yīng)同步,以便N千M 的像素千來(lái)自第一個(gè)相機(jī)的線(xiàn)與 N 一起接收千M 的像素千來(lái)自第二個(gè)攝像頭的線(xiàn)。
這可能很難在FPGA輸入端實(shí)現(xiàn),因?yàn)閮蓷l視頻路徑可能具有不同的延遲:線(xiàn)路鎖定相機(jī)可能輸出未對(duì)齊的線(xiàn)路,不同的連接長(zhǎng)度可能導(dǎo)致未對(duì)齊,視頻解碼器可能會(huì)引入可變的啟動(dòng)延遲。由于這些延遲,預(yù)計(jì)具有線(xiàn)鎖定攝像頭的系統(tǒng)將具有許多未對(duì)準(zhǔn)的像素。
線(xiàn)鎖定相機(jī)未對(duì)準(zhǔn)
即使是線(xiàn)路鎖定的攝像機(jī)也可以輸出未對(duì)齊的視頻線(xiàn)。圖8顯示了來(lái)自?xún)蓚€(gè)攝像頭CVBS輸出的垂直同步信號(hào)。一臺(tái)攝像機(jī)(同步主站)向另一臺(tái)攝像機(jī)(同步從站)提供線(xiàn)路鎖定信號(hào)。380 ns的未對(duì)準(zhǔn)清晰可見(jiàn)。圖9顯示了視頻解碼器在這些攝像機(jī)輸出端傳輸?shù)臄?shù)據(jù)??梢钥吹?11 像素的偏移。
圖8.線(xiàn)路鎖定攝像機(jī)之間的 380 ns 視頻未對(duì)準(zhǔn)。
圖9.數(shù)字域中未補(bǔ)償?shù)?11 像素視頻未對(duì)準(zhǔn)。
不同的連接長(zhǎng)度
所有電氣連接都會(huì)引入傳播延遲,因此請(qǐng)確保兩個(gè)視頻路徑具有相同的軌道和電纜長(zhǎng)度。
視頻解碼器/HDMI 接收器延遲
所有視頻解碼器都會(huì)引入延遲,延遲可能因啟用的功能而異。此外,某些視頻部分包含可能會(huì)增加隨機(jī)啟動(dòng)延遲的元素,例如深色FIFO。使用視頻解碼器的典型立體系統(tǒng)可能具有大約5像素時(shí)鐘的隨機(jī)啟動(dòng)延遲。如圖10所示,包含HDMI發(fā)射器和接收器的系統(tǒng)可能具有約40像素時(shí)鐘的隨機(jī)啟動(dòng)延遲。
圖 10.管道延遲測(cè)量設(shè)置。
不對(duì)中補(bǔ)償
圖11顯示了一個(gè)系統(tǒng),其中來(lái)自每個(gè)攝像頭的模擬信號(hào)由視頻解碼器數(shù)字化。每個(gè)視頻路徑的數(shù)據(jù)和時(shí)鐘是分開(kāi)的。兩個(gè)視頻路徑都連接到FIFO,F(xiàn)IFO緩沖輸入數(shù)據(jù)以補(bǔ)償數(shù)據(jù)錯(cuò)位。在輸出數(shù)據(jù)時(shí),F(xiàn)IFO使用來(lái)自其中一個(gè)解碼器的公共時(shí)鐘。在鎖定系統(tǒng)中,兩條數(shù)據(jù)路徑應(yīng)具有完全相同的時(shí)鐘頻率,確保只要攝像機(jī)被鎖定并且視頻解碼器被鎖定,就不會(huì)有FIFO溢出或下溢。
通過(guò)啟用或禁用FIFO輸出,控制塊可保持FIFO電平,以最大程度地減少像素錯(cuò)位。如果補(bǔ)償正確進(jìn)行,F(xiàn)PGA模塊的輸出應(yīng)該是與第一個(gè)像素對(duì)齊的兩條數(shù)據(jù)路徑。然后將該數(shù)據(jù)提供給FPGA后端用于3D格式制作。
圖 11.使用數(shù)字FIFO重新對(duì)齊視頻圖片。
未對(duì)準(zhǔn)測(cè)量
兩個(gè)數(shù)字化數(shù)據(jù)流之間的未對(duì)準(zhǔn)可以在視頻FIFO的輸出端使用一個(gè)時(shí)鐘計(jì)數(shù)器來(lái)測(cè)量,該計(jì)數(shù)器在其中一個(gè)輸入信號(hào)的垂直同步(VS)脈沖上復(fù)位。圖 12 顯示了兩個(gè)未對(duì)齊 4 像素的視頻流(vs_a_in 和 vs_b_in)。計(jì)數(shù)器使用清單 1 中所示的方法測(cè)量未對(duì)準(zhǔn)。計(jì)數(shù)從 VS1 的上升沿開(kāi)始,在 VS2 的上升沿停止。
如果幀的總像素長(zhǎng)度已知,則可以通過(guò)從幀長(zhǎng)度中減去計(jì)數(shù)值來(lái)計(jì)算負(fù)偏斜(VS2 在 VS1 之前)。當(dāng)偏差超過(guò)像素幀長(zhǎng)度的一半時(shí),應(yīng)計(jì)算此負(fù)值。結(jié)果應(yīng)用于重新調(diào)整存儲(chǔ)在FIFO中的數(shù)據(jù)。
圖 12.未對(duì)準(zhǔn)測(cè)量。
清單 1.簡(jiǎn)單的錯(cuò)位測(cè)量(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
從兩個(gè)對(duì)齊的視頻流制作 3D 視頻
一旦像素、線(xiàn)和幀數(shù)據(jù)真正同步,F(xiàn)PGA就可以將視頻數(shù)據(jù)形成3D視頻流,如圖13所示。
圖 13.實(shí)現(xiàn) 3D 格式的簡(jiǎn)化架構(gòu)。
傳入的數(shù)據(jù)由公共時(shí)鐘讀入內(nèi)存。同步時(shí)序分析儀檢查輸入的同步信號(hào)并提取視頻時(shí)序,包括水平前后門(mén)廊長(zhǎng)度、垂直前后門(mén)廊、水平和垂直同步長(zhǎng)度、水平有源線(xiàn)長(zhǎng)度、垂直有源線(xiàn)數(shù)和同步信號(hào)極化。將此信息與當(dāng)前水平和垂直像素位置一起傳遞給同步時(shí)序再生器,使其能夠生成經(jīng)過(guò)修改以適應(yīng)所需 3D 視頻結(jié)構(gòu)的時(shí)序。應(yīng)延遲新創(chuàng)建的計(jì)時(shí),以確保 FIFO 包含所需的數(shù)據(jù)量。
并排 3D 視頻
就內(nèi)存而言,要求最低的架構(gòu)是并排格式,它只需要一個(gè) 2 行緩沖區(qū) (FIFO) 來(lái)存儲(chǔ)來(lái)自?xún)蓚€(gè)視頻源的行的內(nèi)容。并排格式的寬度應(yīng)為原始傳入格式的兩倍。為此,應(yīng)使用雙倍時(shí)鐘為重新生成的同步時(shí)序提供雙倍水平線(xiàn)長(zhǎng)度的時(shí)鐘。用于為后端計(jì)時(shí)的雙倍時(shí)鐘將以雙倍速率清空第一個(gè)FIFO,然后清空第二個(gè)FIFO,使其能夠并排放置圖片,如圖14所示。并排圖片如圖 15 所示。
圖 14.使用簡(jiǎn)單的 FPGA 線(xiàn)路緩沖器并排拼接兩張圖片。
圖 15.并排 576p 圖片與視頻計(jì)時(shí)
結(jié)論
ADI公司的解碼器和HDMI產(chǎn)品以及簡(jiǎn)單的后處理可以創(chuàng)建并實(shí)現(xiàn)真正的立體3D視頻傳輸。如圖所示,可以使用簡(jiǎn)單的數(shù)字塊實(shí)現(xiàn)3D視頻,而無(wú)需昂貴的內(nèi)存。該系統(tǒng)可用于需要3D視覺(jué)的任何類(lèi)型的系統(tǒng),從簡(jiǎn)單的視頻錄制相機(jī)到基于A(yíng)DSP-BF609 DSP的專(zhuān)用系統(tǒng),可用于跟蹤物體及其距離。
審核編輯:郭婷
-
dsp
+關(guān)注
關(guān)注
552文章
7959瀏覽量
347926 -
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601232 -
機(jī)器人
+關(guān)注
關(guān)注
210文章
28103瀏覽量
205845
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論