基于FPGA的系统结合了两个视频流以提供3D视频

描述

视频系统在消费类应用中已经无处不在,在汽车、机器人和工业领域越来越普遍。这种向非消费类应用的增长主要是由于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的专用系统,可用于跟踪物体及其距离。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分