基于FPGA的系統(tǒng)通過合成兩條視頻流來提供3D視頻
發(fā)布時(shí)間:2020-04-22 來源:Witold Kaczurba 責(zé)任編輯:wenwei
【導(dǎo)讀】視頻系統(tǒng),目前已經(jīng)深入消費(fèi)應(yīng)用的各個(gè)方面,在汽車、機(jī)器人和工業(yè)領(lǐng)域日益普遍。其在非消費(fèi)應(yīng)用中的增長(zhǎng)主要源于HDMI標(biāo)準(zhǔn)以及更快、更高效的DSP和FPGA的出現(xiàn)。
本文將概要討論利用模擬或HDMI攝像機(jī)實(shí)現(xiàn)立體視覺(3D視頻)的各種要求。文章將描述一個(gè)基于FPGA的系統(tǒng),它將兩個(gè)視頻流結(jié)合成一個(gè)3D視頻流,通過HDMI 1.4發(fā)射器進(jìn)行傳輸,同時(shí)還要介紹一個(gè)基于DSP的系統(tǒng),與通常需從兩臺(tái)攝像機(jī)接收數(shù)據(jù)相比,該系統(tǒng)可以節(jié)省DMA帶寬。另外,本文還將描述一種方法,該方法可以實(shí)現(xiàn)一種并排格式,可供3D攝像機(jī)或要求3D視頻的系統(tǒng)使用。
概述
立體視覺要求使用兩臺(tái)攝像機(jī),二者相距大約5.5厘米,這是人類雙眼之間的典型間距,如圖1所示。
圖1 支架上的兩臺(tái)攝像機(jī)(已針對(duì)立體視覺對(duì)齊)
圖2所示高級(jí)功能框圖使用了采用相同視頻標(biāo)準(zhǔn)的兩臺(tái)同步攝像機(jī)、兩個(gè)視頻解碼器和一個(gè)FPGA。為了確保完全一致的幀速率,攝像機(jī)必須行鎖定到共同的參考時(shí)序。如果沒有同步,不使用外部存儲(chǔ)器,就不可能將輸出組合起來并存儲(chǔ)為完整的視頻幀。
圖2 高級(jí)功能框圖
圖3顯示兩個(gè)行鎖定視頻流被合并成一個(gè)立體圖像。圖4顯示,如果不將整個(gè)視頻幀保存在外部存儲(chǔ)器中,則異步視頻流無法合并。
圖3 合并兩個(gè)同步視頻流
圖4 如果不使用外部存儲(chǔ)器,則無法合并異步視頻流
然后,兩臺(tái)同步攝像機(jī)的輸出由視頻解碼器(如ADV7181D, ADV7182或ADV7186 用于模擬攝像機(jī))進(jìn)行數(shù)字化處;也可由 HDMI receivers(如ADV7610 或 ADV7611用于數(shù)字?jǐn)z像機(jī))進(jìn)行數(shù)字化處理。
視頻解碼器和HDMI接收器都采用內(nèi)部鎖相環(huán)(PLL)在其輸出總線上產(chǎn)生時(shí)鐘和像素?cái)?shù)據(jù)。這意味著,在數(shù)字化模擬視頻,或者接收HDMI流時(shí),將為兩臺(tái)攝像機(jī)產(chǎn)生兩個(gè)獨(dú)立的時(shí)鐘域。另外,兩個(gè)視頻流可能存在對(duì)齊誤差。這些時(shí)序差異和對(duì)齊誤差必須在后端器件(如FPGA)中進(jìn)行補(bǔ)償,先將數(shù)據(jù)帶至共同的時(shí)鐘域,然后再將兩個(gè)視頻圖像結(jié)合成單個(gè)立體視頻幀。然后,通過一個(gè)支持3D的HDMI 1.4HDMI 接收器(如ADV7511 或 ADV7513—也可以將其提供給DSP(如 ADSP-BF609 Blackfin®處理器)—以便進(jìn)一步處理。
時(shí)鐘架構(gòu)
視頻解碼器有兩種完全不同的時(shí)鐘源,具體取決于其是否鎖定。當(dāng)視頻PLL被鎖定至輸入同步信號(hào)時(shí)——水平同步(視頻解碼器)或TMDS時(shí)鐘(HDMI)——結(jié)果會(huì)產(chǎn)生一個(gè)鎖定至輸入視頻源的時(shí)鐘。當(dāng)視頻失鎖時(shí),或者當(dāng)PLL處于強(qiáng)制自由運(yùn)行模式時(shí),視頻PLL不會(huì)鎖定至輸入同步信號(hào),結(jié)果會(huì)產(chǎn)生一個(gè)鎖定至晶振時(shí)鐘的時(shí)鐘輸出。另外,時(shí)鐘可能不會(huì)在復(fù)位后輸出,因?yàn)長(zhǎng)LC時(shí)鐘驅(qū)動(dòng)器在復(fù)位后設(shè)置為高阻抗模式。
因此,如果系統(tǒng)有兩個(gè)或多個(gè)始于視頻解碼器或HDMI接收器的視頻路徑,即使將同一晶振時(shí)鐘提供給兩個(gè)視頻解碼器或HDMI接收器,仍會(huì)有兩個(gè)不同頻率、不同相位的不同時(shí)鐘域,因?yàn)槊總€(gè)器件都會(huì)基于自己的PLL產(chǎn)生自己的時(shí)鐘。
帶鎖定視頻解碼器的同步系統(tǒng)
典型的立體視頻使用兩個(gè)視頻源,其中,每個(gè)視頻解碼器都會(huì)鎖定至輸入視頻信號(hào),并會(huì)基于輸入水平同步或TMDS時(shí)鐘產(chǎn)生自己的時(shí)鐘。當(dāng)兩臺(tái)攝像機(jī)同步——或行鎖定至同一參考時(shí)序時(shí)——分幀線將始終對(duì)齊。由于兩個(gè)獨(dú)立的視頻解碼器會(huì)收到相同的水平同步信號(hào),因此,像素時(shí)鐘將擁有相同的像素時(shí)鐘頻率。這樣,就可以將兩條數(shù)據(jù)路徑帶入同一個(gè)時(shí)鐘域,如圖5所示。
圖5 同步至同一參考源的兩臺(tái)攝像機(jī)。
兩個(gè)視頻解碼 器都會(huì)收到同一同步信號(hào),因此,它們也會(huì)鎖定
異步視頻系統(tǒng)
不幸的是,其中一個(gè)視頻解碼器可能因視頻源信號(hào)質(zhì)量欠佳而失鎖,如圖6所示;或者,攝像機(jī)因視頻鏈路斷開而失去同步性,如圖7所示。這會(huì)在兩條數(shù)據(jù)路徑中導(dǎo)致不同的頻率,結(jié)果又會(huì)導(dǎo)致進(jìn)入后端中的數(shù)據(jù)量不對(duì)稱。
圖6 帶未鎖定視頻解碼器的行鎖定攝像機(jī)
圖7 帶鎖定視頻解碼器的未鎖定攝像機(jī)
視頻失鎖可以通過使用一個(gè)中斷(SD視頻解碼器為SD_UNLOCK,分量視頻解碼器為CP_UNLOCK,或HDMI接收器中的TMDSPLL_LCK寄存器)來檢測(cè),該中斷會(huì)在一定延遲后介入。視頻解碼器集成了不穩(wěn)定水平同步平滑機(jī)制,因此,視頻失鎖的檢測(cè)可能需要兩三行。該延遲可通過控制FPGA中的失鎖來減少。
時(shí)鐘三態(tài)模式
在設(shè)計(jì)FPGA時(shí)鐘資源時(shí),必須知道,默認(rèn)情況下,許多視頻解碼器和HDMI產(chǎn)品在復(fù)位后將時(shí)鐘和數(shù)據(jù)線路置為三態(tài)模式。因此,LLC像素時(shí)鐘不適用于同步復(fù)位。
兩條視頻流中的數(shù)據(jù)對(duì)齊誤差
為了簡(jiǎn)化系統(tǒng)并減少合并兩幅圖像所需存儲(chǔ)器,到達(dá)FPGA的數(shù)據(jù)應(yīng)進(jìn)行同步,以使來自第一臺(tái)攝像機(jī)的第M 行第N個(gè) 像素與來自第二臺(tái)攝像機(jī)的第M 行第N個(gè) 像素同時(shí)收到。
在FPGA輸入端,這可能很難實(shí)現(xiàn),因?yàn)閮蓷l視頻路徑可能具有不同的延遲:行鎖定攝像機(jī)可能輸出存在對(duì)齊誤差的行,不同的連接長(zhǎng)度可能加大對(duì)齊誤差,而視頻解碼器則可能帶來可變啟動(dòng)延遲。受這些延遲影響,采用行鎖定攝像機(jī)的系統(tǒng)會(huì)有一些存在對(duì)齊誤差的像素。
行鎖定攝像機(jī)對(duì)齊誤差
即使是行鎖定攝像機(jī)也可能輸出存在對(duì)齊誤差的視頻行。圖8顯示來自兩臺(tái)攝像機(jī)的CVBS輸出端的垂直同步信號(hào)。一臺(tái)攝像機(jī)(同步主機(jī))為第二臺(tái)攝像機(jī)(同步從機(jī))提供行鎖定信號(hào)。380 ns的對(duì)齊誤差是清楚可見的。圖9展示的是這些攝像機(jī)輸出端的視頻解碼器傳輸?shù)臄?shù)據(jù)。可以看到11個(gè)像素的位移。
圖8 行鎖定視頻攝像機(jī)之間的380 ns視頻對(duì)齊誤差
圖9 數(shù)字域中未補(bǔ)償?shù)?1個(gè)像素的視頻對(duì)齊誤差
不同的連接長(zhǎng)度
所有電氣連接都會(huì)帶來傳播延遲,因此,要確保兩條視頻路徑具有相同的軌道和電纜長(zhǎng)度。
視頻解碼器/HDMI接收器延遲
所有視頻解碼器都會(huì)帶來可能因啟用的功能而異的延遲。另外,有些視頻器件含有可能增加隨機(jī)啟動(dòng)延遲的因素——如深色FIFO。采用視頻解碼器的典型立體系統(tǒng)的隨機(jī)啟動(dòng)延遲大約為5個(gè)像素時(shí)鐘。含有HDMI發(fā)射器和接收器的系統(tǒng)(如圖10所示)的隨機(jī)啟動(dòng)延遲可能為40個(gè)像素時(shí)鐘左右。
圖10 流水線延遲測(cè)量設(shè)置
對(duì)齊誤差補(bǔ)償
圖11所示系統(tǒng)中,一個(gè)視頻解碼器對(duì)來自各攝像機(jī)的模擬信號(hào)進(jìn)行數(shù)字化處理。各視頻路徑的數(shù)據(jù)和時(shí)鐘是獨(dú)立的。兩條視頻路徑都連接至FIFO,后者對(duì)輸入數(shù)據(jù)進(jìn)行緩沖,以補(bǔ)償數(shù)據(jù)對(duì)齊誤差。在輸出數(shù)據(jù)時(shí),F(xiàn)IFO使用來自其中一個(gè)解碼器的共用時(shí)鐘。在鎖定系統(tǒng)中,兩條數(shù)據(jù)路徑應(yīng)具有完全相同的時(shí)鐘頻率,以確保在攝像機(jī)行鎖定且視頻解碼器鎖定的情況下,不會(huì)出現(xiàn)FIFO溢出或下溢現(xiàn)象。
通過啟用或禁用FIFO輸出,控制模塊可以維持FIFO電平以盡量減少像素對(duì)齊誤差。如果采取了正確的補(bǔ)償措施,則FPGA模塊的輸出應(yīng)為與第一個(gè)像素對(duì)齊的兩條數(shù)據(jù)路徑。然后該數(shù)據(jù)提供給FPGA后端,以生成3D格式。
圖11 使用數(shù)字FIFO來重新對(duì)齊視頻圖像
對(duì)齊誤差測(cè)量
兩個(gè)數(shù)字化數(shù)據(jù)流之間的對(duì)齊誤差可以在視頻FIFO輸出端進(jìn)行測(cè)量,其方法是使用一個(gè)單一時(shí)鐘計(jì)數(shù)器,該計(jì)數(shù)器在輸入信號(hào)之一的垂直同步(VS)脈沖上復(fù)位。圖12所示兩個(gè)視頻流(vs_a_in和vs_b_in)的對(duì)齊誤差為4個(gè)像素。計(jì)數(shù)器使用列表1中所示方法測(cè)量對(duì)齊誤差。計(jì)數(shù)從VS1的上升沿開始,并在VS2的上升沿終止。
如果一個(gè)幀的總像素長(zhǎng)度是已知的,則可以通過從幀長(zhǎng)中減去計(jì)數(shù)值,從而算出負(fù)偏斜(VS2位于VS1之前)。該負(fù)值應(yīng)在偏斜超過像素幀長(zhǎng)的一半時(shí)計(jì)算。結(jié)果應(yīng)用來重新對(duì)齊FIFO中存儲(chǔ)的數(shù)據(jù)。
圖12 對(duì)齊誤差測(cè)量
列表1 簡(jiǎn)單對(duì)齊誤差測(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視頻
一旦像素、行和幀數(shù)據(jù)都真正同步,F(xiàn)PGA可以將視頻數(shù)據(jù)轉(zhuǎn)換成3D視頻流,如圖13所示。
圖13 用于實(shí)現(xiàn)3D格式的簡(jiǎn)化架構(gòu)
輸入數(shù)據(jù)由共用時(shí)鐘讀入存儲(chǔ)器。同步時(shí)序分析儀檢查輸入的同步信號(hào),并抽取視頻時(shí)序,包括水平前后沿長(zhǎng)度、垂直前后沿、水平和垂直同步長(zhǎng)度、水平有效行長(zhǎng)、垂直有效行數(shù)和同步信號(hào)極化。將該信息與當(dāng)前水平和垂直像素位置一起傳給同步時(shí)序再發(fā)生器,這樣可以生成經(jīng)修改的時(shí)序,以便支持所需3D視頻結(jié)構(gòu)。新生成的時(shí)序應(yīng)延遲,以確保FIFO含有所需數(shù)據(jù)量。
并排3D視頻
對(duì)存儲(chǔ)器要求最低的架構(gòu)是并排格式,只需要一個(gè)兩行緩沖器(FIFO)即可存儲(chǔ)來自兩個(gè)視頻源的行內(nèi)容。并排格式的寬度應(yīng)為原始輸入模式的兩倍。為此,應(yīng)使用一個(gè)雙倍時(shí)鐘來為擁有雙倍水平行長(zhǎng)度的再生同步時(shí)序提供時(shí)鐘。用于為后端提供時(shí)鐘的雙倍時(shí)鐘將以雙倍速率清空第一個(gè)FIFO和第二個(gè)FIFO,這樣即可并排顯示圖像,如圖14所示。并排圖像如圖15所示。
圖14 使用簡(jiǎn)單的FPGA行緩沖器來并排合并兩幅圖像
圖15 視頻時(shí)序下的并排576p圖像
結(jié)論
ADI公司的解碼器和HDMI產(chǎn)品以及簡(jiǎn)單的后處理技術(shù)可以打造出真正的立體3D視頻,并為其傳輸提供條件。如本文所示,用簡(jiǎn)單的數(shù)字模塊,無需使用昂貴的存儲(chǔ)器,即可實(shí)現(xiàn)3D視頻。這種系統(tǒng)可用于需要3D視覺的任何類型的系統(tǒng)中,從簡(jiǎn)單的攝像機(jī),到基于ADSP-BF609 DSP的可以跟蹤物體及其距離的專業(yè)系統(tǒng)。
推薦閱讀:
特別推薦
- 復(fù)雜的RF PCB焊接該如何確保恰到好處?
- 電源效率測(cè)試
- 科技的洪荒之力:可穿戴設(shè)備中的MEMS傳感器 助運(yùn)動(dòng)員爭(zhēng)金奪銀
- 輕松滿足檢測(cè)距離,勞易測(cè)新型電感式傳感器IS 200系列
- Aigtek推出ATA-400系列高壓功率放大器
- TDK推出使用壽命更長(zhǎng)和熱點(diǎn)溫度更高的全新氮?dú)馓畛淙嘟涣鳛V波電容器
- 博瑞集信推出低噪聲、高增益平坦度、低功耗 | 低噪聲放大器系列
技術(shù)文章更多>>
- 基于GD32F407VET6主控芯片的永磁同步電機(jī)控制器設(shè)計(jì)
- 如何選擇和應(yīng)用機(jī)電繼電器實(shí)現(xiàn)多功能且可靠的信號(hào)切換
- 基于APM32F411的移動(dòng)電源控制板應(yīng)用方案
- 數(shù)字儀表與模擬儀表:它們有何區(qū)別?
- 聚焦制造業(yè)企業(yè)貨量旺季“急難愁盼”,跨越速運(yùn)打出紓困“連招”
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
交流電機(jī)
腳踏開關(guān)
接觸器接線
接近開關(guān)
接口IC
介質(zhì)電容
介質(zhì)諧振器
金屬膜電阻
晶體濾波器
晶體諧振器
晶體振蕩器
晶閘管
精密電阻
精密工具
景佑能源
聚合物電容
君耀電子
開發(fā)工具
開關(guān)
開關(guān)電源
開關(guān)電源電路
開關(guān)二極管
開關(guān)三極管
科通
可變電容
可調(diào)電感
可控硅
空心線圈
控制變壓器
控制模塊