基于fpga的高标清可混播的多画面分割器及分割方法_3

文档序号:8459394阅读:来源:国知局
[0091]所述4X4邻域生成模块,用于生成4X4邻域,三次线性插值模块需要一个4X4邻域,4X4邻域的生成步骤如下:
[0092]A、图3中D表示D触发器;FIF0数据缓存模块代表先进先出存储器,FIFO的功能模块采用FPGA所提供的IP核产生,这里的FIFO是一个同步FIF0,起到一个多位的移位寄存器的作用,生成一个4X4邻域需要12个D触发器和3个FIFO队列;
[0093]B、视频数据通过时钟和使能信号从数据输入端依次输入,用一个FIFO和三个移位寄存器来存储一行的数据,对于标清视频来说一行数据的长度有720个,而对于高清视频来说一行数据的长度有1920个,以便使DlI,D12,…,D44存放的正好是4X4邻域所对应的图像数据;
[0094]C、当第一个视频数据刚从D12触发器输出时,FIFO数据缓存模块3、DlO触发器、Dll触发器和D12触发器内正好存储着第一行的数据,FIFO数据缓存模块2、D7触发器、D8触发器和D9触发器内正好存储着第二行的数据,FIFO数据缓存模块1、D4触发器、D5触发器和D6触发器内正好存储着第三行的数据,而当数据流不断从数据输入端输入时,4X4邻域对应的图像数据不断地跟着变化,这就可以对一帧图像的所有像素都进行4X4邻域处理。
[0095]所述三次线性插值模块,用于对4X4邻域生成模块生成的数据进行三次线性插值,并对视频数据的位置信息进行重新编号:
[0096]三次线性插值用于对视频进行缩放,由于最后以1080I50HZ视频的形式输出,所以一帧视频图像的分辨率为1920X1080,一场视频图像的分辨率为1920X540,1/4的视频区域的分辨率为960X270 ;
[0097]标清视频576I_50HZ的图像的分辨率为720 X 576,一场576I_50HZ的图像的分辨率为720 X 288,为了保证横向的视频显示为原始的分辨率,所以不对横向的视频做处理,对纵向的视频做压缩,由于288:270 = 16:15,即16行视频中显示15行视频的效果,具体操作时把每16行视频处理,前15行视频存储着由16行视频向15行视频转换时产生的15行视频数据,前15行数据都做编号,以便对每一行数据做处理时生成不同的权值,第16行数据不变,在以后的操作中丢弃;
[0098]一场高清视频的分辨率为1920X540,所以对960X270来说横向和纵向的数据量都是之前的1/2,所以操作起来比较简单,可以对每个像素点做横向和纵向的三次线性插值,所有的权值是不变的;
[0099]经过4X4邻域处理,数据相对于以前的数据来说是滞后的,所以对数据所对应的横坐标和纵坐标做相应的处理,在以前的横、纵坐标的基础上减去2 ;
[0100]所述视频数据缓存模块,用于缓存经过横向压缩的视频数据图像:为了处理的方便,先把数据进行横向压缩后,可以连续地读出,由FPGA IP核生成的双口 RAM来存储数据;对于标清视频来说,双口 RAM写使能信号是由高速串行接口接收模块生成的数据有效信号;对于高清视频来说,当横坐标为偶数时,双口 RAM的写使能信号有效;
[0101]所述视频信号输出模块,用于输出视频数据、横纵坐标、数据有效信号:
[0102]A、根据FVH,生成横坐标和纵坐标,过程与计算音柱显示区域模块相同,生成横坐标salcer_x_coord,纵坐标salcer_y_coord,同时通过检测行同步,当行同步由高电平向低电平转换的时候,把参数salcer_h_sel取反,同时把salcer_y_coord除以16,设余数为T,通过检测场同步,当场同步由高电平向低电平转换时,把salcer_frame_sel取反;
[0103]B、对于标清视频来说,这时的数据根据不同的FPGA有两种,一种是148.5M,一种是 74.25M。以 74.25M 为例,一行 576I_50HZ 的视频数据有 4752(864X5.5)个,当 salcer_x_coord彡4032并且salcer_x_coord〈4752并且T关O时,数据有效信号有效;当数据有效信号无效时,横坐标置成0,有效时横坐标自增,并用横坐标的数值作为视频数据缓存模块中的双口 RAM的读地址,读取视频数据输出,假设salCer_y_C00rdl除以16的余数为M,商为N, y_coord就等于15N + M,输出的纵坐标的值为y_coord,同时输出salcer_frame_sel ;
[0104]C、对于高清视频来说,当 salcer—x—coord ^ 961 并且 salcer—x—coord〈1921 并且salcer—h—sel等于0时,数据有效信号有效;当数据有效信号无效时,横坐标置成0,有效时横坐标自增,并用横坐标的数值作为视频数据缓存模块中的双口 RAM的读地址,读取视频数据输出,输出的纵坐标的值为salcer_y_coord,编号y_coord,同时输出salcer_frame_sel ;
[0105]如图4所示,所述视频拼接模块包括4个视频数据缓存模块、写入判断输入模块、控制模块、视频同步发生器、帧判读信号模块、读出模块以及FVH嵌入模块;如果具有更多路的SDI视频信号,则需要多个视频数据缓存模块。
[0106]所述视频数据缓存模块,用于缓存当前行的数据和该行数据所对应的纵坐标的数值:四路视频信号分别通过视频数据缓存模块,视频数据缓存模块是由FPGAIP核生成的双口 RAM,双口 RAM的写入地址是视频信号输出模块生成的横坐标,写有效信号为视频信号输出模块生成的数据有效信号,写入的数据为视频信号输出模块生成的输出视频数据和纵坐标。
[0107]所述写入判断输入模块,用于读取4个视频数据缓存模块缓存的视频数据,控制4个视频数据缓存模块的读取的次序,并对高标清视频分开处理:
[0108]写入判断输入模块生成存储模块DDR2SDRAM的写入行地址,由于DDR2SRDAM的读写是分开的,而且根据算法设计读和写永远不可能是同一帧的数据,并且每一行数据都贴上了该行信号的纵坐标,所以如果一行数据被重复的写入对视频图像的显示没有影响,但是如果一行数据没有写入的话,就会对数据图像产生影响;同时存入DDR2SDRAM内的数据视频的有效数据;经计算一行标清数据要消耗4752个74.25M时钟(一行576I50HZ标清视频的像素点个数是864个,而标清时钟是13.5M,所以消耗74.25M时钟的个数是864*74.25/13.5=4752),而两行高清视频1080I50HZ要消耗的时钟5280的数据(一行1080I50HZ高清视频像素点的个数是2640个,而高清时钟是74.25M),写入判断模块要读取四个视频数据缓存模块RAM的时间要大于3840个74.25M的时钟周期,因为一行1080I50HZ高清视频有效的像素点的个数是1920个,而读取四个RAM的时间必须大于两行的1080I_50HZ高清视频有效像素点的个数(1920X2),同时必须小于一行标清数据要消耗74.25M时钟周期的个数和两行高清清数据要消耗74.25M时钟周期的个数;综上所述,设依次读取四个RAM的所需时间为T个74.25M的时钟周期,T的取值范围为3840彡T彡4752,下面以T=4400为例来进行说明。
[0109]其具体步骤如下:
[0110]Α、在O?1100个的时钟周期内,读取RAMl中的数据写入DDR2SDRAM,如果视频I 为标清视频,写入 DDR2SDRAM 的行地址为{ salcer_frame_sell, I’ b0, y_coordl },如果视频 I 为高清视频,写入 DDR2SDRAM 的行地址为{salcer_frame_sell, I’ b0, salcer_y_coordl/2},其中salcer_frame_sell、y_coordl为视频信号输出模块所输出的信号;
[0111]B、在1100?2200个的时钟周期内,读取RAM2中的数据写入DDR2SDRAM,如果视频 2 为标清视频,写入 DDR2SDRAM 的行地址为{salcer_frame_sel2, I’ b0, y_coord2},如果视频2为高清视频,写入DDR2SDRAM的行地址为{salcer_frame_sel2,1’ b0, salcer_y_coord2/2},其中salcer_frame_sel2、y_coord2为视频信号输出模块所输出的信号;
[0112]C、在2200?3300个的时钟周期内,读取RAM3中的数据写入DDR2SDRAM,如果视频
3为标清视频,写入 DDR2SDRAM 的行地址为{salcer_frame_sel3, I’ b0, y_coord3} + 270,如果视频3为高清视频,写入DDR2SDRAM的行地址为{salcer_frame_sel3,1’ b0, salcer_y_coord3/2} + 270,其中salcer_frame_sel3、y_coord3为视频信号输出模块所输出的信号;
[0113]D、在3300?4400个的时钟周期内,读取RAM4中的数据写入DDR2SDRAM,如果视频4 为标清视频,写入 DDR2SDRAM 的行地址为{salcer_frame_sel4, I’ b0, y_coord4} + 270,如果
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1