一种应用于视频编解码的压缩方法与流程

文档序号:14060962阅读:267来源:国知局
一种应用于视频编解码的压缩方法与流程

本发明涉及视频编解码处理领域,具体涉及一种应用于视频编解码的压缩方法,通过组合有损压缩和无损压缩来压缩视频数据,以达到节省编解码带宽以及存储空间的目的。



背景技术:

视频压缩和解压缩是目前基于网络视频传输的一个必需技术,由于目前的视频压缩都是基于块匹配的运动估计的帧间压缩方式,特别是多个参考帧的采用,使得编码的压缩效率有很大的提高,然而这对编解码的性能要求也提高了很多,需要编解码端能缓存多个参考帧的原始图像数据,这就需要编解码端配备更大的存储空间;而且,随着多个参考帧的使用,编解码需要的带宽也成为了一个瓶颈,编解码需要的带宽主要集中在视频数据的读写上,例如在视频解码中需要将重建后的数据写出,在帧间宏块解码时需要读取多个参考帧的数据以及在视频编码中也需要写出重建后的数据,在进行块匹配的运动估计中需要读取多个参考帧的搜索窗数据等等都需要占用大量的带宽资源,而且,随着技术的发展和进步,以及用户对高清视频的需求,视频的分辨率越来越大,从过去的480p到720p再到现在1080p和2160p,以及未来的8k,视频编解码所需要的存储空间以及带宽会成比例的线性增加,为了解决存储空间和带宽的问题,工程师进行了很多的尝试,做了很多的解决方案,如:

1、加大动态存储器ddr的大小来缓解编解码需求的存储空间问题,但这会直接带来成本的上升;

2、提高内存颗粒的工作频率以提高内存可以提供的数据带宽,但是高频率带来了高功耗以及随之而来的高发热问题,这在一般的手持设备很难接受;

3、增加内存通道数以获取更大的带宽,但这会导致内存颗粒增加以及pcb板走线增多,造成pcb板布线的困难。

如果能找到一种方法,在不影响人主观质量的条件下,或虽有一定程度的影响但还可接受的情况下,使视频编解码所需要的存储空间以及带宽大幅下降,这将是非常有意义的。



技术实现要素:

因此,为了解决上述问题,本发明提出了一种基于块的有损压缩和无损压缩相结合的方法,该方法充分利用了领域像素相近的特点,通过多种预测模式进行预压缩,选取最优的预测模式,同时结合qp进行量化,去掉影响较小的余数部分,只对商进行压缩,以达到既节省视频编解码带宽,同时又节省空间的目的。同时,在压缩数据的存储上,通过每个压缩块根据系统需求固定大小的方式,不需要额外开辟空间来存储压缩块长度,极大的方便了随机访问,而且结构简单,易于硬件实现,可以灵活的应用于各种视频编解码器中。实验结果表明,在节省带宽和存储空间50%的条件下,测试不同的序列,该方法虽有一定的损失,但基本不影响人的主观视觉效果;在节省带宽和存储空间75%的条件下,即视频编解码所需要的带宽和存储空间为不压缩方案的1/4,测试不同的序列,该方法虽会有较大的损失,但基本还可以接受,在低成本的视频编解码方案中可以采用。

本发明的目的提供一种有损压缩和无损压缩相结合的方法,以节省视频编解码中需要的带宽和存储空间。

本发明的压缩方法对亮度数据y采用了以16*16大小块为一个group进行压缩,每个16*16块group又分为4个8*8小块y0、y1、y2和y3分别压缩,对色度数据uv采用2个8*8的小块为一个group进行压缩。压缩步骤包括:

(1)首先设置量化qp为1;

(2)对每个8*8的小块进行模式预测,得到每个原始像素数据对应的预测值,然后用原始数据减去所对应位置的预测值数据,即可得到残差数据。同时,根据预测模式,对得到的残差数据进行分组;

(3)对每种预测模式得到的残差分组数据进行数据压缩,统计每种预测模式下压缩编码后的总长度,选择总长度最小的预测模式作为当前8*8小块的最优预测模式。对亮度块group的4个8*8小块和色度块group的2个8*8块同样处理,得到每个8*8小块的最优预测模式以及相对应的残差分组数据;

(4)对亮度块group的4个8*8小块和色度块group的2个8*8小块进行压缩编码并统计总长度,如果满足系统需求,则当前块group压缩结束;

(5)如果压缩后总长度不满足系统需求,则增大qp,为上一轮qp的2倍,对每个8*8小块的最优预测模式对应的残差分组数据进行qp量化,舍弃余数,直接对商编码压缩,重新统计亮度块group和色度块group的压缩总长度,如果满足系统需求,则当前块group压缩结束;如果还不满足,则继续进行下一轮的压缩处理;

(6)将压缩好的数据存入动态存储器ddr中。

在步骤(2)中,根据领域像素数值相近的原则,一种优选的方案是对每个8*8子块采用了多种预测模式进行预测,包括水平预测,垂直预测和均值预测,在分组残差时结合预测模式对残差进行分组。

在步骤(3)中,对每种预测模式得到的残差分组数据进行数据压缩时,一种优选的方案是对每组待编码的残差数据采用了headbit加上残差压缩码流相结合的方法,且headbit固定3bit的方式,表示此组残差数据每个残差需要的bit数,残差压缩码流即按照headbit数进行压缩编码得到。对每种预测模式下的残差分组数据依次编码压缩,即可得到此种预测模式下的压缩码流,并统计压缩后的码流长度,选择码流总长度最小的预测模式作为当前8*8小块的最优预测模式。对亮度块group的4个8*8小块和色度块group的2个8*8块同样处理,得到每个8*8小块的最优预测模式以及相对应的残差分组数据。

在步骤(4)、(5)中,对亮度块group的4个8*8小块和色度块group的2个8*8小块进行压缩编码时,为了实现压缩总长度满足需求,一种优选的方案是对分组残差进行qp量化,qp的设置由小到大,从1一直到128,压缩编码时舍弃余数部分,对商进行压缩编码,直到压缩总长度满足需求。如果qp为1时压缩总长度满足需求则相当于对当前group进行了无损压缩,否则qp大于1时相当于进行了有损压缩。

在步骤(6)中,将压缩好的数据存入到动态存储器ddr时,一种优选的方案是对存入的压缩数据采用了对每个亮度块group或色度块group根据其位置信息固定地址的方式,根据系统节省带宽和存储空间的需求,对每个亮度块group和色度块group都固定空间,当压缩数据存入ddr时,根据亮度块group或色度块group的位置信息得到相对应的压缩数据存放的固定地址,存入即可。

附图说明

图1是本发明中视频编解码框图。

图2是本发明中视频编解码亮度色度压缩块group大小示意图。

图3是本发明中压缩算法流程图。

图4是本发明中压缩算法模式预测框图。

图5是本发明中压缩算法残差分组示意图。

图6是本发明中每组残差数据headbit范围对应表。

图7是本发明中8*8小块数据压缩格式示意图。

图8是本发明中亮度块group数据压缩格式示意图。

图9是本发明中色度块group数据压缩格式示意图。

图10是本发明中qp为128时亮度块group数据压缩格式示意图。

图11是本发明中qp为128时色度块group数据压缩格式示意图。

图12是本发明中在节省50%带宽和空间时压缩数据在动态存储器ddr中的存储示意图。

图13是本发明中在节省75%带宽和空间时压缩数据在动态存储器ddr中的存储示意图。

以下结合附图及实施例对本发明做进一步的说明。

具体实施方式

传统的视频编解码在处理一帧数据时,需要将重建帧数据写入到动态存储器ddr中,此时,写入的是原始的未经过压缩的视频数据,同时,在处理一帧的过程中,需要读取以往编解码写入的未经压缩的视频数据。本发明在传统的视频编解码基础上,增加了对视频数据的压缩和解压缩,如图1所示,在步骤s1视频编解码在处理一帧数据时,需要输出重建帧数据时,不直接输出到动态存储器ddr,而是插入一步s2,在步骤s2中对输出的视频数据进行压缩,压缩算法可以采用有损压缩,也可以采用无损压缩,由压缩算法根据用户设定的节省带宽和存储空间的大小自适应的选择,经过步骤s2后,将压缩后的视频数据写入到ddr中,从而实现了节省带宽和存储空间的目的。在视频解码中,需要读取参考帧数据或视频编码中,需要读取运动估计的搜索窗时,插入一步s3,用于对压缩的视频数据进行解压缩,恢复为原始的视频数据,送到s1进行进一步的编解码运算。

在对视频编解码输出的视频数据进行压缩时,结合视频编解码每次输出的数据块大小,对亮度数据y采用了以16*16大小块为一个group进行压缩,每个16*16块group又分为4个8*8小块y0、y1、y2和y3分别压缩,对色度数据uv采用2个8*8的块为一个group进行压缩,如图2所示,亮度块y0、y1、y2和y3压缩后的数据紧凑存放,色度块uv压缩后的数据紧凑存放,所有亮度块压缩数据和色度块压缩数据分开独立存放。

压缩算法如图3所示,开始对亮度块group4个8*8小块y0、y1、y2和y3或色度块uvgroup行压缩,首先进入步骤s4,设置量化系数qp为1,然后进入s5,对每个8*8小块进行模式预测以及残差分组,模式预测见图4,对每个8*8小块采用了4种预测模式分别进行预测。预测算法如下:

(1)mode0:首先进行第0列的垂直预测,得到7个预测值,记为pred_block_y0[0][7],然后对第1列进行水平预测,得到8个预测值,记为pred_block_y0[1][8],同样,对2到7列进行水平预测,得到8个预测值,记为pred_block_y0[2][8]到pred_block_y0[7][8];

(2)mode1:首先进行第0行的水平预测,得到7个预测值,记为pred_block_y0[0][7],然后对第1行进行垂直预测,得到8个预测值,记为pred_block_y0[1][8],同样对第2行到7行进行垂直预测,得到8个预测值,记为pred_block_y0[2][8]到pred_block_y0[7][8];

(3)mode2:首先进行第0列垂直预测,得到7个预测值,记为pred_block_y0[0][7],然后对第0行,第2行,第4行以及第6、7行进行水平预测,得到7个预测值,记为pred_block_y0[1][7]到pred_block_y0[5][7],然后再对第1、3、5行进行均值预测,得到7个预测值,记为pred_block_y0[6][7]到pred_block_y0[8][7];

(3)mode3:首先进行第0行水平预测,得到7个预测值,记为pred_block_y0[0][7],然后对第0列,第2列,第4列以及第6、7列进行垂直预测,得到7个预测值,记为pred_block_y0[1][7]到pred_block_y0[5][7],然后再对第1、3、5列进行均值预测,得到7个预测值,记为pred_block_y0[6][7]到pred_block_y0[8][7]。

经过上面的预测运算,已经得到4种预测模式下,每个原始像素数据对应的预测值,然后用原始数据减去所对应位置的预测值数据,即可得到残差数据,同时,根据预测模式,对得到的残差数据进行分组,如图5所示,如果是mode0和mode1,可以得到8组残差数据,标记为resi_block_y0[0][7],resi_block_y0[1][8],resi_block_y0[2][8]一直到resi_block_y0[7][8],除了第0组有7个残差数据外,其它7组都是8个;如果是mode2和mode3,可以得到9组残差数据,标记为resi_block_y0[0][7],resi_block_y0[1][1]一直到resi_block_y0[8][7],所有9组残差数据都是7个。

在对每个8*8小块进行4种模式预测和残差分组后,进入到步骤s6,对每种预测模式得到的残差分组数据进行数据压缩,选择最优的预测模式。对于待编码的一组残差数据,根据预测模式不同以及不同的分组,每组残差数据可以是7个也可以是8个,首先对于每组的7个或8个残差数据,找到max值和min值,然后根据图6算出此组数据表示每组残差所需要的headbit数,每组的headbit数固定3个bit编码,组内的每个残差按照headbit数进行编码,得到此组残差压缩后的编码码流。举例来说,如一组残差有7个,残差数据为{-2,-1,0,1,0,0,0},首先max值为1,min值为-2,根据图6,headbit数固定3个bit为010,即为2,然后对组内的每一个残差按照2个bit进行编码,依次为{10,11,00,01,00,00,00},按bit依次拼接即可得到此组残差压缩后的编码压缩码流。如果是mode0和mode1,共有8组残差数据;如果是mode2和mode3,共有9组残差数据。对此8组或9组残差数据依次编码压缩,即可得到此种预测模式下的压缩码流,然后按照图7统计每种预测模式下压缩后的码流长度,dc值为每个8*8块左上角原始值,8bit存放,由于有4种预测模式,故mode需2bit,每组残差编码的headbit固定为3bit,故根据预测模式不同headbit占用24bit或27bit,如果是预测模式0和1,有8组残差数据,故headbit占用24bit,如果预测模式为2和3,有9组残差数据,故headbit占用27bit,最后为压缩后的残差编码数据nbit。统计完每种预测模式下压缩编码后的总长度后,选择总长度最小的预测模式作为当前8*8小块的最优预测模式,对亮度块group的4个8*8小块和色度块group的2个8*8块同样处理,得到每个8*8小块的最优预测模式以及相对应的残差分组数据。

在s6步骤完成后,进入s7,对亮度块group的4个8*8小块和色度块group的2个8*8小块进行压缩编码并统计总长度,亮度块group数据的压缩格式存放如图8所示,开始3bit用于存放qp,如果3bit值为0表示qp为1,为1表示qp为2,依次类推,当为6时,qp为64,为7时qp为128,接下来4个8bit用来存放y0、y1、y2和y34个8*8小块的dc值,以及每个8*8小块2个bit的最优预测模式,接下来存放4个8*8小块的headbit,根据预测模式,每个小块的headbit可能占用24bit或是27bit,最后存放4个8*8小块的压缩编码数据。色度块group数据的压缩格式存放如图9所示,各参数意义和亮度块group类似,不再累述。qp在s4步骤设置为1,此处将qp为1即压缩数据开始3bit填入0编入压缩码流,分别统计亮度块group和色度块group的总长度,然后进入步骤s8,在s8会判断压缩后的亮度块group或色度块group总长度是否满足需求,如系统要求编解码节省50%的存储空间和带宽,则此处判断亮度块group压缩后的总长度是否小于等于128byte,色度块group压缩后的总长度是否小于等于64byte;如系统要求编解码节省75%的存储空间和带宽,则此处判断亮度块group压缩后的总长度是否小于等于64byte,色度块group压缩后的总长度是否小于等于32byte;如果满足需求,则压缩结束,将压缩后的数据写入动态存储器ddr中,此时由于qp为1,残差数据在压缩时没有损失,故在解压缩时能准确的恢复出原始视频数据,故qp为1时相当于无损压缩。如果不满足需求,即在设置qp为1时,亮度块group或色度块group压缩后的总长度超过了设定的值,则进入s9,在步骤s9中,会调节qp,在原来的基础上乘以2,然后进入s10,对在步骤s6中得到的最优预测模式下的残差分组数据进行qp量化,最后进入s11,对量化后的商数据进行编码压缩,余数直接舍弃,由于对余数没有保存,直接丢弃,故存在一定的损失,qp越大,损失越大,解压缩时无法准确恢复原始视频数据,故qp大于1时为有损压缩。在s7步骤,得到此qp下的亮度块group和色度块group压缩编码数据及总长度,如果总长度满足需求,则压缩结束,不满足,重新设置qp,将qp设置为上一轮的2倍,进行下一轮的量化编码压缩,由于qp越来越大,一般来说,压缩后的亮度块group和色度块group的总长度会越来越小,为了避免在qp为64时压缩后的总长度依然不满足需求,在qp为128时,采用图10和图11两种特殊的压缩格式分别对亮度块和色度块数据进行压缩存放,以图10亮度块压缩格式为例说明,最高3bit仍然是qp,此处qp为128,按照上面介绍此3bit填入7,msb_number表示压缩数据保留原始数据的高1bit还是2bit,为1表示保留原始数据最高2bit,为0表示保留原始数据最高1bit,后面依次存入亮度块group4个8*8小块的最高1bit还是2bit数据,其它低比特数据全部舍弃。图11的色度块group数据在qp为128时存储格式和图10类似,不再累述。

在将压缩数据写入到动态存储器ddr时,采用了对每个亮度块group或色度块group根据其位置信息固定地址的方式,不需要额外存储每个压缩块group的长度信息,极大方便了随机访问。图12表示系统要求编解码节省50%的存储空间和带宽时,每个亮度块group固定占用128byte空间,色度块group固定占用64byte空间,所有的亮度块group集中存放在一起,色度块group独立于亮度块,集中存放在一起。图13表示系统要求编解码节省75%的存储空间和带宽时,每个亮度块group固定占用64byte空间,色度块group固定占用32byte空间。

最后需要强调的是,本发明不限于上述实现方式,如压缩算法中压缩group的大小变化、压缩算法中预测模式的变化、压缩数据的压缩格式变化以及压缩数据存入到动态存储器ddr中的存储变化等都应该包含在本发明权利要求的保护范围内。

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