视频缓存、拼接与转换处理系统及方法与流程

文档序号:18073461发布日期:2019-07-03 04:02阅读:400来源:国知局
视频缓存、拼接与转换处理系统及方法与流程

本发明涉及视频处理,具体为视频缓存、拼接与转换处理系统及方法。



背景技术:

当今社会,视频对于人类社会来说简直不可缺少,那么就对视频的处理产生了多方面的要求。在不同的视频源(摄像头以及osd(onscreendisplay))输入的情况下,以其中一个视频源为背景,可选任意视频源作画中画源,以及需要在背景上显示的字符或其他标志(osd),需要将所有视频源按照指定要求进行缓存与拼接,方便人眼对视频图像中所显示的物体进行观察。

由于视频输出都是以高清视频的分辨率输出,所以如果在标清视频还未转变为高清视频时就将画中画和osd拼接进去的话,整幅图像再进行放大,那么画中画以及osd同时也会被放大,这样输出的图像就不是要求所规定的视频图像,画中画就变成了768*432分辨率的图像了,而osd就会因为超出了视频分辨率的范围而丢失大模块数据。



技术实现要素:

针对现有技术中存在的问题,本发明提供视频缓存、拼接与转换处理系统及方法,将不同视频源按照指定要求进行缓存与拼接。

本发明是通过以下技术方案来实现:

一种视频缓存、拼接与转换处理系统,包括:视频输入模块、视频缓存模块、视频标清转高清模块、视频拼接模块、视频高清转标清模块和视频输出模块;

视频输入模块,用于将三种不同的视频源数据进行模块缓存并传输到视频缓存模块;三种不同的视频源分别是背景、画中画以及osd;

视频缓存模块,用于将视频输入模块的三种不同的视频源数据及高清转标清视频源数据进行缓存或者将缓存的视频数据输出给后续视频处理模块;后续视频处理模块为视频标清转高清模块、视频拼接模块或者视频输出模块;

视频标清转高清模块,用于将视频缓存模块缓存的标清分辨率的背景视频源转变为高清分辨率的背景视频源,并输出给视频拼接模块;

视频拼接模块,用于将接收不同视频源的数据按照指定的规则进行拼接;

视频高清转标清模块,用于将视频拼接模块拼接好的高清视频数据转换为标清视频数据,形成高清转标清视频源;

视频输出模块,用于将视频拼接模块拼接好的高清视频或者高清转标清视频源输出。

一种视频缓存、拼接与转换处理方法,基于所述的系统,包括如下步骤:

步骤1,视频输入模块将三种不同的视频源数据进行模块缓存并传输到视频缓存模块;

步骤2,若背景为标清则视频缓存模块将视频源输出给视频标清转高清模块进行背景标清转高清操作,视频标清转高清模块完成背景标清转高清操作后将视频源输出给视频拼接模块;若背景为高清则视频缓存模块将视频源输出给视频拼接模块;

步骤3,视频拼接模块将不同的视频源数据进行指定的拼接;

步骤4,视频拼接模块拼接完成后,将拼接好的高清视频输出给视频输出模块进行对外高清视频输出;同时,将拼接好的高清视频输出给视频高清转标清模块,视频高清转标清模块进行高清转标清操作形成高清转标清视频源并输出给视频缓存模块进行缓存,然后视频缓存模块再输出给视频输出模块进行对外标清视频输出。

优选的,当不需要显示画中画或者osd时,视频拼接模块在完整拼接的最后一帧之后不再拼接数据,同时反馈给视频缓存模块一个已完整拼接完成的信号,视频缓存模块将画中画或者osd向ddr中写入时的写地址和读地址变为初始地址。

优选的,步骤1中,当背景为高清时按照顺序逐行写入视频缓存模块;当背景为标清时将奇数行空一行将背景写入视频缓存模块,偶数行再按照顺序将背景补入奇数行的空行中。

优选的,步骤4中,高清转标清视频源在写入视频缓存模块时进行行计数,奇数行按顺序写入一帧数据的上半帧缓存区,偶数行按顺序写入下半帧缓存区。

优选的,步骤2中,对视频缓存模块输入和输出的视频数据以帧为单位进行计数,计输入的帧数为i帧,输出的帧数为j,视频缓存模块保持的有效视频数据为n帧,那么n=i-j;设定视频缓存模块应保持的数据量范围为m1~m2帧,然后对n进行判断,如果n小于m1,在读出数据时将当前读出的一帧数据重复输出一次,重复此操作直至n在m1~m2的范围内;如果n>m2,在读出数据时进行帧数跳跃,读完当前这一帧之后,直接跳过下一帧,读下下帧数据,重复此操作直至n在m1~m2的范围内;其中,i、j、n、m1和m2均为自然数,且m1<m2。

优选的,步骤1中,视频输入模块通过每6帧数据丢1帧数据的方法进行每秒30帧变为每秒25帧的数据输入控制;步骤2中,视频缓存模块将每5帧视频数据的其中一帧进行重复输出,以进行每秒25帧输入转每秒30帧输出的控制。

优选的,将每5帧视频数据的第一帧进行重复输出。

优选的,步骤4中,当视频拼接模块的高清输出为每秒30帧时,视频高清转标清模块进行每秒30帧转每秒25帧的操作。

优选的,步骤4中,视频输出模块将经过视频拼接的高清视频数据按照bt.656高清标准输出,然后投放到高清显示屏上进行显示;或者,视频输出模块将从视频缓存模块中读出的标清视频数据按照bt.656标清标准输出,然后投放到标清显示屏进行显示。

与现有技术相比,本发明具有以下有益的技术效果:

本发明通过设置视频标清转高清模块,在视频数据进行拼接之前,通过视频标清转高清模块将标清背景转化成高清以后再将其与画中画与osd进行拼接,这样就可以避免画中画被放大以及osd被放大且数据丢失,保证视频能高质量输出。

进一步的,用户可以选择画中画和osd的显示或者关闭,那么在数据拼接时由于数据都是以帧为单位进行缓存,所以需要在显示画中画或者osd时,需要将三种不同的视频源的帧头对齐,这样才能完成指定要求的视频拼接;而当用户不需要显示画中画或者osd时,那么就需要将完整的一帧数据拼接完成后,不再进行画中画或者osd与背景的视频的拼接操作;由于不进行画中画或者osd的拼接操作,所以在下次拼接操作开始前将视频缓存模块中的画中画或者osd的数据进行一次清空操作,防止下次拼接之后显示发生视频的不及时性。

进一步的,视频输入模块的三种视频源,背景为高清逐行输入或者标清隔行输入,画中画无论高清标清都是逐行输入,osd也是逐行输入。由于这三种视频源最后要以高清逐行形式输出,所以在缓存时的处理方式也是不同的。隔行输入逐行输出时就需要在读写时进行相应的转换,使其在缓存时就达到逐行的缓存,然后读取时直接进行顺序逐行读出就可以了。

进一步的,本发明可以完美的控制视频输入与输出的同步性,又可以保持输出时不会发生数据错误,解决了由于视频输入源与视频输出源的时钟并非同一时钟而导致的视频输出会在长时间工作之后产生的视频输出不稳定因素。

进一步的,由于进行数据缓存时,ddr需要分时复用,所以要将不同的视频数据进行小数据量的缓存,以便于数据缓存的操作,这就需要每秒30帧转每秒25帧的操作,通过每6帧数据丢1帧数据的操作完成,简单,而且效率高,同时也保证了视频的流畅性以及稳定性。

进一步的,视频缓存模块在进行25帧转30帧的操作时,由于要保证数据量的及时性所以就每次将5帧数据的第一帧进行重复读取,这样就不会发生视频图像卡顿的情况。

附图说明

图1为本发明视频缓存、拼接与转换处理流程示意图;

图2为本发明视频输入模块操作流程图;

图3为本发明视频缓存模块操作流程图;

图4为本发明视频标清转高清模块操作流程图;

图5为本发明视频拼接模块操作流程图;

图6为本发明视频高清转标清模块操作流程图;

图7为本发明视频输出模块操作流程图。

具体实施方式

下面结合附图对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。

本发明所述的视频缓存、拼接与转换处理系统,包括:视频输入模块、视频缓存模块、视频标清转高清模块、视频拼接模块、视频高清转标清模块和视频输出模块。

标清始终为每秒25帧输出;高清为每秒25帧或者每秒30帧输出。

基于该系统的视频缓存、拼接与转换处理方法,整体流程如图1所示,包括如下步骤:

步骤1,视频输入模块将三种不同的视频源数据进行模块缓存并传输到视频缓存模块;

步骤2,若背景为标清则视频缓存模块将三种不同的视频源输出给视频标清转高清模块进行背景标清转高清操作,视频标清转高清模块完成背景标清转高清操作后将三种不同的视频源输出给视频拼接模块;若背景为高清则视频缓存模块将三种不同的视频源输出给视频拼接模块;

步骤3,视频拼接模块将三种不同的视频源数据进行指定的拼接;

步骤4,视频拼接模块拼接完成后,将拼接好的高清视频输出给视频输出模块进行对外高清视频输出;或者,将拼接好的高清视频输出给视频高清转标清模块,视频高清转标清模块进行高清转标清操作形成高清转标清视频源并输出给视频缓存模块进行缓存,然后视频缓存模块再输出给视频输出模块进行对外标清视频输出。

以下对各个模块进行说明。

1.视频输入模块

如图2所示,视频输入模块将三种不同的视频源数据进行模块缓存然后将其传输到视频缓存模块,并且视频输入模块也会控制每秒30帧变为每秒25帧时的数据输入控制。三种不同的视频源分别是背景、画中画以及osd,背景和画中画是从摄像头所拍摄的视频,它们的数据可以是相同的摄像头的视频也可以是不同的摄像头所拍下的视频,只是两者的分辨率不相同,背景的分辨率为高清1920*1080的输入、标清640*512的输入,画中画无论是高清还是标清都是384*216的分辨率;osd始终按照1920*1080的分辨率输入。

由于进行数据缓存时,ddr需要分时复用,所以要将不同的视频数据进行小数据量的缓存,以便于数据缓存的操作;由于会发生每秒30帧转每秒25帧的操作,所以当进行此操作时需要每6帧数据丢1帧数据,这样就完成了每秒30帧转每秒25帧的操作。这样的操作非常简单,而且效率也很高,同时也保证了视频的流畅性以及稳定性。

具体操作如下图,摄像头的数量可以由设计条件及要求定义,而且视频源的来源也并不一定只来自于摄像头这一种来源。

2.视频缓存模块

如图3所示,视频缓存模块将视频输入模块的不同的视频源数据及高清转标清视频源进行缓存或者将ddr中缓存的视频数据输出给后续视频处理模块;后续视频处理模块为视频标清转高清模块、视频拼接模块或者视频输出模块;并且还会进行每秒25帧转变为每秒30帧的输出速率控制以及高清转标清之后的标清数据直接送往视频输出模块。

视频缓存模块完成了视频输入模块三种不同源以及高清转标清视频源共四种视频源的缓存,然后将其按照不同要求输出。

视频输入模块的三种视频源,背景为高清逐行输入或者标清隔行输入,画中画无论高清标清都是逐行输入,osd也是逐行输入。由于这三种视频源最后要以高清逐行形式输出,所以在缓存时的处理方式也是不同的。逐行输入逐行输出就只需要按照顺序读写就可以;而隔行输入逐行输出时就需要在读写时进行相应的转换,比如在写入缓存时将奇数行空一行将其写入,偶数行在按照顺序将其补入奇数行的空行中,使其在缓存时就达到逐行的缓存,然后读取时直接进行顺序逐行读出就可以了。

高清转标清视频源是逐行输入视频缓存模块的,由于标清输出需要将逐行输入的高清转标清视频源转换成隔行输出的标清数据,所以在缓存时写入缓存的时候进行行计数,奇数行按顺序写入一帧数据的上半帧缓存区,偶数行按顺序写入下半帧缓存区,这样读的时候按照顺序进行逐行读取的时候就完成了逐行转隔行的操作。

如果高清视频输出需要输入每秒30帧转每秒25帧或30帧输出,或者输入每秒25帧转每秒25帧或者30帧输出,由于每秒30帧转25帧已经在视频输入模块进行了处理,25帧转25帧以及30帧转30帧不需要进行处理,所以每秒25帧输入转每秒30帧输出就需要在视频缓存模块进行操作。由于背景和画中画两个视频源会发生25帧转30帧的操作,所以需要进行转换操作,就是每5帧视频数据输入就将其在读取时重新将其中一帧数据进行反复读取一次就可以完成25帧转30帧的操作,由于要保证数据量的及时性所以就每次将5帧数据的第一帧进行重复读取,这样就不会发生视频图像卡顿的情况。

当用户需要将画中画或者osd不再显示在屏幕当中时,数据拼接模块会在完整拼接的最后一帧之后不再拼接数据,同时会反馈一个信号,告知缓存模块已完整拼接完成,这时缓存模块中画中画或者osd的部分的旧数据残留,根据这个信号将画中画或者osd往ddr中写入时的写地址和读地址变为初始地址,这样在下次需要显示画中画或者osd时,就会重新开始读写操作,而且也会将旧数据完全覆盖,输出的拼接完成的视频不会受旧数据的影响。

经过多次测试,发现了一些问题,那就是由于不同视频源的视频输入时钟是由摄像头提供的,而输出时是由电路板上的晶振提供的时钟,由于这两种时钟不会完全同步,肯定会产生时间上的误差,在长时间的工作之后,如果输入的时钟相对于输出的时钟快,那么就会将视频缓存模块的空间写满,那么输出就会产生数据错误;若视频输入时钟相对于视频输出时钟慢,那么在经过一定时间之后,输入的数据就会被读空,中间产生一个较大的空当,使得输出的视频产生顿挫。所以为了解决这个问题,对输入和输出的视频数据以帧为单位进行计数,输入的帧数为i(i为自然数)帧,输出的帧数为j(j为自然数),视频缓存模块始终保持的有效视频数据为n(n为自然数)帧,那么n=i-j;从n这个数据就可以判断出输入时钟相对于输出时钟来说是慢还是较快的;然后为了使其不会产生上述的情况,那么就需要先设定一个视频缓存模块想保持的数据量的范围m1~m2(m1和m2为自然数且m1<m2)帧,然后对n进行判断,如果n小于m1,就表明输入的视频时钟相对于输出的视频时钟较慢,所以就需要在读出的时候,将当前读出的一帧数据重复输出一次,重复这样的操作,n就会被逐渐拉入m1~m2的范围内;如果n>m2,那么就说明输入视频时钟相对于输出视频时钟较快,那么就需要在读出数据时进行帧数跳跃,读完当前这一帧之后,直接跳过下一帧,读下下帧数据,重复此等操作,n就会被逐渐拉入m1~m2的范围内;这样就可以完美的控制视频输入与输出的同步性,又可以保持输出时不会发生数据错误。但这样做的前提就是牺牲了视频的即时性,不能将视频数据随进随出,但是缓存量可以进行调节,所以视频的延迟性也是可以调节的,也就可以做到肉眼无法分辨,虽然有延时,但这样却大大提高了视频的稳定性,这个是相当重要的。

3.标清转高清模块

如图4所示,视频标清转高清模块视频缓存模块缓存的标清分辨率的背景视频源转变为高清分辨率的背景视频源,并与另外两种视频源数据一起输出给视频拼接模块;就是将标清视频分辨率的数据进行放大,将其扩充到高清视频分辨率;比如标清输入的分辨率为640*512,需要将其放大两倍至1280*1024的分辨率,然后由于高清输出为1920*1080的分辨率,所以需要将放大后的视频数据置于图像中间,然后在其图像周围进行黑色填充使其变为高清视频的分辨率以供后续处理和输出。

视频图像放大两倍时,就是先将一行数据中每个像素点进行复制输出以后,还要将这一行数据重新复制一份进行输出,然后才进行下一行的放大操作,循环往复就将视频进行了放大。

4.视频拼接模块

如图5所示,视频拼接模块就是按照指令要求将三种不同视频源的数据按照指定的规则进行拼接,将其变为所需要的展现形式,使人眼更容易进行观测。

三种不同的视频源分别是背景、画中画以及osd,背景和画中画是从摄像头所拍摄的视频,它们的数据可以是相同的摄像头的视频也可以是不同的摄像头所拍下的视频,只是它俩的分辨率不相同,背景的分辨率为高清1920*1080的输入,标清640*512的输入,画中画无论是高清还是标清都是384*216的分辨率;osd始终按照1920*1080的分辨率输入。画中画拼接到背景的右上角,osd拼接到背景的指定位置。

由于视频输出都是以高清视频的分辨率输出,所以如果在标清视频还未转变为高清视频时就将画中画和osd拼接进去的话,整幅图像再进行放大,那么画中画以及osd同时也会被放大,这样输出的图像就不是要求所规定的视频图像,画中画就变成了768*432分辨率的图像了,而osd就会因为超出了视频分辨率的范围而丢失大模块数据。所以,在视频数据进行拼接的时候,需要将背景确定转化成高清以后再将其与画中画与osd进行拼接,拼接的优先级也是画中画为最高级,接下来是osd,最后为背景,因为画中画和osd要在背景之上进行显示,如果优先级没有背景高的话拼接完成后,背景会将其余两种视频源覆盖掉而得不到显示。

在进行视频拼接的时候,画中画就是将背景的右上角的384*216的像素点全部更换为画中画的数据,这样画中画就替换掉了背景,一直保持在右上角显示;osd就是将背景中指定位置的像素点更改为指定的颜色和亮度。

但是画中画和osd都是用户可选择性的显示的,用户可以随时选择显示或者不显示它们,由于用户选择时与视频拼接的时序不在同一个时钟域,比如,当画中画或osd正在拼接时,突然用户选择关闭,那么其余的数据就会影响下次视频拼接的数据,所以当选择关闭时,视频拼接一定要将这一帧视频图像拼接完成之后,下一帧视频图像拼接时不再进行背景与其的拼接,这样就会防止下次视频拼接的错误;如果用户需要从不显示画中画或者osd变为显示画中画或者osd时,那么拼接会在这时将缓存模块的画中画或者osd数据读出,等到拼接模块中的这一帧数据完全拼接之后,再将画中画或者osd进行拼接。

5.视频高清转标清模块

视频高清转标清模块就是将已经拼接好的高清视频数据转换为标清数据。

如图6所示,视频高清转标清模块就是将已经拼接好的高清视频数据进行一定的抽取转换为标清视频数据进行输出;比如高清视频为1920*1080的分辨率,而标清视频为720*576的分辨率,那么就需要将高清视频进行16抽6的数据抽取将其变为720*405的分辨率,然后由于抽取完成后的视频数据分辨率达不到要求,所以将其上下共171行的数据全部填充黑色,使得抽取完的视频数据位于正中心,这样就使其成为了720*576的视频分辨率。同时当高清输出为每秒30帧时,那么就需要进行30帧转25帧的操作,操作与视频输入模块中的转换操作相同。

6.视频输出模块

视频输出模块就是将视频拼接模块拼接好的高清视频或者高清转标清视频源输出。

如图7所示。(1)将从视频缓存模块中读出的标清视频数据按照bt.656标清标准直接进行输出,然后将其投放到标清显示屏进行显示;(2)将经过视频拼接的高清视频数据按照bt.656高清标准输出,然后将其投放的高清显示屏上进行显示。

本发明鉴于人类对人类视觉感官上对视频所需的要求越来越高,所以视频的分辨率以及帧速都在不断进行提高,而本发明就可以适应每秒25帧与30帧的相互切换,无论是输入25帧向输出30真帧转换还是输入30帧向输出25帧转换亦或是输入与输出帧速相同,都可以将视频稳定输出;并且还可以将标清的视频输入转换为高清的输出,提高了视频的分辨率,将标清视频里更多的细节展现在用户眼前;并且解决了由于视频输入源与视频输出源的时钟并非同一时钟而导致的视频输出会在长时间工作之后产生的视频输出不稳定因素,这样就保证了在视频输出稳定的情况下,可以根据用户需求进行帧速切换,以提供更好的视觉感受。

由于输出是一个高清输出,一个标清输出。所以会产生需要转换分辨率的问题,而且进行数据拼接的时候就会需要一定的控制将其按照指定要求进行输出。本发明说明基于xilinx的fpga芯片的视频处理方式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1