一种视频压缩方法、装置、设备及计算机可读存储介质转让专利

申请号 : CN202110153969.2

文献号 : CN112929672B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张贞雷刘同强周玉龙邹晓峰王贤坤

申请人 : 山东云海国创云计算装备产业创新中心有限公司

摘要 :

本发明公开了一种视频压缩方法、装置、设备及计算机可读存储介质,在预分配给待压缩视频数据的缓存空间的限制下,一次性读取超出视频压缩IP的单次输入数据量的数据量,将超出部分存入缓存空间,而依次将单次读取操作获得的数据输入视频压缩IP,从而相较于现有视频压缩方案一来说减少了访问带外存储器的次数,相较于现有视频压缩方案二来说避免占用过多的缓存空间,达到了内存带宽和缓存资源的平衡,从而有效实现了既降低了对内存带宽的要求,避免了待压缩视频数据与SoC芯片其他软件对带外存储接口的竞争,又避免了使用大量的珍贵缓存资源,既保证了视频压缩质量又节约了芯片成本。

权利要求 :

1.一种视频压缩方法,其特征在于,包括:

将YUV格式的待压缩视频数据存入带外存储器;

根据视频压缩IP核针对所述待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量;所述单次读取操作的数据量小于预分配给所述待压缩视频数据的缓存空间的大小;

对当前帧所述待压缩视频数据,每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核,并将所述单次读取操作中无法同时输入所述视频压缩IP核的数据存入所述缓存空间,直至完成当前帧的所述待压缩视频数据的压缩处理;

若未完成所有帧所述待压缩视频数据的压缩处理,则以下一帧所述待压缩视频数据为当前帧所述待压缩视频数据,返回所述对当前帧所述待压缩视频数据,每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核,并将所述单次读取操作中无法同时输入所述视频压缩IP核的数据存入所述缓存空间,直至完成当前帧的所述待压缩视频数据的压缩处理的步骤。

2.根据权利要求1所述的视频压缩方法,其特征在于,所述单次读取操作的数据量为与所述输入规则中单次输入的像素量对应的单位亮度数据、单位色度数据和单位浓度数据;

相应的,所述每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核,并将所述单次读取操作中无法同时输入所述视频压缩IP核的数据存入所述缓存空间,具体为:每执行一次所述单次读取操作后,将所述单位亮度数据输入所述视频压缩IP核,并将所述单位色度数据和所述单位浓度数据存入所述缓存空间,在完成所述单位亮度数据的输入后再依次将所述单位色度数据和所述单位浓度数据输入所述视频压缩IP核。

3.根据权利要求2所述的视频压缩方法,其特征在于,所述将所述单位色度数据和所述单位浓度数据存入所述缓存空间,具体包括:根据所述目标YUV压缩模式对所述单位色度数据和所述单位浓度数据进行筛选;

将筛选后的所述单位色度数据和筛选后的所述单位浓度数据存入所述缓存空间。

4.根据权利要求3所述的视频压缩方法,其特征在于,当所述目标YUV压缩模式为YUV420压缩模式时,所述根据所述目标YUV压缩模式对所述单位色度数据和所述单位浓度数据进行筛选,具体为:筛选得到所述单位色度数据中偶数行偶数列的数据、奇数行奇数列的数据、奇数行偶数列的数据和偶数行奇数列的数据中的一种数据,以及所述单位浓度数据中的对应数据。

5.根据权利要求1所述的视频压缩方法,其特征在于,执行所述单次读取操作,具体包括:根据所述待压缩视频数据的分辨率以及所述单次读取操作的数据量,划分对当前帧所述待压缩视频数据的各所述单次读取操作的目标读取地址;

依据所述单次读取操作的目标读取地址生成并执行带外存储读取命令。

6.根据权利要求1所述的视频压缩方法,其特征在于,在执行所述单次读取操作之前,还包括:若所述待压缩视频数据不满足所述待压缩视频数据的分辨率的行数目是所述单次读取操作的数据量的行数目的整数倍且所述待压缩视频数据的分辨率的列数目是所述单次读取操作的数据量的列数目的整数倍的条件,则调整所述待压缩视频数据的分辨率以满足所述条件。

7.根据权利要求1所述的视频压缩方法,其特征在于,还包括:

根据SoC芯片的使用情况调整预分配给所述待压缩视频数据的缓存空间的大小。

8.一种视频压缩装置,其特征在于,包括:

存储单元,用于将YUV格式的待压缩视频数据存入带外存储器;

确定单元,用于根据视频压缩IP核针对所述待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量;所述单次读取操作的数据量小于预分配给所述待压缩视频数据的缓存空间的大小;

压缩单元,用于对当前帧所述待压缩视频数据,每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核,并将所述单次读取操作中无法同时输入所述视频压缩IP核的数据存入所述缓存空间,直至完成当前帧的所述待压缩视频数据的压缩处理;若未完成所有帧所述待压缩视频数据的压缩处理,则以下一帧所述待压缩视频数据为当前帧所述待压缩视频数据,返回所述对当前帧所述待压缩视频数据,每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核进行压缩处理,并将所述单次读取操作中无法同时压缩处理的数据存入所述缓存空间,直至完成当前帧的所述待压缩视频数据的压缩处理的步骤。

9.一种视频压缩设备,其特征在于,包括:

存储器,用于存储指令,所述指令包括权利要求1至7任意一项所述视频压缩方法的步骤;

处理器,用于执行所述指令。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述视频压缩方法的步骤。

说明书 :

一种视频压缩方法、装置、设备及计算机可读存储介质

技术领域

[0001] 本发明涉及数据压缩技术领域,特别是涉及一种视频压缩方法、装置、设备及计算机可读存储介质。

背景技术

[0002] 系统级芯片(System on Chip,简称Soc),为将微处理器、模拟IP核、数字IP核和存储器(或片外存储控制接口)集成在单一芯片上的,通常是客户定制的,或是面向特定用途的标准产品。
[0003] 视频压缩是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式的文件的方式。在传统的带视频压缩功能的SoC系统中进行视频压缩的方式通常有两种。现有视频压缩方案一:先将显卡输出的RGB格式(一种颜色编码方法,R:红色,G:绿色,B:蓝色)的视频数据经过色彩空间转换得到YUV格式(一种颜色编码方法,Y:亮度,U:色度,V:浓度)的视频数据,而后将YUV格式的视频数据存入带外存储器(通常为双倍速率同步动态随机存储器DDR),基于SoC芯片上进行视频压缩工作的视频压缩IP核(JPEG IP Core)的输入要求,需要先产生读亮度数据的地址,再产生读色度数据的地址,再产生读浓度数据的地址,而在带外存储器中,YUV数据是存放在一起的,因此相当于对一个带外存储器的地址需要读三次,这样将极大的增加内存访问的压力,对内存带宽的要求极高。与此同时SoC芯片中其他运行的软件也需要访问带外存储器,这就造成了对带外存储器的访问竞争,后果就是SoC芯片软件运行慢或视频源数据(显卡数据)不能及时被压缩,从而造成丢帧,很容易造成导致远端视频画面卡顿的现象。
[0004] 现有视频压缩方案二:将显卡输出的RGB格式的视频数据经过色彩空间转换得到YUV格式的视频数据后,不将YUV格式的视频数据存入带外存储器而是存入FIFO阵列,分别存储为Y_FIFO、U_FIFO和V_FIFO,再通过FIFO_CTRL子模块,依次读取Y_FIFO、U_FIFO和V_FIFO中的数据。由于视频数据是按行产生并输入FIFO阵列的,而视频压缩IP核要求按照数据块(Block)的形式输入数据,故在FIFO阵列中需要至少缓存数据块所在行的全部YUV数据。以YUV420压缩模式为例,每四个Y共用一组UV分量,则在压缩过程中需要依次将16*16格式的Y_BLOCK、8*8格式的U_BLOCK和8*8格式的V_BLOCK三个数据块输入视频压缩IP核,则需要缓存的亮度数据至少为16行,同理,还需要同时缓存对应的8行色度数据和8行浓度数据。以1920x1080分辨率为例,则需要缓存的亮度数据为1920*16=30KB,加上色度数据和浓度数据,共需缓存至少60KB的数据。这将占用大量的缓存资源,不仅大幅拉高了SoC芯片的成本,还将需要更多的芯片面积,对成本控制严格或芯片面积要求严格的场景是十分不合适的。
[0005] 因此,提供一种保证视频压缩质量又节约芯片成本的视频压缩方法,是本领域技术人员需要解决的技术问题。

发明内容

[0006] 本发明的目的是提供一种视频压缩方法、装置、设备及计算机可读存储介质,用于保证视频压缩质量并节约芯片成本。
[0007] 为解决上述技术问题,本发明提供一种视频压缩方法,包括:
[0008] 将YUV格式的待压缩视频数据存入带外存储器;
[0009] 根据视频压缩IP核针对所述待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量;所述单次读取操作的数据量小于预分配给所述待压缩视频数据的缓存空间的大小;
[0010] 对当前帧所述待压缩视频数据,每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核,并将所述单次读取操作中无法同时输入所述视频压缩IP核的数据存入所述缓存空间,直至完成当前帧的所述待压缩视频数据的压缩处理;
[0011] 若未完成所有帧所述待压缩视频数据的压缩处理,则以下一帧所述待压缩视频数据为当前帧所述待压缩视频数据,返回所述对当前帧所述待压缩视频数据,每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核,并将所述单次读取操作中无法同时输入所述视频压缩IP核的数据存入所述缓存空间,直至完成当前帧的所述待压缩视频数据的压缩处理的步骤。
[0012] 可选的,所述单次读取操作的数据量为与所述输入规则中单次输入的像素量对应的单位亮度数据、单位色度数据和单位浓度数据;
[0013] 相应的,所述每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核,并将所述单次读取操作中无法同时输入所述视频压缩IP核的数据存入所述缓存空间,具体为:
[0014] 每执行一次所述单次读取操作后,将所述单位亮度数据输入所述视频压缩IP核,并将所述单位色度数据和所述单位浓度数据存入所述缓存空间,在完成所述单位亮度数据的输入后再依次将所述单位色度数据和所述单位浓度数据输入所述视频压缩IP核。
[0015] 可选的,所述将所述单位色度数据和所述单位浓度数据存入所述缓存空间,具体包括:
[0016] 根据所述目标YUV压缩模式对所述单位色度数据和所述单位浓度数据进行筛选;
[0017] 将筛选后的所述单位色度数据和筛选后的所述单位浓度数据存入所述缓存空间。
[0018] 可选的,当所述目标YUV压缩模式为YUV420压缩模式时,所述根据所述目标YUV压缩模式对所述单位色度数据和所述单位浓度数据进行筛选,具体为:
[0019] 筛选得到所述单位色度数据中偶数行偶数列的数据、奇数行奇数列的数据、奇数行偶数列的数据和偶数行奇数列的数据中的一种数据,以及所述单位浓度数据中的对应数据。
[0020] 可选的,执行所述单次读取操作,具体包括:
[0021] 根据所述待压缩视频数据的分辨率以及所述单次读取操作的数据量,划分对当前帧所述待压缩视频数据的各所述单次读取操作的目标读取地址;
[0022] 依据所述单次读取操作的目标读取地址生成并执行带外存储读取命令。
[0023] 可选的,在执行所述单次读取操作之前,还包括:
[0024] 若所述待压缩视频数据不满足所述待压缩视频数据的分辨率的行数目是所述单次读取操作的数据量的行数目的整数倍且所述待压缩视频数据的分辨率的列数目是所述单次读取操作的数据量的列数目的整数倍的条件,则调整所述待压缩视频数据的分辨率以满足所述条件。
[0025] 可选的,还包括:
[0026] 根据SoC芯片的使用情况调整预分配给所述待压缩视频数据的缓存空间的大小。
[0027] 为解决上述技术问题,本发明还提供一种视频压缩装置,包括:
[0028] 存储单元,用于将YUV格式的待压缩视频数据存入带外存储器;
[0029] 确定单元,用于根据视频压缩IP核针对所述待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量;所述单次读取操作的数据量小于预分配给所述待压缩视频数据的缓存空间的大小;
[0030] 压缩单元,用于对当前帧所述待压缩视频数据,每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核,并将所述单次读取操作中无法同时输入所述视频压缩IP核的数据存入所述缓存空间,直至完成当前帧的所述待压缩视频数据的压缩处理;若未完成所有帧所述待压缩视频数据的压缩处理,则以下一帧所述待压缩视频数据为当前帧所述待压缩视频数据,返回所述对当前帧所述待压缩视频数据,每执行一次所述单次读取操作后,按所述输入规则依次将所述单次读取操作获得的数据输入所述视频压缩IP核进行压缩处理,并将所述单次读取操作中无法同时压缩处理的数据存入所述缓存空间,直至完成当前帧的所述待压缩视频数据的压缩处理的步骤。
[0031] 为解决上述技术问题,本发明还提供一种视频压缩设备,包括:
[0032] 存储器,用于存储指令,所述指令包括上述任意一项所述视频压缩方法的步骤;
[0033] 处理器,用于执行所述指令。
[0034] 为解决上述技术问题,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一项所述视频压缩方法的步骤。
[0035] 本发明所提供的视频压缩方法,通过将YUV格式的待压缩视频数据存入带外存储器后,在确保单次读取操作的数据量小于预分配给待压缩视频数据的缓存空间的大小的前提下,根据视频压缩IP核针对待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量,继而对当前帧待压缩视频数据,每执行一次单次读取操作后,按输入规则依次将单次读取操作获得的数据输入视频压缩IP核,并将单次读取操作中无法同时输入视频压缩IP核的数据存入缓存空间,直至完成当前帧的待压缩视频数据的压缩处理,逐帧执行直至完成各帧待压缩视频数据的压缩处理。由于在预分配给待压缩视频数据的缓存空间的限制下,一次性读取超出视频压缩IP的单次输入数据量的数据量,将超出部分存入缓存空间,而依次将单次读取操作获得的数据输入视频压缩IP,从而相较于现有视频压缩方案一来说减少了访问带外存储器的次数,相较于现有视频压缩方案二来说避免占用过多的缓存空间,达到了内存带宽和缓存资源的平衡,从而有效实现了既降低了对内存带宽的要求,避免了待压缩视频数据与SoC芯片其他软件对带外存储接口的竞争,又避免了使用大量的珍贵缓存资源,既保证了视频压缩质量又节约了芯片成本。
[0036] 本发明还提供一种视频压缩装置、设备及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

[0037] 为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0038] 图1为本发明实施例提供的一种视频压缩方法的流程图;
[0039] 图2为本发明实施例提供的一种视频压缩装置的结构示意图;
[0040] 图3为本发明实施例提供的一种视频压缩设备的结构示意图。

具体实施方式

[0041] 本发明的核心是提供一种视频压缩方法、装置、设备及计算机可读存储介质,用于保证视频压缩质量并节约芯片成本。
[0042] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0043] 图1为本发明实施例提供的一种视频压缩方法的流程图。
[0044] 如图1所示,本发明实施例提供的视频压缩方法包括:
[0045] S101:将YUV格式的待压缩视频数据存入带外存储器。
[0046] S102:根据视频压缩IP核针对待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量。单次读取操作的数据量小于预分配给待压缩视频数据的缓存空间的大小。
[0047] S103:对当前帧待压缩视频数据,每执行一次单次读取操作后,按输入规则依次将单次读取操作获得的数据输入视频压缩IP核,并将单次读取操作中无法同时输入视频压缩IP核的数据存入缓存空间,直至完成当前帧的待压缩视频数据的压缩处理。
[0048] S104:判断是否完成所有帧待压缩视频数据的压缩处理;如果是,则结束;如果否,则进入步骤S105。
[0049] S105:以下一帧待压缩视频数据为当前帧待压缩视频数据,返回步骤S103。
[0050] 在具体实施中,对于步骤S101来说,获取显卡芯片输出的视频数据(通常为RGB形式)。将显卡芯片输出的RGB格式的视频数据输入RGB2YUV模块,对显卡芯片输出的RGB格式的视频数据进行色彩空间转换,得到YUV格式的待压缩视频数据存入带外存储器(在本发明实施例中采用双倍速率同步动态随机存储器DDR)。
[0051] 对于步骤S102来说,视频压缩IP核针对待压缩视频数据的目标YUV压缩模式的输入规则,通常为按照数据块(Block)的形式依次处理亮度数据(Y)、色度数据(U)和浓度数据(V)。如对于选用YUV444压缩模式的待压缩视频数据,是每一个Y数据对应一组UV分量,则视频压缩IP核要求首先输入8*8个像素的亮度数据(即大小为8*8的数据块,以下同理),而后输入对应的8*8个像素的色度数据,最后输入对应的8*8个像素的浓度数据,从而得到该8*8个像素的压缩数据。而对于选用YUV420压缩模式的待压缩视频数据,是每四个Y数据共用一组UV分量,则视频压缩IP核要求首先输入16*16个像素的亮度数据,而后输入对应的8*8个像素的色度数据,最后输入对应的8*8个像素的浓度数据,从而得到16*16个像素的压缩数据。其他目标YUV压缩模式同理。
[0052] 在本发明实施例提供的视频压缩方法中,采用先将全部的YUV格式的待压缩视频数据存入带外存储器,而后在单次读取操作中一次性读取超出视频压缩IP的输入规则要求的单次输入的数据量而小于预分配给待压缩视频数据的缓存空间的大小的数据量(保证利用到缓存空间而不占用过多的缓存空间)的构思以及上述视频压缩IP核的输入规则的基础上,单次读取操作的数据量可以为视频压缩IP的输入规则要求的单次输入的像素量对应的YUV数据,从而在执行完一次单次读取操作后,直接将亮度数据的数据块输入视频压缩IP核,将色度数据的数据块和浓度数据的数据块存入缓存空间,分别记为U_RAM和V_RAM。此外,单次读取操作的数据量还可以为视频压缩IP的输入规则要求的单次输入的像素量的整数倍。总之,具体如何设置单次读取操作的数据量,视预分配给待压缩视频数据的缓存空间的大小而定。
[0053] 在实际应用中,预先根据SoC芯片的规格以及应用场景,设计预分配给待压缩视频数据的缓存空间。该预分配给待压缩视频数据的缓存空间可以为固定的,也可以随着SoC芯片的负载,在维持内存带宽和缓存资源的平衡的角度进行适当调整。因此本发明实施例提供的视频压缩方法还可以包括:根据SoC芯片的使用情况调整预分配给待压缩视频数据的缓存空间的大小。例如,当SoC芯片上除视频压缩任务外的其他任务较少时,可以适当在预分配给待压缩视频数据的缓存空间的大小的限制内调高单次读取操作的数据量,还可以进一步适当调高预分配给待压缩视频数据的缓存空间的大小,从而保证视频压缩任务的高效处理,达成系统资源的合理利用。
[0054] 对于步骤S103、S104以及S105来说,对待压缩视频数据的各帧数据进行逐帧处理。对于当前帧的待压缩视频数据,向带外存储器进行多次读取操作以逐次获取进行压缩处理的待压缩视频数据。而每执行一次单次读取操作,即按照视频压缩IP核的输入规则,依次将获取到的数据输入视频压缩IP核,而将无法同时输入的数据放入缓存空间,在输入完前序数据后,再按照视频压缩IP核的输入规则从缓存空间取走其余数据进行输入。为保证对所有待压缩视频数据的有序处理,便于具体实现,执行单次读取操作,具体可以包括:
[0055] 根据待压缩视频数据的分辨率以及单次读取操作的数据量,划分对当前帧待压缩视频数据的各单次读取操作的目标读取地址;
[0056] 依据单次读取操作的目标读取地址生成并执行带外存储读取命令。
[0057] 可以按照单次读取操作的数据量将各帧待压缩视频数据进行划分,得到的每块待压缩视频数据的地址即单次读取操作的目标读取地址。在实际应用中,通过预先编写地址产生脚本(ADDR_GEN)来实现根据划分结果生成目标读取地址,进而根据生成的目标读取地址生成带外存储读取命令,以执行单次读取操作。
[0058] 为便于处理,在执行单次读取操作之前,本发明实施例提供的视频压缩方法还可以包括:
[0059] 若待压缩视频数据不满足待压缩视频数据的分辨率的行数目是单次读取操作的数据量的行数目的整数倍且待压缩视频数据的分辨率的列数目是单次读取操作的数据量的列数目的整数倍的条件,则调整待压缩视频数据的分辨率以满足该条件。
[0060] 本发明实施例提供的视频压缩方法,通过将YUV格式的待压缩视频数据存入带外存储器后,在确保单次读取操作的数据量小于预分配给待压缩视频数据的缓存空间的大小的前提下,根据视频压缩IP核针对待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量,继而对当前帧待压缩视频数据,每执行一次单次读取操作后,按输入规则依次将单次读取操作获得的数据输入视频压缩IP核,并将单次读取操作中无法同时输入视频压缩IP核的数据存入缓存空间,直至完成当前帧的待压缩视频数据的压缩处理,逐帧执行直至完成各帧待压缩视频数据的压缩处理。由于在预分配给待压缩视频数据的缓存空间的限制下,一次性读取超出视频压缩IP的单次输入数据量的数据量,将超出部分存入缓存空间,而依次将单次读取操作获得的数据输入视频压缩IP,从而相较于现有视频压缩方案一来说减少了访问带外存储器的次数,相较于现有视频压缩方案二来说避免占用过多的缓存空间,达到了内存带宽和缓存资源的平衡,从而有效实现了既降低了对内存带宽的要求,避免了待压缩视频数据与SoC芯片其他软件对带外存储接口的竞争,又避免了使用大量的珍贵缓存资源,既保证了视频压缩质量又节约了芯片成本。
[0061] 在上述实施例的基础上,在本发明实施例提供的视频压缩方法中,单次读取操作的数据量为与输入规则中单次输入的像素量对应的单位亮度数据、单位色度数据和单位浓度数据。
[0062] 相应的,步骤S103中每执行一次单次读取操作后,按输入规则依次将单次读取操作获得的数据输入视频压缩IP核,并将单次读取操作中无法同时输入视频压缩IP核的数据存入缓存空间,具体为:
[0063] 每执行一次单次读取操作后,将单位亮度数据输入视频压缩IP核,并将单位色度数据和单位浓度数据存入缓存空间,在完成单位亮度数据的输入后再依次将单位色度数据和单位浓度数据输入视频压缩IP核。
[0064] YUV压缩模式包括YUV444(每一个Y对应一组UV分量)、YUV422(每两个Y共用一组UV分量)、YUV420(每四个Y共用一组UV分量)等。则在本发明实施例提供的视频压缩方法中,步骤S102中根据视频压缩IP核针对待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量,具体为当目标YUV压缩模式为YUV444时,单次读取操作的数据量为8*8个像素的YUV数据;当目标YUV压缩模式为YUV420时,单次读取操作的数据量为16*16个像素的YUV数据;以此类推。相应的,在步骤S103中,在执行一次单次读取操作后,将获取到的单位亮度数据直接输入视频压缩IP核,将单位色度数据存入缓存空间的U_RAM,将单位浓度数据存入缓存空间的V_RAM;当输完单位亮度数据后,取出单位色度数据输入视频压缩IP核;当输完单位色度数据后,取出单位浓度数据输入视频压缩IP核,依次类推输入下一个像素块的数据,直至完成该单次读取操作获取的所有数据的压缩处理,再进行下一次单次读取操作,直至完成一帧待压缩视频数据的处理,进而完成各帧的待压缩视频数据的压缩处理。
[0065] 由于不同的YUV压缩模式下,一组UV分量对应不同数量的Y数据,这意味着某些YUV压缩模式下读取到的UV数据需要被舍弃。为进一步节约缓存空间,在本发明实施例提供的视频压缩方法中,步骤S103中将单位色度数据和单位浓度数据存入缓存空间,具体包括:
[0066] 根据目标YUV压缩模式对单位色度数据和单位浓度数据进行筛选;
[0067] 将筛选后的单位色度数据和筛选后的单位浓度数据存入缓存空间。
[0068] 在实际应用中,如目标YUV压缩模式为YUV420压缩模式,则每执行一次单次读取操作后,需要舍弃四分之三的UV数据,只将余下的四分之一存入缓存空间。可以预先编写行列号检测脚本(L_R_Detect),用于根据预定的筛选规则筛选出单次读取操作获取的数据中留下的UV数据。该筛选规则根据目标YUV压缩模式制定。若在实际应用中需要处理不同的目标YUV压缩模式,则进一步预先编写根据目标YUV压缩模式设定筛选规则的脚本。
[0069] 当目标YUV压缩模式为YUV444压缩模式时,根据目标YUV压缩模式对单位色度数据和单位浓度数据进行筛选,具体为保留全部UV数据,即将获取到的单位色度数据和单位浓度数据均存入缓存空间。
[0070] 当目标YUV压缩模式为YUV420压缩模式时,根据目标YUV压缩模式对单位色度数据和单位浓度数据进行筛选,具体为:
[0071] 筛选得到单位色度数据中偶数行偶数列的数据、奇数行奇数列的数据、奇数行偶数列的数据和偶数行奇数列的数据中的一种数据,以及单位浓度数据中的对应数据。
[0072] 由于在本发明实施例中是按照数据块的顺序读回的数据,因此此时需要的缓存空间,仅为两个数据块大小,具体为64B*2=128B。相较于现有视频压缩方案二(需要60KB),这将极大地节省缓存资源。
[0073] 则对于步骤S103来说,以待压缩视频数据的分辨率的行数目除以单位亮度数据的数据块的行数目,以待压缩视频数据的分辨率的列数目除以单位亮度数据的数据块的列数目,从而将一帧待压缩视频数据划分为多个像素块后,按顺序对各像素块执行单次读取操作(如先按照列顺序读完一行像素块,再读下一行像素块)。SoC芯片的处理器通常利用AXI(Advanced eXtensible Interface)总线与带外存储器通信。则步骤S103中根据待压缩视频数据的分辨率以及单次读取操作的数据量,划分对当前帧待压缩视频数据的各单次读取操作的目标读取地址,具体为:根据待压缩视频数据的分辨率和单位亮度数据的数据块的大小,计算得到带外存储读取命令的基地址以及设定带外存储读取命令的Burst的数值(如YUV444为8,YUV420为16)。
[0074] 预先定义地址产生脚本(ADDR_GEN)中的行参数cycle_num和列参数cycle_in_num,即将一帧待压缩视频数据划分为cycle_in_num×cycle_num个像素块的数据。
[0075] 下面以目标YUV压缩模式为YUV420,待压缩视频数据的分辨率为640x480为例。
[0076] YUV420压缩模式的待压缩视频数据,视频IP核输入规则中的单位亮度数据为16*16,则:
[0077] 480/16=30组,分别记为cycle_num=0‑29;
[0078] 640/16=40组,分别记为cycle_in_num=0‑39。
[0079] 则从第一行像素块开始,将cycle_in_num从0‑39循环,然后cycle_num+,自下一行像素块继续执行cycle_in_num从0‑39循环,直至cycle_num=29,完成一帧待压缩视频数据的读取。
[0080] 在YUV420压缩模式下,按照16*16为单位读出数据。由于原始数据是顺序写入带内存储器的,则对一个像素块的读取顺序如下:
[0081] cycle_num*640*16+cycle_in_num*16,cycle_num*640*16+cycle_in_num*16+1,……,cycle_num*640*16+cycle_in_num*16+15;
[0082] cycle_num*640*16+cycle_in_num*16+640*1,cycle_num*640*16+cycle_in_num*16+640*1+1,……,cycle_num*640+cycle_in_num*16+640*1+15;
[0083] cycle_num*640*16+cycle_in_num*16+640*2,cycle_num*640*16+cycle_in_num*16+640*2+1,……,cycle_num*640*16+cycle_in_num*16+640*2+15;
[0084] ……
[0085] cycle_num*640*16+cycle_in_num*16+640*15,cycle_num*640*16+cycle_in_num*16+640*15+1,……,cycle_num*640*16+cycle_in_num*16+640*15+15。
[0086] 按上述顺序,读完一个像素块的单位亮度数据、单位色度数据和单位浓度数据之后,将cycle_in_num从0‑39循环,然后cycle_num+,自下一行像素块继续执行cycle_in_num从0‑39循环,直至cycle_num=29,完成一帧待压缩视频数据的读取。
[0087] 而本发明实施例中采用的是AXI burst操作,YUV420压缩模式下设置busrt为16次,相当于一次读16个像素的YUV数据,正好是上述的一行,则各单次读取操作中的burst基地址变为:
[0088] cycle_num*640*16+cycle_in_num*16,
[0089] cycle_num*640*16+cycle_in_num*16+640*1,
[0090] cycle_num*640*16+cycle_in_num*16+640*2,
[0091] ……
[0092] cycle_num*640*16+cycle_in_num*16+640*15。
[0093] 基于此,假设待压缩视频数据的分辨率为rsl_l*rsl_w,则:
[0094] cycle_num=0‑N/16,cycle_in_num=M/16,
[0095] 则各单次读取操作中的burst基地址为:
[0096] cycle_num*rsl_l*16+cycle_in_num*16,
[0097] cycle_num*rsl_l*16+cycle_in_num*16+rsl_l*1,
[0098] cycle_num*rsl_l*16+cycle_in_num*16+rsl_l*2,
[0099] ……
[0100] cycle_num*rsl_l*16+cycle_in_num*16+rsl_l*15。
[0101] 下面以目标YUV压缩模式为YUV444,待压缩视频数据的分辨率为640x480为例.[0102] YUV444压缩模式的待压缩视频数据,视频IP核输入规则中的单位亮度数据为8*8,则:
[0103] 480/8=60组,分别记为cycle_num=0‑59;
[0104] 640/8=80组,分别记为cycle_in_num=0‑79。
[0105] 则从第一行像素块开始,将cycle_in_num从0‑79循环,然后cycle_num+,自下一行像素块继续执行cycle_in_num从0‑79循环,直至cycle_num=59,完成一帧待压缩视频数据的读取。
[0106] 在YUV444压缩模式下,按照8*8为单位读出数据。由于原始数据是顺序写入带内存储器的,则对一个像素块的读取顺序如下:
[0107] cycle_num*640*8+cycle_in_num*8,cycle_num*640*8+cycle_in_num*8+1,……,cycle_num*640*8+cycle_in_num*8+7;
[0108] cycle_num*640*8+cycle_in_num*8+640*1,cycle_num*640*8+cycle_in_num*8+640*1+1,……,cycle_num*640*8+cycle_in_num*8+640*1+7;
[0109] cycle_num*640*8+cycle_in_num*8+640*2,cycle_num*640*8+cycle_in_num*8+640*2+1,……,cycle_num*640*8+cycle_in_num*8+640*2+7;
[0110] ……
[0111] cycle_num*640*8+cycle_in_num*8+640*7,cycle_num*640*8+cycle_in_num*8+640*7+1,……,cycle_num*640*8+cycle_in_num*8+640*7+7。
[0112] 按上述顺序,读完一个像素块的单位亮度数据、单位色度数据和单位浓度数据之后,将cycle_in_num从0‑79循环,然后cycle_num+,自下一行像素块继续执行cycle_in_num从0‑79循环,直至cycle_num=59,完成一帧待压缩视频数据的读取。
[0113] 而本发明实施例中采用的是AXI burst操作,YUV444压缩模式下设置busrt为8次,相当于一次读8个像素的YUV数据,正好是上述的一行,则各单次读取操作中的burst基地址变为:
[0114] cycle_num*640*8+cycle_in_num*8,
[0115] cycle_num*640*8+cycle_in_num*8+640*1,
[0116] cycle_num*640*8+cycle_in_num*8+640*2,
[0117] ……
[0118] cycle_num*640*8+cycle_in_num*8+640*7。
[0119] 基于此,假设待压缩视频数据的分辨率为rsl_l*rsl_w,则:
[0120] 则各单次读取操作中的burst基地址为:
[0121] cycle_num*rsl_l*8+cycle_in_num*8,
[0122] cycle_num*rsl_l*8+cycle_in_num*8+rsl_l*1,
[0123] cycle_num*rsl_l*8+cycle_in_num*8+rsl_l*2,
[0124] ……
[0125] cycle_num*rsl_l*8+cycle_in_num*8+rsl_l*7。
[0126] 相应的,利用行列号检测脚本(L_R_Detect)根据目标YUV压缩模式筛选单次读取操作获取的数据中留下的UV数据,具体为预先定义行列号检测脚本(L_R_Detect)中的参数busrt_cnt为读取当前像素块时产生的AXI Burst读操作的计数。
[0127] 对于YUV420压缩模式来说,产生的AXI Burst读操作的计数为0‑15,在一次Burst读操作中共获取16个像素的YUV数据,则对于UV数据,若只取偶数行的偶数列的单位色度数据和单位浓度数据,则仅留下burst_cnt=0、2、4、6、8、10、12、14的U/V数据,将筛选后的单位色度数据写进U_RAM,将筛选后的单位浓度数据写进V_RAM,其余的U/V数据舍弃。
[0128] 而对于YUV444压缩模式来说,直接将单次读取操作获取的全部单位色度数据写进U_RAM,将单次读取操作获取的全部单位浓度数据写进V_RAM。
[0129] 需要注意的是,若需要处理YUV420压缩模式的待压缩视频数据,则需要确保待压缩视频数据的分辨率的行数目和列数目均为16的整数倍。若需要处理YUV444压缩模式的待压缩视频数据,则需要确保待压缩视频数据的分辨率的行数目和列数目均为8的整数倍。
[0130] 上文详述了视频压缩方法对应的各个实施例,在此基础上,本发明还公开了与上述方法对应的视频压缩装置、设备及计算机可读存储介质。
[0131] 图2为本发明实施例提供的一种视频压缩装置的结构示意图。
[0132] 如图2所示,本发明实施例提供的视频压缩装置包括:
[0133] 存储单元201,用于将YUV格式的待压缩视频数据存入带外存储器;
[0134] 确定单元202,用于根据视频压缩IP核针对待压缩视频数据的目标YUV压缩模式的输入规则确定单次读取操作的数据量;单次读取操作的数据量小于预分配给待压缩视频数据的缓存空间的大小;
[0135] 压缩单元203,用于对当前帧待压缩视频数据,每执行一次单次读取操作后,按输入规则依次将单次读取操作获得的数据输入视频压缩IP核,并将单次读取操作中无法同时输入视频压缩IP核的数据存入缓存空间,直至完成当前帧的待压缩视频数据的压缩处理;若未完成所有帧待压缩视频数据的压缩处理,则以下一帧待压缩视频数据为当前帧待压缩视频数据,返回对当前帧待压缩视频数据,每执行一次单次读取操作后,按输入规则依次将单次读取操作获得的数据输入视频压缩IP核进行压缩处理,并将单次读取操作中无法同时压缩处理的数据存入缓存空间,直至完成当前帧的待压缩视频数据的压缩处理的步骤。
[0136] 进一步的,本发明实施例提供的视频压缩装置还可以包括:
[0137] 第一调整单元,用于在执行单次读取操作之前,若待压缩视频数据不满足待压缩视频数据的分辨率的行数目是单次读取操作的数据量的行数目的整数倍且待压缩视频数据的分辨率的列数目是单次读取操作的数据量的列数目的条件,则调整待压缩视频数据的分辨率以满足条件。
[0138] 进一步的,本发明实施例提供的视频压缩装置还可以包括:
[0139] 第二调整单元,用于根据SoC芯片的使用情况调整预分配给待压缩视频数据的缓存空间的大小。
[0140] 由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
[0141] 图3为本发明实施例提供的一种视频压缩设备的结构示意图。
[0142] 如图3所示,本发明实施例提供的视频压缩设备包括:
[0143] 存储器310,用于存储指令,所述指令包括上述任意一项实施例所述的视频压缩方法的步骤;
[0144] 处理器320,用于执行所述指令。
[0145] 其中,处理器320可以包括一个或多个处理核心,比如3核心处理器、8核心处理器等。处理器320可以采用数字信号处理DSP(Digital Signal Processing)、现场可编程门阵列FPGA(Field-Programmable Gate Array)、可编程逻辑阵列PLA(Programmable Logic Array)中的至少一种硬件形式来实现。处理器320也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器CPU(Central Processing Unit);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器320可以集成有图像处理器GPU(Graphics Processing Unit),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器320还可以包括人工智能AI(Artificial Intelligence)处理器,该AI处理器用于处理有关机器学习的计算操作。
[0146] 存储器310可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器310还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器310至少用于存储以下计算机程序311,其中,该计算机程序311被处理器320加载并执行之后,能够实现前述任一实施例公开的视频压缩方法中的相关步骤。另外,存储器310所存储的资源还可以包括操作系统312和数据313等,存储方式可以是短暂存储或者永久存储。其中,操作系统312可以为Windows。数据313可以包括但不限于上述方法所涉及到的数据。
[0147] 在一些实施例中,视频压缩设备还可包括有显示屏330、电源340、通信接口350、输入输出接口360、传感器370以及通信总线380。
[0148] 本领域技术人员可以理解,图3中示出的结构并不构成对视频压缩设备的限定,可以包括比图示更多或更少的组件。
[0149] 本申请实施例提供的视频压缩设备,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如上所述的视频压缩方法,效果同上。
[0150] 需要说明的是,以上所描述的装置、设备实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0151] 另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0152] 集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本发明各个实施例所述方法的全部或部分步骤。
[0153] 为此,本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如视频压缩方法的步骤。
[0154] 该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器ROM(Read‑Only Memory)、随机存取存储器RAM(Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0155] 本实施例中提供的计算机可读存储介质所包含的计算机程序能够在被处理器执行时实现如上所述的视频压缩方法的步骤,效果同上。
[0156] 以上对本发明所提供的一种视频压缩方法、装置、设备及计算机可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
[0157] 还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。