首页> 中国专利> 一种在视频解码中减少内存带宽使用的方法

一种在视频解码中减少内存带宽使用的方法

摘要

本发明公开了一种在视频解码中减少内存带宽使用的方法,包括如下步骤:S1,根据解码需要申请内存Xi,并传输给解码库;S2,解码库获取对应内存X1的参考帧Fn1,根据参考帧Fn1在内存X1上记录有效图像显示区域;显示模块按照所述有效图像显示区域对解码后的图像进行显示;S3,解码库获取对应内存X(k‑1)的参考帧Fn(k‑1),根据Fn(k‑1)进行解码,将生成的参考帧Fnk存储到内存Xk;根据参考帧Fnk在内存Xk上记录有效图像显示区域;显示模块按照内存Xk中标记的有效图像显示区域对解码的视频图像进行显示;S4,重复步骤S3,直至视频中所有帧均解码完毕。该方法将参考帧使用的内存由显示模块直接管理,大大提高了系统的并发解码性能。

著录项

  • 公开/公告号CN105847823A

    专利类型发明专利

  • 公开/公告日2016-08-10

    原文格式PDF

  • 申请/专利权人 北京佳讯飞鸿电气股份有限公司;

    申请/专利号CN201610207356.1

  • 发明设计人 管超;

    申请日2016-04-05

  • 分类号

  • 代理机构北京汲智翼成知识产权代理事务所(普通合伙);

  • 代理人陈曦

  • 地址 100095 北京市海淀区锦带路88号院1号楼

  • 入库时间 2023-06-19 00:16:32

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-11

    授权

    授权

  • 2016-09-07

    实质审查的生效 IPC(主分类):H04N19/44 申请日:20160405

    实质审查的生效

  • 2016-08-10

    公开

    公开

说明书

技术领域

本发明涉及一种减少内存带宽使用的方法,尤其涉及一种在视频解码中减少内存带宽使用的方法,属于视频解码技术领域。

背景技术

随着网络技术的不断发展,有线网络和移动通信网络的数据传输速度越来越快,使得在视频播放的过程中,视频解码越来越受到人们的重视。视频解码是一个对数字视频进行解压缩的过程,在这个过程中需要进行大量的内存读写操作。

以当前主流的H264编码标准为例,对视频解码中涉及内存读写的过程进行说明。如图1所示,现有技术的解码显示包括以下处理过程:解码库首先申请存储参考帧F’n的内存;然后解码库进行若干次内存读写操作,获得参考帧F’n;由于解码图像都是以宏块为单位进行的,在H264的解码过程中,一个宏块需要依赖于宏块左边和上边的图像来获得预测值,这就会导致解码图像边缘的宏块时,搜索用于预测的宏块超出图像的有效范围。因此解码器在申请参考帧内存时就会预先多申请一部分空间,将待解码的图像预先添加一个宏块宽度的边的宽度,以保证宏块搜索的范围不超过参考帧,确保解码的正确性。所以在解码后需要将参考帧去边后存入内存生成解码图像;之后解码库删除不再使用的参考帧,将内存中的解码图像拷贝到显示模块进行显示。

其中,解码过程涉及到将参考帧去边及拷贝到显示模块的内存读写操作,上述两个操作需要对图像进行两次内存拷贝,每次拷贝都需要复制图像有效区域对应的内存。

此外,图1获取的参考帧的生成过程也需要进行大量内存读写操作,进一步增加了内存宽带的使用量。然而,随着网络技术的不断发展,视频解码数量逐渐增加,并发解码能力逐渐受到人们的重视。内存带宽使用过大,限制了系统并发多路解码时的最大路数。当一个会议系统需要同时解码多路视频时,内存带宽会成为提高解码路数的瓶颈。

发明内容

针对现有技术的不足,本发明所要解决的技术问题在于提供一种在视频解码中减少内存带宽使用的方法。

为实现上述发明目的,本发明采用下述的技术方案:

一种在视频解码中减少内存带宽使用的方法,包括如下步骤:

S1,根据解码需要申请内存Xi,并传输给解码库;其中,i=1,2,3……N,N为正整数;

S2,解码库获取对应内存X1的参考帧Fn1,根据参考帧Fn1在内存X1上记录有效图像显示区域;显示模块按照所述有效图像显示区域对解码后的图像进行显示;

S3,解码库获取对应内存X(k-1)的参考帧Fn(k-1),根据Fn(k-1)进行解码,将生成的参考帧Fnk存储到内存Xk;根据参考帧Fnk在内存Xk上记录有效图像显示区域;显示模块按照内存Xk中标记的有效图像显示区域对解码的视频图像进行显示,其中,k=2,3,4……N,N为正整数;

S4,重复步骤S3,直至视频中所有帧均解码完毕。

其中较优地,在步骤S1中,所述内存Xi的大小为待解码的视频图像在长宽方向各添加一个边之后的大小;其中,所述边为一个宏块宽度。

其中较优地,在步骤S2中,内存X1上记录的有效图像显示区域为去除待解码的视频图像在长宽方向各添加的一个边之后,视频图像所占内存组成的区域;其中,所述边为一个宏块宽度。

其中较优地,在步骤S3中,根据Fn(k-1)进行解码,将生成的参考帧Fnk存储到内存Xk,包括如下步骤:

S31,读取内存中待解码的码流,进行熵解码,得到量化系数;

S32,将所述量化系数进行反量化,将反量化信息存入内存;

S33,将反量化信息作为输入进行反变换,将生成的残差存入内存;

S34,根据运动矢量从内存读取帧内或帧间的参考帧对应区;将残差和预测值相加生成重建帧,存入内存;

S35,从内存中读取重建帧进行环路滤波后回写到内存;

S36,重复步骤S31~S35,直至该内存Xk所有待解码的码流解码 完成,生成参考帧Fnk。

其中较优地,在步骤S3中,生成参考帧Fnk后,解码库按照码流中的信息解除对参考帧Fn(k-1)对应的内存X(k-1)的解码占用。

其中较优地,显示模块回收解除解码占用的内存,用于下次解码库的解码占用。

本发明所提供的在视频解码中减少内存带宽使用的方法,通过将参考帧解码后生成的视频图像使用的内存改由显示模块直接管理,仅在内存中标记参考帧内的图像区域而不再需要将参考帧进行去边复制,也不需要将图像数据拷贝到显示模块,每次解码显示过程节省了2次解码图像内存大小的拷贝操作,节省了内存宽带使用量,大大提高了系统的并发解码性能。

附图说明

图1为现有技术中,对视频编码进行解码显示的流程图;

图2为本发明所提供的在视频解码中减少内存带宽使用的方法流程图;

图3为本发明所提供的减少内存带宽使用的方法中,解码生成参考帧的流程图。

具体实施方式

下面结合附图和具体实施例对本发明的技术内容进行详细具体的说明。

如图2所示,本发明所提供的在视频解码中减少内存带宽使用的方法,包括如下步骤:首先,显示模块根据解码需要申请内存Xi(i=1,2,3……N,N为正整数)并传输给解码库,供解码库解码占用;其次,解码库获取对应内存X1的参考帧Fn1,根据参考帧Fn1在内存X1上记录有效图像显示区域;显示模块按照内存X1中标记的有效图像显示区域对解码后的图像进行显示;然后,解码库获取对应内存X(k-1)的参考帧Fn(k-1),根据Fn(k-1)进行解码,将解码后的图像即参考帧Fnk存储到内存Xk;根据参考帧Fnk在内存Xk上记录有效图像显示区域;显示模块按照内存Xk中标记的有效图像显示区域对解码的视频图像进行显示,其中,k=2,3,4……N,N为正整数。重复上述步骤,直至视频中所有帧解码完成。下面对这一过程做详细具 体的说明。

S1,显示模块根据解码需要申请内存Xi(i=1,2,3……N,N为正整数)并传输给解码库,供解码库解码占用。

视频解码完成之后需要对解码后的图像(解码图像)进行显示,在本发明所提供的实施例中,直接在显示模块中根据解码需要申请内存Xi(i=1,2,3……N,N为正整数),用于显示解码后的图像。并将内存Xi传输给解码库,解码库在内存Xi上标记解码占用位,表示为解码占用,用来保存参考帧Fni解码后的视频图像。例如:当前解码的是Fn2,显示模块根据解码需要申请内存X2。

S2,解码库获取对应内存X1的参考帧Fn1,根据参考帧Fn1在内存X1上记录有效图像显示区域;显示模块按照内存X1中标记的有效图像显示区域对解码后的图像进行显示。

由于解码图像都是以宏块为单位进行的,在H264的解码过程中,一个宏块需要依赖于宏块左边和上边的图像来获得预测值,这就会导致解码图像边缘的宏块时,搜索用于预测的宏块超出图像的有效范围。因此解码器在申请参考帧内存时就会预先多申请一部分空间,将待解码的图像预先添加一个边,该边的宽度为一个宏块宽度,以保证宏块搜索的范围不超过参考帧,确保解码的正确性。在本发明所提供的实施例中,参考帧解码后生成的视频图像使用的内存改由显示模块直接管理,在内存中标记参考帧解码后生成的视频图像的图像存储区域,所以在显示模块申请内存Xi时,也会预先多申请一部分空间,内存Xi的大小为待解码的视频图像在长宽方向各添加一个边之后的大小,该边为一个宏块宽度,以保证宏块搜索的范围不超过参考帧,确保解码的正确性。

由于视频解码过程中的第一帧为P帧,p帧解码不需要额外的参考帧,所以解码库获取对应内存X1的参考帧Fn1,根据参考帧Fn1在内存X1上记录有效图像显示区域;内存X1上的有效图像显示区域为去除待解码的视频图像在长宽方向各添加的一个边之后,视频图像所占内存组成的区域。其中,长宽方向各添加的一个边为一个宏块宽度。显示模块按照内存X1中标记的有效图像显示区域对解码后的图像进行显示。不再需要将参考帧进行去边复制,使每次解码显示过程又节 省了1次视频图像内存大小的拷贝操作,节省了内存宽带使用量。

S3,解码库获取对应内存X(k-1)的参考帧Fn(k-1),根据Fn(k-1)进行解码,将解码后的图像即参考帧Fnk存储到内存Xk;根据参考帧Fnk在内存Xk上记录有效图像显示区域;显示模块按照内存Xk中标记的有效图像显示区域对解码的视频图像进行显示,其中,k=2,3,4……N,N为正整数。

解码库获取对应内存X(k-1)的参考帧Fn(k-1),根据Fn(k-1)进行解码,将解码后的图像即参考帧Fnk存储到内存Xk;如图3所示,具体包括如下步骤:

S31,读取内存中待解码的码流,进行熵解码,得到一系列量化系数;

S32,将到的一系列量化系数进行反量化,将反量化信息存入内存;

S33,将反量化信息作为输入进行反变换,将生成的残差D’n写入内存保护;

S34,根据运动矢量从内存读取帧内或帧间的参考帧对应区;将残差和预测值相加生成重建帧,写入内存保护。当需要读取帧间的参考帧对应区时,从内存X(k-1)读取参考帧Fn(k-1)对应宏块;当需要读取帧内的参考帧对应区时,从内存X(k-1)已经解码的宏块中读取最匹配的对应宏块。在对视频进行编码过程中,经常利用帧与帧之间的相关性,需要将图像帧划分为若干个16×16像素的宏块,再按照从左到右、从上到下的顺序,依次对各宏块行中各宏块的图像数据进行编码。帧间编码的关键过程为运动估计,对于当前帧中的某一宏块,在参考帧中搜索与之最匹配的宏块,然后对当前编码宏块与参考帧中最匹配的宏块之间的差值(残差)以及两者的对应位置信息即运动向量进行编码,得到编码视频。运动矢量是使用解码得出的运动向量在参考帧中找到与之最匹配的宏块(预测值),然后使用残差和预测值相加生成重建帧。

S35,从内存中读取重建帧进行环路滤波后回写到内存。

S36,重复步骤S31~S35,直至该内存Xk所有待解码的码流解码完成,生成参考帧Fnk。

视频解码是以宏块为单位进行的,S31~S35的过程相当于一个宏 块的解码过程。解码一帧图像时重复将图像中的所有宏块进行处理,得到整幅解码后的图像即参考帧Fnk。将参考帧Fnk存储到内存Xk;根据参考帧Fnk在内存Xk上记录有效图像显示区域;显示模块按照内存Xk中标记的有效图像显示区域对解码的视频图像进行显示,其中,k=2,3,4……N,N为正整数。解码后的图像使用的内存改由显示模块直接管理,不需要将解码图像拷贝到显示模块,每次解码显示过程节省了解码的视频图像内存大小的拷贝操作,节省了内存宽带使用量。

在本发明所提供的实施例中,生成参考帧Fnk后,解码库会按照码流中的信息将不再使用的参考帧Fn(k-1)对应的内存X(k-1)上的解码占用位清零,解除解码库的解码占用,便于后续参考帧解码后对内存的使用。其中,k=2,3,4……N,N为正整数。例如:如果参考帧Fn2为p帧,生成参考帧Fn2之后,按照解码流中的信息,参考帧Fn1将不会用于后续解码,于是解码库将不再使用的参考帧Fn1对应的内存X1上的解码占用位清零,解除解码库的解码占用。

解码库获取对应内存X(k-1)的参考帧Fn(k-1),根据Fn(k-1)进行解码,将解码后的图像即参考帧Fnk存储到内存Xk;根据参考帧Fnk在内存Xk上记录有效图像显示区域;显示模块按照内存Xk中标记的有效图像显示区域对解码的视频图像进行显示,其中,k=2,3,4……N,N为正整数。显示模块回收解除解码占用的内存,即回收解码占用位没有被标记的内存,用于下次解码库的解码占用。

S4,重复步骤S3,直至视频中所有帧均解码完毕。

参考帧使用的内存改由显示模块直接管理,仅在内存中标记参考帧内的图像区域而不再需要将参考帧进行去边复制,也不需要将解码图像数据拷贝到显示模块,每次解码显示过程节省了2次解码图像内存大小的拷贝操作,节省了内存宽带使用量。经分析,在现有技术的解码显示方法中,对1080p@30帧视频解码时,除去生成参考帧的过程,仅仅将参考帧进行去边、拷贝显示的过程操作内存读写量为:1080×1920×1.5×2=6220800Byte,其中1.5是H264默认采用的YUV420图像格式占用的内存大小与图像分辨率之间的倍数关系。1080p@30帧所需内存带宽为:6220800×30=186624000Byte=178MByte/s。

此外,参考帧的生成过程也需要进行大量内存读写操作。以本发明图3所示的参考帧生成过程为例,由于解码图像都是以宏块为单位进行的,下面以宏块的解码过程来统计图3解码所需的内存读写操作。宏块的大小为16×16像素,在YUV420格式下,每个宏块所需内存存储空间为16×16×1.5Byte。如图3所示,熵解码前码流大小不固定且相对于图像解码后的大小要低得多,读取码流的内存带宽在本统计中忽略;反量化、反变换、读取参考帧的对应区域,将预测值与残差相加生成重建帧,每一步都需要一次16×16×1.5Byte大小的内存读取或写入操作;环路滤波由于仅对宏块的部分边缘区域进行操作,这里近似为需要0.5×(16×16×1.5Byte)的内存读写量。

根据上述统计,图3对应生成参考帧的过程中每个宏块需要4.5×(16×16×1.5Byte)的内存读写。当解码分辨率为1080p的视频时,所需解码宏块的数量为1080×1920/(16×16)=8100,所需内存读写的总量为4.5×(16×16×1.5Byte)×8100=13996800Byte。解码一路1080p@30帧的带宽为13996800×30=419904000Byte/s=400MByte/s。

综上所述,可知采用现有技术的解码显示方法解码一路1080p@30帧的视频,所需的内存带宽为178+400=578MBtye/s。内存带宽使用过大,限制了系统并发多路解码时的最大路数。当一个会议系统需要同时解码多路视频时,内存带宽会成为提高解码路数的瓶颈。

当前主流的内存为DDR3 1600Mbps,峰值带宽为1600×64/8=12800MByte/s,由于内存读取和写入互斥以及系统本身开销等因素,实际能用于视频解码显示的带宽约为峰值带宽的一半,即6400MByte/s。由此计算得出,系统能够并发解码1080p@30帧视频的路数为6400/578=11.07,即11路。在使用DDR3 1600Mbps的系统上进行并发解码测试,最大并发解码路数测试结果也是11路,与计算得出的数据相符。这说明内存带宽已经成为提高系统并发解码视频路数的瓶颈。

在本发明所提供的在视频解码中减少内存带宽使用的方法中,参考帧解码后生成的视频图像使用的内存改由显示模块直接管理,仅在内存中标记参考帧内的图像区域而不再需要将参考帧进行去边复制, 也不需要将图像数据拷贝到显示模块,每次解码显示过程节省了2次解码图像内存大小的拷贝操作。此时1080p@30帧视频解码仅有生成参考帧内容这个过程仍然需要进行大量内存读写,使用的内存带宽为4.5×(16×16×1.5Byte)×8100×30=419904000Byte/s=400MByte/s。相比现有技术的解码显示方法中,对1080p@30帧解码流程所需的578MByte/s,内存带宽占用仅为400/578=69%。在6400MByte/s的系统实际可用带宽下,系统可并发解码路数为6400/400=16路,是原有的11路解码的并发路数的16/11=145%,系统并发解码能力显著提高。

综上所述,本发明所提供的在视频解码中减少内存带宽使用的方法,应用到视频解码显示过程中,具体改进体现在:

1)由于解码库不需要将参考帧内的数据去边,减少了一次解码图像目标大小的内存复制操作。

2)由于参考帧解码生成的视频图像直接保存在显示模块分配的内存上,减少了一次向显示模块的额外拷贝,每次显示过程节省了一个解码图像目标大小的内存带宽使用。

3)在本发明中一路1080p@30帧的H264解码,所需的内存的读写带宽为4.5×(16×16×1.5Byte)×8100×30=419904000Byte/s=400MByte/s。相比现有技术中,每路1080p@30帧的H264解码使用的578MByte/s内存带宽,本发明使用的内存带宽是现有技术的400/578=69%,大大节省了内存带宽的使用。在使用DDR3 1600Mbps内存的实际系统测试中,能够将系统并发解码1080p@30帧的并发路数由11路提高到16路,将系统的并发解码路数指标提高了(16-11)/11=45%,大大提高了系统的并发解码性能。

上面对本发明所提供的在视频解码中减少内存带宽使用的方法进行了详细的说明。对本领域的一般技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号