发明内容
为了克服现有技术的不足,本发明的目的之一在于提供基于FPGA的视频帧率转换方法,其能够解决现有技术中对于每种视频帧率在转换时均需要不同的控制算法才能实现导致软件成本大、系统性能低下等问题。
本发明的目的之二在于提供基于FPGA的视频帧率转换装置,其能够解决现有技术中对于每种视频帧率在转换时均需要不同的控制算法才能实现导致软件成本大、系统性能低下等问题。
本发明的目的之三在于提供一种计算机可读存储介质,其能够解决现有技术中对于每种视频帧率在转换时均需要不同的控制算法才能实现导致软件成本大、系统性能低下等问题。
本发明的目的之一采用如下技术方案实现:
基于FPGA的视频帧率动态转换方法,所述视频帧率动态转换方法包括:
读写速度判断步骤:判断写数据的速度与读数据的速度的快慢,以及当写数据的速度慢于读数据的速度时,执行重读机制步骤;当写数据的速度快于读数据的速度时,执行重写机制步骤;
重读机制步骤:当检测到读场同步信号时,判断写指针是否处于下一帧数据的地址,若是,则从DDR缓存中读取当前帧数据;若否,则从DDR缓存中读取下一帧数据;
重写机制步骤:当检测到写场同步信号时,判断读指针是否处于下一帧数据的地址,若是,则将数据重新写入到DDR缓存的当前帧数据的地址中;若否,则将数据写入到DDR缓存的下一帧数据的地址中。
进一步地,所述读写速度判断步骤中判断写数据的速度与读数据的速度的快慢具体根据写入一帧数据的时间与读取一帧数据的时间的大小判断得出。
进一步地,所述读写速度判断步骤具体包括:
写入一帧数据计算步骤:获取写入相邻两帧数据时的写场同步信号并根据两个写读场同步信号的获取时间计算得出写入一帧数据的时间;
读取一帧数据计算步骤:获取读取相邻两帧数据时的读场同步信号并根据两个读场同步信号的获取时间计算得出读取一帧数据的时间;
比较步骤:判断写入一帧数据的时间是否大于读取一帧数据的时间,若是,则写数据的速度慢于读数据的速度,执行重读机制步骤;若否,则写数据的速度快于读数据的速度,执行重写机制步骤。
进一步地,所述重读机制步骤中:当写指针处于下一帧数据的地址时,将读指针不变,读地址指向当前帧数据的地址开头并从DDR缓存中读取对应视频数据并显示;当写指针未处于下一帧数据的地址时,读指针+1,读地址指向下一帧数据的地址开头并从DDR缓存中读取到对应视频数据并显示。
进一步地,所述重写机制步骤中:当读指针处于下一帧数据的地址时,将写指针不变,写地址指向当前帧数据的地址开头并将对应视频数据写入到DDR缓存中;当读指针未处于下一帧数据的地址时,将写指针+1,写地址指向下一帧数据的地址开头并将对应视频数据写入到DDR缓存中。
进一步地,所述重读机制步骤还包括:写数据步骤:当检测到写场同步信号时,将写指针+1,写地址指向下一帧数据的地址开头并将对应视频数据写入到DDR缓存中。
进一步地,所述重写机制步骤还包括:读数据步骤:当检测到读场同步信号时,将读指针+1,读地址指向下一帧数据的地址开头并从DDR缓存中读取对应视频数据后显示。
进一步地,所述DDR缓存的存储空间至少包括3帧视频数据的存储空间。
本发明的目的之二采用如下技术方案实现:
基于FPGA的视频帧率动态转换装置,包括存储器和处理器,所述存储器上存储有在处理器上运行的视频帧率动态转换程序,所述视频帧率动态转换程序为计算机程序,所述处理器执行所述视频帧率动态转换程序时实现如本发明的目的之一采用的基于FPGA的视频帧率动态转换方法的步骤。
本发明的目的之三采用如下技术方案实现:
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序为视频帧率动态转换程序,所述视频帧率动态转换程序被处理器执行时实现如本发明的目的之一采用的基于FPGA的视频帧率动态转换方法的步骤。
相比现有技术,本发明的有益效果在于:
本发明在进行视频帧率转换时,通过利用FPGA读写DDR地址的控制,结合DDR缓存可实现任意视频帧率的转换,从而保证读写速度不匹配时保证读写数据的正确性,同时避免显示画面撕裂或闪烁、或者丢弃数据等,不需额外的视频格式转换工具,以解决现有技术中针对每个视频帧率都需要制定一套对应的控制算法才能实现数据的正确读写的问题。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
实施例一
本发明通过基于FPGA读写DDR地址的控制即可实现任意视频帧率的动态变换,既可以实现高帧率输入存储和低帧率输出显示的适配,也可以实现低帧率输入存储和高帧率输出显示的适配,解决了视频的帧读取与帧写入的帧率不匹配时的帧率的动态转换,本发明可适用于任意不同帧率的变换需求,也可应用在多路视频画面组合显示时的帧率适配,而不需要额外的视频格式转换处理。
本发明提供一种优选的实施例,基于FPGA的视频帧率动态转换方法,如图1所示,包括以下步骤:
步骤S1、获取并判断写数据的速度和读数据的速度的快慢,以及当写数据的速度慢于读数据的速度时,执行步骤S21;当写数据的速度快于读数据的速度时,执行步骤S31。
其中,写数据的速度和读数据的速度是可以体现视频写数据帧率和读数据帧率的。
为了实现视频折率的转换,首先需要得出显示数据的帧率与输入数据的帧率的大小,也即读写数据的速度快慢。如果输入的帧率比输出显示的帧率大,比如输入60帧/秒、输出显示30帧/秒,这时候写入的数据比读出的数据快、帧数更多,那么就要考虑丢弃多余的部分(不要写入存储或者覆盖写入,本方案用覆盖写入的办法),如果不丢弃的话会造成写数据覆盖正在读的数据;如果输入的帧率比输出显示的帧率小,比如输入30帧/秒,输出显示60帧/秒,这时候写入的数据比读出的数据慢、帧数少,那么就要考虑以已存储的数据来重复显示,否则读数据会读到正在写入的数据(一个完整的帧尚未完成),造成显示画面撕裂或闪烁。因此,本发明在当写数据的速度慢于读数据的速度时,在读数据时,当写数据正在写入一帧数据时,并不会读取新的帧数据,而是重新读取前一帧数据,避免造成显示画面的撕裂或闪烁。相反,当写数据的速度快于读数据的速度时,在写数据时,判断读数据是否正在读取一帧数据,若是,则将数据覆盖掉之前的数据重新写入。
同时,为了保证读写数据的正确性,本发明还采用DDR缓存来缓存图像。并且该DDR在缓存视频数据时,需要至少能够缓存3帧以上的视频数据。
另外,在使用DDR缓存图像时,需要遵循读指针和写指针不能同时处在同一帧的地址空间内的原则,以防止当前正在读的帧数据被写入覆盖或者读取出来还没有完整写入的帧数据,造成显示出来的画面有撕裂或跳动。
步骤S21、当检测到读场同步信号时,判断写指针是否处于下一帧数据的地址,若是,则执行步骤S22;若否,则执行步骤S23。
步骤S22、从DDR缓存中读取当前帧数据。
具体地,步骤S22还包括:将读指针不变,读地址指向当前帧数据的地址开头并从DDR缓存中读取对应视频数据并显示。
步骤S23、从DDR缓存中读取下一帧数据。
具体地,步骤S23还包括:读指针+1,读地址指向下一帧数据的地址开头并从DDR缓存中读取到对应视频数据并显示。
当写数据的速度慢于读数据的速度时,在读数据时,需要在新的一帧图像还未完成存储之前,重新读取上一帧的图像来进行显示,也即进入重读机制。
此时,写入的数据是不受读出的数据影响的,读出的数据要迁就于写数据的地址。比如在写入30帧/秒、读出为60帧/秒的情况下,在一秒钟内写入的数据帧为第1,2,3,4,5,6,......,30帧,读出的数据为1,1,2,2,3,3,4,4,5,5,6,6,......,30,30帧。写入的数据写完第1帧,然后正在写第2帧的时候,读数据不能去读这个未完成写入的第2帧,所以只能重复再读一次第1帧。
进一步地,步骤S21还包括、当未检测到读场同步信号时,读指针不变,继续从DDR缓存中读取对应视频数据。同样地,为了避免造成画面显示中断,若未有新的读场同步信号(也即,读取下一帧数据的信号)时,继续读取当前帧数据即可。
另外,在写数据的速度慢于读数据的速度时,在写数据时,由于写数据的速度较慢,因此,写数据在写入一帧数据时,读数据必然已经操作完成,因此,读操作并不会对写操作造成任何影响,因此,按照正常写入数据即可,也即,当检测到写场同步信号时,将写指针+1,写地址指向下一帧数据的地址开头并将对应视频数据写入到DDR缓存中;当未检测到写场同步信号时,写指针不变,写地址指向当前帧数据的地址开头。
优选地,步骤S31、当检测到写场同步信号时,判断读指针是否处于下一帧数据的地址,若是,则执行步骤S32;若否,则执行步骤S33。
步骤S32、将数据重新写入到DDR缓存的当前帧数据的地址中。
具体地,步骤S32还包括:将写指针不变,写地址指向当前帧数据的地址开头并将对应视频数据写入到DDR缓存中。
步骤S33、将数据写入到DDR缓存的下一帧数据的地址中。
具体地,步骤S33还包括:将写指针+1,写地址指向下一帧数据的地址开头并将对应视频数据写入到DDR缓存中。
同理,当写数据的速度快于读数据的速度时,当写数据时,如果读指针处于下一帧的地址区间,则说明当前正在读取下一帧数据,为了避免在读数据未完成之前将数据覆盖掉,则需要将写数据地址回退到当前帧地址的开头,将下一帧数据覆盖到当期帧地址的区间内,也即重新写入机制。
进一步地,步骤S31还包括、当未检测到写场同步信号时,写指针不变,将写地址指向当前帧的地址开头,将当前帧数据存储到DDR缓存中即可。
同理,由于写数据的速度快于读数据的速度,对于读数据时,由于读数据的速度较慢,因此,在读数据读取一帧数据的同时,写数据必然已经操作完成,因此,写数据并不会对读数据造成任何而影响,因此,按照正常读取数据即可。也即,当检测到读场同步信号时,将读指针+1,读地址指向下一帧数据的地址开头并从DDR缓存中读取对应视频数据后显示;当未检测到读场同步信号时,读指针不变。
优选地,步骤S1中判断写数据的速度与读数据的速度快慢时具体是根据写入一帧数据的时间与读取一帧数据的时间的大小判断得出。
更为优选地,如图2所示,步骤S1还包括:
步骤S11、获取写入相邻两帧数据时的写场同步信号并根据两个写读场同步信号的获取时间计算得出写入一帧数据的时间。
由于视频的读写时同时进行的,在每次读取一帧数据或写入一帧数据开始之前,系统均会先生成对应的场同步信号。其中,场同步信号(Vertical synchronization)脉冲代表一帧数据信号的到来。
因此,在计算写入一帧数据的时间值时,可通过检测相邻两帧的写场同步信号的获取时间计算得出,也即写场同步信号的生成时间。本实施例中写入一帧数据的时间值记为Tin。
步骤S12、获取相邻两帧的读场同步信号,进而根据相邻两帧的读场同步信号的到达时间计算得出读取一帧数据的时间值。
同时,在计算读取一帧数据的时间值时,通过检测相邻两帧的读场同步信号的获取时间计算得出。本实施例中将读取一帧数据的时间值记为Tout。
步骤S13、判断写入一帧数据的时间是否大于读取一帧数据的时间,若是,则写数据的速度慢于读数据的速度,执行步骤S21;若否,则写数据的速度快于读数据的速度,执行步骤S31。
由于视频的帧率不同时,导致读取一帧数据的时间值与写入一帧数据的时间值有偏差,很容易导致读写数据不匹配,进而导致写入数据错误或读取数据错误的问题。本发明通过判断写入一帧数据的时间值与读取一帧数据的时间值的大小来判断读数据与写数据的快慢,进而根据比对结果采取不同的手段以避免读写错误。
实施例二
基于实施例一,本发明提供一种基于FPGA的视频帧率动态转换装置,包括存储器和处理器,所述存储器上存储有在处理器上运行的视频帧率动态转换程序,所述视频帧率动态转换程序为计算机程序,所述处理器执行所述视频帧率动态转换程序时实现以下步骤:
读写速度判断步骤:判断写数据的速度与读数据的速度的快慢,以及当写数据的速度慢于读数据的速度时,执行重读机制步骤;当写数据的速度快于读数据的速度时,执行重写机制步骤;
重读机制步骤:当检测到读场同步信号时,判断写指针是否处于下一帧数据的地址,若是,则从DDR缓存中读取当前帧数据;若否,则从DDR缓存中读取下一帧数据;
重写机制步骤:当检测到写场同步信号时,判断读指针是否处于下一帧数据的地址,若是,则将数据重新写入到DDR缓存的当前帧数据的地址中;若否,则将数据写入到DDR缓存的下一帧数据的地址中。
进一步地,所述读写速度判断步骤中判断写数据的速度与读数据的速度的快慢具体根据写入一帧数据的时间与读取一帧数据的时间的大小判断得出。
进一步地,所述读写速度判断步骤具体包括:
写入一帧数据计算步骤:获取写入相邻两帧数据时的写场同步信号并根据两个写读场同步信号的获取时间计算得出写入一帧数据的时间;
读取一帧数据计算步骤:获取读取相邻两帧数据时的读场同步信号并根据两个读场同步信号的获取时间计算得出读取一帧数据的时间;
比较步骤:判断写入一帧数据的时间是否大于读取一帧数据的时间,若是,则写数据的速度慢于读数据的速度,执行重读机制步骤;若否,则写数据的速度快于读数据的速度,执行重写机制步骤。
进一步地,所述重读机制步骤中:当写指针处于下一帧数据的地址时,将读指针不变,读地址指向当前帧数据的地址开头并从DDR缓存中读取对应视频数据并显示;当写指针未处于下一帧数据的地址时,读指针+1,读地址指向下一帧数据的地址开头并从DDR缓存中读取到对应视频数据并显示。
进一步地,所述重写机制步骤中:当读指针处于下一帧数据的地址时,将写指针不变,写地址指向当前帧数据的地址开头并将对应视频数据写入到DDR缓存中;当读指针未处于下一帧数据的地址时,将写指针+1,写地址指向下一帧数据的地址开头并将对应视频数据写入到DDR缓存中。
进一步地,所述重读机制步骤还包括:写数据步骤:当检测到写场同步信号时,将写指针+1,写地址指向下一帧数据的地址开头并将对应视频数据写入到DDR缓存中。
进一步地,所述重写机制步骤还包括:读数据步骤:当检测到读场同步信号时,将读指针+1,读地址指向下一帧数据的地址开头并从DDR缓存中读取对应视频数据后显示。
进一步地,所述DDR缓存的存储空间至少包括3帧视频数据的存储空间。
实施例三
一种存储介质,所述存储介质为计算机可读存储介质,其上存储有计算机程序,所述计算机程序为视频帧率动态转换程序,所述视频帧率动态转换程序被处理器执行时实现以下步骤:
读写速度判断步骤:判断写数据的速度与读数据的速度的快慢,以及当写数据的速度慢于读数据的速度时,执行重读机制步骤;当写数据的速度快于读数据的速度时,执行重写机制步骤;
重读机制步骤:当检测到读场同步信号时,判断写指针是否处于下一帧数据的地址,若是,则从DDR缓存中读取当前帧数据;若否,则从DDR缓存中读取下一帧数据;
重写机制步骤:当检测到写场同步信号时,判断读指针是否处于下一帧数据的地址,若是,则将数据重新写入到DDR缓存的当前帧数据的地址中;若否,则将数据写入到DDR缓存的下一帧数据的地址中。
进一步地,所述读写速度判断步骤中判断写数据的速度与读数据的速度的快慢具体根据写入一帧数据的时间与读取一帧数据的时间的大小判断得出。
进一步地,所述读写速度判断步骤具体包括:
写入一帧数据计算步骤:获取写入相邻两帧数据时的写场同步信号并根据两个写读场同步信号的获取时间计算得出写入一帧数据的时间;
读取一帧数据计算步骤:获取读取相邻两帧数据时的读场同步信号并根据两个读场同步信号的获取时间计算得出读取一帧数据的时间;
比较步骤:判断写入一帧数据的时间是否大于读取一帧数据的时间,若是,则写数据的速度慢于读数据的速度,执行重读机制步骤;若否,则写数据的速度快于读数据的速度,执行重写机制步骤。
进一步地,所述重读机制步骤中:当写指针处于下一帧数据的地址时,将读指针不变,读地址指向当前帧数据的地址开头并从DDR缓存中读取对应视频数据并显示;当写指针未处于下一帧数据的地址时,读指针+1,读地址指向下一帧数据的地址开头并从DDR缓存中读取到对应视频数据并显示。
进一步地,所述重写机制步骤中:当读指针处于下一帧数据的地址时,将写指针不变,写地址指向当前帧数据的地址开头并将对应视频数据写入到DDR缓存中;当读指针未处于下一帧数据的地址时,将写指针+1,写地址指向下一帧数据的地址开头并将对应视频数据写入到DDR缓存中。
进一步地,所述重读机制步骤还包括:写数据步骤:当检测到写场同步信号时,将写指针+1,写地址指向下一帧数据的地址开头并将对应视频数据写入到DDR缓存中。
进一步地,所述重写机制步骤还包括:读数据步骤:当检测到读场同步信号时,将读指针+1,读地址指向下一帧数据的地址开头并从DDR缓存中读取对应视频数据后显示。
进一步地,所述DDR缓存的存储空间至少包括3帧视频数据的存储空间。
上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。