CN102769753A - H264编码器及编码方法 - Google Patents
H264编码器及编码方法 Download PDFInfo
- Publication number
- CN102769753A CN102769753A CN2012102722249A CN201210272224A CN102769753A CN 102769753 A CN102769753 A CN 102769753A CN 2012102722249 A CN2012102722249 A CN 2012102722249A CN 201210272224 A CN201210272224 A CN 201210272224A CN 102769753 A CN102769753 A CN 102769753A
- Authority
- CN
- China
- Prior art keywords
- data
- frame
- unit
- prediction
- reference data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明提供一种H.264编码器及编码方法,在实现帧间预测时,通过设定适当的搜索窗并对参考码流进行解码,从而获得当前宏块所需的参考数据,所涉及的存储空间仅包括用于参考的码流以及部分参考数据,大小远远小于一帧图像的大小,因而有效减少了H.264编码器所需参考帧的存储空间;同时由于没有使用片外存储器,整个H.264编码器的成本以及***功耗被有效降低,而且,由于片内存储的读写性能一般要远优于片外存储,所以在进行大尺寸图像编码时,可以在保证图像质量的同时,大大提高存储数据吞吐率。
Description
技术领域
本发明涉及图像处理技术领域,尤其涉及一种H.264编码器及编码方法。
背景技术
H.264标准是联合视频组(JVT,Joint Video Team)提出的一种高性能数字视频编解码标准,它最大的优势是具有很高的数据压缩率。在同等图像质量的条件下,H.264压缩比可以达到MPEG-4的2倍,之所以能有如此高的压缩比,这是因为H.264包含了一系列新的特征,比如多帧参考、变块尺寸运动补偿,还有高精度的亚像素运动补偿、去块效应滤波器等等。
根据H.264的标准规定,宏块(Macroblock或简称MB)类型主要分两大类:帧内(Intra)编码和帧间(Inter)编码。帧内编码使用当前宏块的相邻数据做预测,然后用当前宏块数据减去预测值,从而产生残差数据,最后对该残差进行后续的编码处理,整个过程不需要用到其他图像的数据。而帧间编码需要利用已经编码过的重建图像去做预测,即在重建图像中搜索出与当前块最匹配的数据块,由于视频图像在时间上的冗余性,帧间预测往往能找到比帧内预测更加匹配当前块的数据,这样就提高了整个图像压缩性能。由此可见,使用帧间编码能提高视频图像的压缩性能,但是在做帧间预测时需要一定的存储空间去存储一些重建图像,或称为参考帧(reference frame)图像。依照H.264标准,参考帧至少1帧,最多可为16帧,如果所需编码的图像尺寸较大(例如VGA:640x480),那么这个参考帧的存储空间还是很可观的。
如图1所示,目前公开的H.264编码器包括以下子模块:
Current Frame:输入当前图像数据;
ME/MC:Motion Estimation/Motion Compensation,即实现帧间预测;
Choose Intra Mode:通过比较编码代价,选择最佳的帧内预测模式;
Intra Prediction:根据最佳的帧内模式,实现帧内预测;
Mode Decision:根据编码代价的大小来选择使用帧内预测还是帧间预测;
DCT/Q:实现正向的DCT变换(即整数离散余弦变换)以及量化;
Entropy Encoder:熵编码模块;
IDCT/InvQ:实现反向DCT变换及反量化;
Deblocking:为了减小块效应而对图像进行滤波;
片外存储器:提供1~16帧的参考帧数据1~16 Reference Frames。
H.264标准采用整数离散余弦变换(即DCT变换)及量化来消除图像信号中的相关性及减小图像编码的动态范围以达到压缩的目的。在图1中,由当前帧得到的残差数据Dn经过正向的DCT变换以及量化处理后,一方面进入熵编码模块进行编码,然后给出图像压缩后的码流(bitstream);另一方面,进入反向DCT变换以及反量化后,再加上预测值,就得到了重建数据Fn',该重建数据可以作为邻块值参与当前帧的帧内预测,而且它们经过环路Deblocking滤波后被写入片外存储器,可以作为后续帧的帧间预测的参考数据。
现有技术的H.264编码器虽然可以通过使用片外存储器来实现帧间预测,满足大尺寸图像的编码时对存储器的空间以及数据吞吐率的高要求,但是另一方面会由于片外存储器很高的数据吞吐率而大大增加***成本以及***功耗,使得该H.264编码器不能满足低功耗设备的要求。
发明内容
本发明的目的在于提供一种H.264编码器及编码方法,可以在保证图像质量的同时,节约参考帧的存储空间,提高数据吞吐率,降低***成本以及***功耗。
为解决上述问题,本发明提出一种H.264编码器,包括:
编码子***,用于输入当前图像的数据,进行当前宏块的帧内预测或帧间预测以得到所述当前宏块的残差数据,对所述残差数据进行DCT变换和量化以及熵编码后输出所述当前宏块的码流,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据;
码流缓存模块,用于缓存参考码流,所述的参考码流为参考帧图像经过编码后的码流;
解码子***,用于对所述参考码流进行熵解码以及反向DCT变换和反量化,获得所述编码子***进行帧间预测时所需要的参考数据;
参考数据缓存模块,用于缓存所述解码子***获得的参考数据,并为所述编码子***提供当前宏块的帧间预测时的搜索窗内所需要的参考数据。
进一步地,所述编码子***包括:
控制单元,用于输入当前宏块数据,并给出一个宏块启动信号分送到其他单元以通知其他单元启动宏块相应的计算;
求残差单元,用于进行当前宏块的帧内预测或帧间预测,得到所述当前宏块的残差数据,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好所需要的参考数据,该参考数据是通过对参考码流进行解码而获得;
正向DCT变换和量化单元,用于对所述残差数据进行正向DCT变换和量化;
熵编码单元,用于将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流;
反向DCT变换和反量化单元,用于对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
重构单元,用于对反向DCT变换和反量化后的残差数据和所述当前宏块的帧内预测或帧间预测后的数据进行相加,得到重构数据,为下一宏块的帧内预测提供参考数据。
进一步地,所述求残差单元包括:
预测模式选择模块,用于根据编码代价的大小为当前宏块选择帧内预测或帧间预测模式;
帧间预测模块,用于在帧间预测模式下,为当前宏块设定搜索窗,并从所述参考数据缓存模块中选择出所述搜索窗需要的参考数据,并依据所述参考数据对当前宏块进行帧间预测;
帧内预测模式选择模块,用于根据先前已编码的宏块得到的重构数据,选择当前宏块的最佳帧内预测模式;
帧内预测模块,用于根据所述最佳帧内预测模式以及所述重构数据对所述当前宏块进行帧内预测;
多路选择模块,用于实现预测模式选择模块、帧内预测模块以及帧间预测模块输出的预测数据的选择。
进一步地,所述解码子***包括:
熵解码单元,用于对所述参考码流进行熵解码;
反向DCT变换和反量化单元,用于对所述熵解码单元输出的残差系数进行反向DCT变换和反量化;
帧内预测单元,用于根据所述熵解码单元输出的帧内预测模式进行帧内预测;
重构单元,用于对解码子***的反向DCT变换和反量化单元输出的残差数据和帧内预测单元输出的预测数据进行相加,得到重构数据,作为宏块帧间预测时搜索窗内所需要的参考数据。
进一步地,所述解码子***的帧内预测单元与所述编码子***的帧内预测模块为复用的同一个帧内预测器或者两个独立的帧内预测器。
进一步地,所述解码子***的反向DCT变换和反量化单元与所述编码子***的反向DCT变换和反量化单元为复用的同一个反向DCT变换/反量化器或两个独立的反向DCT变换/反量化器。
进一步地,所述解码子***还包括:滤波单元,用于在所述解码子***获得的参考数据缓存到所述参考数据缓存模块之前,对所述参考数据进行滤波。
进一步地,所述参考数据缓存模块为循环存储器,设有一定宏块数的存储空间,在缓存所述解码子***获得的参考数据时,当前获得的参考数据覆盖所述循环存储器中进行帧间预测时不会再使用到的参考数据。
进一步地,所述参考数据缓存模块存储的宏块数S的计算公式为:
S=Ceil(sw_height_by_pix/16)*pic_width_by_mb-(pic_width_by_mb-Ceil(sw_width_by_pix/16))+1
其中,Ceil(x)表示大于或等于x的最小整数;
sw_height_by_pix是以像素为单位表示的搜索窗的高度;
sw_width_by_pix是以像素为单位表示的搜索窗的宽度;
pic_width_by_mb是以宏块为单位表示的图像的宽度。
进一步地,所述参考数据缓存模块缓存的所述参考数据还包括P帧的数据,所述P帧的数据是通过编码子***以一个I帧为参考数据编码以及通过所述解码子***解码得到的。
进一步地,所述编码子***对输入的当前图像的后续P帧编码时,以所述参考数据缓存模块中的I帧数据或P帧数据为参考数据。
进一步地,所述解码子***包括用于提供所述P帧类型的参考数据的P帧解码***和所述I帧类型的参考数据的I帧解码***。
进一步地,所述I帧解码***包括:
第一熵解码单元,用于对所述参考码流中的I帧参考码流进行熵解码;
第一反向DCT变换和反量化单元,用于对所述第一熵解码单元输出的残差系数进行反向DCT变换和反量化;
第一帧内预测单元,用于根据所述第一熵解码单元输出的帧内预测模式进行帧内预测;
第一重构单元,用于对所述第一反向DCT变换和反量化单元输出的残差数据和第一帧内预测单元输出的预测数据进行相加,获得所述I帧参考码流的重构数据,以用于P帧参考码流的解码或用作当前宏块的帧间预测时其搜索窗内所需要的参考数据;
第一滤波单元,用于对第一重构单元的参考数据进行滤波。
进一步地,所述P帧解码***包括:
第二熵解码单元,用于对所述参考码流中的P帧参考码流进行熵解码;
第二反向DCT变换和反量化单元,用于对所述第二熵解码单元的残差系数进行反向DCT变换和反量化;
第二帧内预测单元,用于根据所述第二熵解码单元输出的帧内预测模式进行帧内预测;
第二帧间预测单元,用于根据所述的第一重构单元的重构数据和所述第二熵解码单元输出的运动向量进行帧间预测;
第二重构单元,用于对所述第二反向DCT变换和反量化单元输出的残差数据和第二帧内预测单元或第二帧间预测单元输出的预测数据进行相加,获得所述P帧参考码流的重构数据,以用于所述当前宏块的帧间预测时其搜索窗内所需要的参考数据;
第二滤波单元,用于对第二重构单元的参考数据进行滤波。
相应的,本发明还提供一种H.264的编码方法,包括以下步骤:
(1)判断当前宏块是否需要进行帧间预测,如果不需要帧间预测,则对当前宏块进行编码,并转入步骤(4),如果需要帧间预测,则进入下一步;
(2)为当前宏块设定搜索窗,判断搜索窗内的参考数据是否准备好,如果是,则根据参考数据对当前宏块进行编码,转入步骤(4),如果否,则进入下一步;
(3)对参考码流进行解码,获得一个宏块的参考数据,返回步骤(2);
(4)判断是否结束编码,如果未结束,则处理下一个宏块并返回步骤(1)。
进一步地,所述参考数据为I帧类型的参考数据。
进一步地,所述参考数据包括P帧类型的参考数据,所述P帧类型的参考数据是以I帧类型的参考帧数据为参考来编码、解码得到的。
进一步地,在步骤(1)中,在不需要帧间预测时,对当前宏块进行编码的过程包括:
依据先前已编码宏块重构处理后得到的参考数据进行当前宏块的帧内预测,得到帧内预测值,再用当前宏块数据减去该预测值,得到所述当前宏块的残差数据;
对所述当前宏块残差数据进行正向DCT变换和量化;
将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流并缓存;
对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
对反向DCT变换和反量化后的残差数据和所述最佳预测模式的预测数据进行重构,得到用于下一宏块的帧内预测的参考数据。
进一步地,在步骤(2)中,在搜索窗内准备当前宏块的参考数据的过程包括:
对缓存的参考码流进行熵解码;
对通过熵解码而得到的残差系数进行反向DCT变换和反量化;
根据熵解码输出的帧内预测模式进行帧内预测;
对反向DCT变换和反量化后的残差数据和帧内预测后的预测数据进行重构,获得当前宏块的帧间预测时的搜索窗内需要的参考数据并缓存。
进一步地,在步骤(2)中,在搜索窗内的参考数据准备好后,根据参考数据对当前宏块进行编码的过程包括:
依据所述参考数据进行当前宏块的帧间预测,通过比较帧内预测和帧间预测的编码代价,选择编码代价较小的预测模式作为当前宏块的最佳预测模式输出,并得到所述当前宏块的残差数据;
对所述当前宏块残差数据进行正向DCT变换和量化;
将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流并缓存;
对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
对反向DCT变换和反量化后的残差数据和所述最佳预测模式的预测数据进行重构,得到用于下一宏块的帧内预测的参考数据。
与现有技术相比,本发明所述提供的H.264编码器及编码方法,在实现帧间预测时,通过设定搜索窗获得当前宏块所需的参考数据,涉及的存储空间仅包括存储的参考码流以及部分参考数据,大小远远小于一帧图像的大小,因而有效减少了H.264编码器所需参考帧的存储空间;同时由于没有使用片外存储器,整个H.264编码器的成本以及***功耗被有效降低,而且,由于片内存储的读写性能一般要远优于片外存储,所以在进行大尺寸图像编码时,可以在保证图像质量的同时,大大提高存储数据吞吐率。
附图说明
图1是现有技术的一种H.264编码器的结构示意图;
图2是本发明的H.264编码器的结构示意图;
图3是本发明的H.264编码器的编码工作简易流程图;
图4是本发明实施例一的H.264编码器的结构示意图;
图5是本发明实施例一的H.264编码器的编码顺序及参考关系示意图;
图6是本发明实施例一的H.264编码器的宏块对应搜索窗位置示意图;
图7是本发明实施例一的H.264编码器的编码/解码子***的宏块对应关系示意图;
图8是本发明实施例二的H.264编码器的结构示意图;
图9是本发明实施例二的H.264编码器的编码/解码子***的宏块对应关系示意图;
图10是本发明实施例三的H.264编码器的结构示意图;
图11是本发明实施例三的H.264编码器的编码顺序及参考关系示意图;
图12是本发明实施例三的H.264编码器的编码/解码子***的宏块对应关系示意图。
具体实施方式
由于帧间预测宏块分为前向帧间预测宏块和双向帧间预测宏块,所以在H.264标准中存在三种主要的帧类型:I帧,P帧和B帧。其中I帧的所有宏块都是帧内预测,P帧包含了前向帧间预测宏块和帧内预测宏块,而B帧则包含了双向帧间预测宏块和帧内预测宏块。当然,实现P帧和B帧编码是需要参考帧的,而I帧则不需要。
因此,本发明提出的H.264编码器及编码方法,主要包括以下几个方面:
存储参考帧编码后的码流(bitstream),即参考码流;
帧间预测时,设定一定大小的搜索窗(search window),搜索最佳匹配块数据都在搜索窗内进行;
通过对参考码流进行解码,得到当前宏块所需的搜索窗数据,并存储这些数据;
考虑到对参考码流进行解码的独立性,所以参考码流中至少有一帧是I帧。
因此,请参考图2,本发明提供的H.264编码器,主要包括以下四部分:
编码子***10,用于输入当前图像的数据,进行当前宏块的帧内预测或帧间预测以得到所述当前宏块的残差数据,对所述残差数据进行DCT变换和量化以及熵编码后输出所述当前宏块的码流,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据;
码流缓存模块20,用于缓存参考码流,所述的参考码流为参考帧图像经过编码后的码流,即如果当前帧会被用于后续帧的参考帧,那么当前帧的所有宏块的码流会一直被保存,直到该帧作为参考帧的属性被取消;如果当前帧不被用于后续帧的参考帧,那么当前宏块的码流在被送出编码***后,比如写入SD卡,这些码流可以被后续的码流数据覆盖;
解码子***30,用于对所述参考码流进行熵解码以及反向DCT变换和反量化,获得当前宏块的帧间预测时的搜索窗内所需要的参考数据;
参考数据缓存模块40,用于缓存所述解码子***获得的参考数据,并为所述编码子***提供当前宏块的帧间预测时的搜索窗内所需要的参考数据。
请参考图3,本发明提供的H.264编码器的编码/解码过程都是以宏块(MB)为单位进行的,而且在对当前MB进行编码的同时,解码子***也可以同时工作,提前为下一个宏块准备参考数据,可以有效提高整个***的编码速度。在当前宏块的实现帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据,若是未准备参考数据,则调用解码子***30,按照宏块的光栅扫描顺序对参考码流进一步解码,获得当前宏块帧间预测所述的参考数据。
以下结合附图和具体实施例对本发明提出的H.264编码器及编码方法作进一步详细说明。
实施例一
请参考图4,本实施例提供一种H.264编码器,包括以下四部分:
编码子***10,用于输入当前图像的数据,进行当前宏块的帧内预测或帧间预测以得到所述当前宏块的残差数据,对所述残差数据进行DCT变换和量化以及熵编码后输出所述当前宏块的码流,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据;
码流缓存模块Bitstream Buffer20,用于缓存参考码流,所述的参考码流为参考帧图像经过编码后的码流;
解码子***30,用于对所述参考码流进行解码以及反向DCT变换和反量化,获得当前宏块的帧间预测时的搜索窗内所需要的参考数据;
参考数据缓存模块Reference Data40,用于缓存所述解码子***获得的参考数据,并为所述编码子***提供当前宏块的帧间预测时的搜索窗内所需要的参考数据。
请继续参考图4,本实施例中,编码子***10包括以下子单元:
控制单元Current Frame101,用于输入当前宏块数据,并给出一个宏块启动信号分送到其他单元以通知其他单元启动宏块相应的计算;
求残差单元,用于进行当前宏块的帧内预测或帧间预测,得到所述当前宏块的残差数据,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据,该参考数据是通过对参考码流进行解码而获得;
正向DCT变换和量化单元DCT/Q103,用于对所述残差数据进行正向DCT变换和量化;
熵编码单元Entropy Encoder104,用于将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流;
反向DCT变换和反量化单元IDCT/InvQ105,用于对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
重构单元106,用于对反向DCT变换和反量化后的残差数据和所述当前宏块的帧内预测或帧间预测后的数据进行相加,得到重构数据,为下一宏块的帧内预测提供参考数据。
请继续参考图4,本实施例中,所述求残差单元包括以下子模块:
预测模式选择模块Mode Decision102a,用于根据编码代价的大小为当前宏块选择帧内预测或帧间预测模式;
帧间预测模块ME/MC(Motion Estimation/Motion Compensation)102b,用于在帧间预测模式下,为当前宏块设定搜索窗,并从所述参考数据缓存模块中选择出所述搜索窗需要的参考数据,并依据所述参考数据对当前宏块进行帧间预测;
帧内预测选择模块Choose Intra Mode102c,用于根据先前已编码的宏块得到的重构数据,通过比较各帧内预测模式的编码代价来选择编码代价最小的预测模式作为当前宏块的最佳帧内预测模式;
帧内预测模块Intra Prediction 102d,用于根据所述最佳帧内预测模式以及所述重构数据对所述当前宏块进行帧内预测;
多路选择模块MUX102e,用于实现预测模式选择模块102a、帧间预测模块102b以及帧内预测模块102d输出的预测数据的选择;
计算模块102f,用于将当前宏块的输入数据与帧内预测或帧间预测数据相减,得到当前宏块的残差数据。
请继续参考图4,本实施例中,所述解码子***30包括以下子单元:
熵解码单元Entropy Decoder301,用于对所述参考码流进行熵解码;
反向DCT变换和反量化单元IDCT/InvQ302,用于对所述熵解码单元输出的残差系数进行反向DCT变换和反量化;
帧内预测单元Intra Prediction303,用于根据所述熵解码单元输出的帧内预测模式以及先前已解码的宏块的重构数据来进行帧内预测;
重构单元304,用于对反向DCT变换和反量化单元302输出的残差数据以及帧内预测单元303输出的预测数据进行相加,得到重构数据,该重构数据为当前宏块的帧间预测时其搜索窗内所需要的参考数据。
本实施例中,所述解码子***30的帧内预测单元303与所述求残差单元的帧内预测模块102d为两个独立的帧内预测器;所述解码子***30的反向DCT变换和反量化单元302与所述编码子***10的反向DCT变换和反量化单元105为两个独立的反向DCT变换/反量化器。
本实施例中,所述解码子***30还包括:滤波单元Deblocking305,用于在所述重构单元304获得的参考数据缓存到所述参考数据缓存模块之前,对所述参考数据进行滤波,以减小块效应。在本发明的其他实施例中,也可以省去Deblocking305。
本实施例中,Bitstream Buffer20与Reference Data40优选为SRAM。其中,Bitstream Buffer20的大小跟编码图像尺寸以及选用的量化系数相关。另外,如果要实现B帧编码,那么必须先缓存当前图像数据,等到下一帧图像编码完成后再进行编码,这增加了编码***的存储空间。因此,为了减小存储空间以及降低编码***成本,本实施例的H.264编码器更适用于I帧和P帧编码。
本实施例中,所述参考数据缓存模块Reference Data40是一个循环存储器(cyclic buffer),设有一定宏块数的存储空间,在缓存所述解码子***获得的参考数据时,当前获得的参考数据将覆盖所述循环存储器中不会再被用于帧间预测的参考数据,也就是说解码新生成的数据会覆盖“旧”数据;当Reference Data40存储的基本数据单元是一个宏块,那么它最少需要存储的宏块数S可以用下面的公式来表示:
S=Ceil(sw_height_by_pix/16)*pic_width_by_mb-(pic_width_by_mb-Ceil(sw_width_by_pix/16))+1
其中,Ceil(x)表示大于或等于x的最小整数;
sw_height_by_pix是以像素为单位表示的搜索窗的高度;
sw_width_by_pix是以像素为单位表示的搜索窗的宽度;
pic_width_by_mb是以宏块为单位表示的图像的宽度。
下面举例说明基于图4所示的H.264编码器的具体操作方法,假设需要编码的图像尺寸为640x480,图像格式为Y∶Cb:Cr=4:2:0,搜索窗的大小为592x48。首先,根据上述宏块数的公式可以得到Reference Data40的存储空间最小为118个宏块,但是为了读写寻址的便利性,设定该存储空间大小为120个宏块,即三个完整的宏块条(MB-line),也就是45Kbyte;另外,一个VGA图像的I帧码流大小一般可以控制在25Kbyte以内。综上,为了实现VGA图像的P帧编码,传统的H.264编码器至少需要存储一个参考图像,即450Kbyte的存储空间,而使用本实施例的H.264编码器的编码方法,则只需要70Kbyte的存储空间。具体过程见图5、图6、图7。
图5为本实施例的H.264编码器图像编码顺序以及它们之间的参考关系。值得说明的是,P帧不会被限制只参考前面最近的I帧,例如图中P-24帧如果要用I-0帧做参考,那么必须保证I-0帧的码流还存储在Bitstream Buffer20内,而没有被I-22帧的码流所覆盖,当然付出的代价就是增加了存储空间;另外,两个I帧之间的P帧个数也是可以任意的。
图6描述了搜索窗位置的移动过程。图中一个虚线框为P帧第一个宏块(即MB0)的搜索窗,随着编码宏块按照光栅扫描(raster scan)的顺序递增,那么搜索窗的位置也相应改变,图中另一个虚线框即为P帧中MB59的搜索窗。虽然搜索窗的大小是可以自由设定的,但是在实际应用中,一个编码***所拥有的片内存储空间是固定的,所以可根据上述Reference Data40存储的宏块数的公式倒推出搜索窗的最大值。
图7为编码/解码子***各自的启动时间以及它们的相对关系。解码子***会提前开始工作,按照光栅扫描(raster scan)的顺序对参考帧的宏块进行解码,为当前P帧准备参考数据。当P帧第一个宏块的搜索窗所需的参考数据都准备好后,编码子***开始工作,接下来编码/解码同时进行。当解码子***进行到MB120时,Reference Data40中参考数据的存储空间已经存满了,这时候就要把MB120的解码数据覆盖到原先存MB0数据的空间,因为MB0的数据再也不会被用作参考数据了,即所谓的循环存储。最后,解码子***会提前结束,如果后续帧仍然是个P帧,那么解码子***会重新对参考帧进行解码。
需要说明的是,如果要提升本实施例的H.264编码器的编码性能,一方面可以加大搜索窗;另一方面可以多存储几帧参考码流,形成多帧参考。这两点都是为了能找到更加匹配当前宏块的参考数据,当然代价就是增加了片内存储空间,只要所用的存储空间小于传统的实现方案,那么这样做就是有意义的。
实施例二
对于H.264编码器的硬件实现,通常需要从以下四个方面考虑:1).硬件实现的面积;2).工作时钟的最高频率;3).编码速度,即处理每个宏块所需的时钟周期(cycles);4).编码性能,即在相同的图像质量下生成的码流越小越好。而这几个方面又是相互影响的,例如要减小所用面积,就要共享一部分逻辑单元或者减小存储空间,那么就会降低编码速度或是编码性能;如果要提高最大工作时钟频率,那么一般情况下就会增大面积;如果要提升编码性能,一般会加大计算复杂度以及存储空间,以便预测值能更加匹配当前宏块数据,这样又增加了面积。
基于上述的H.264编码器的硬件实现的四个因素考量,本实施例提供一种能够可以相对节省面积的H.264编码器,其中的编码子***和解码子***可以复用部分相同逻辑块,例如复用反向DCT/反量化以及帧内预测的功能模块,请参考图8,具体结构包括:
编码子***10,用于输入当前图像的数据,进行当前宏块的帧内预测或帧间预测以得到所述当前宏块的残差数据,对所述残差数据进行DCT变换和量化以及熵编码后输出所述当前宏块的码流,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据;
码流缓存模块Bitstream Buffer20,用于缓存参考码流,所述的参考码流为参考帧图像编码后的码流,即如果当前帧会被用于后续帧的参考帧,那么当前帧的所有宏块的码流会一直被保存,直到该帧作为参考帧的属性被取消;如果当前帧不被用于后续帧的参考帧,那么当前宏块的码流在被送出编码***后,比如写入SD卡,这些码流可以被后续的码流数据覆盖;
解码子***30,用于对参考码流进行熵解码以及反向DCT变换和反量化,获得当前宏块的帧间预测时的搜索窗内所需要的参考数据;
参考数据缓存模块Reference Data40,用于缓存所述解码子***获得的参考数据,并为所述编码子***提供当前宏块的帧间预测时的搜索窗内所需要的参考数据。
请继续参考图8,本实施例中,编码子***10包括以下子单元:
控制单元Current Frame101,用于输入当前宏块数据,并给出一个宏块启动信号分送到其他单元以通知其他单元启动宏块相应的计算;
求残差单元,用于进行当前宏块的帧内预测或帧间预测,得到所述当前宏块的残差数据,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据,该参考数据是通过对参考码流进行解码而获得;
正向DCT变换和量化单元DCT/Q 103,用于对所述残差数据进行正向DCT变换和量化;
熵编码单元Entropy Encoder 104,用于将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流;
反向DCT变换和反量化单元IDCT/InvQ105,用于对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
重构单元106,用于对反向DCT变换和反量化后的残差数据Dn以及所述当前宏块的帧内预测或帧间预测后的预测数据进行相加,得到重构数据,为下一宏块的帧内预测提供参考数据。
请继续参考图8,本实施例中,所述求残差单元包括以下子模块:
预测模式选择模块Mode Decision102a,用于根据编码代价的大小为当前宏块选择帧内预测或帧间预测模式;
帧间预测模块ME/MC(Motion Estimation/Motion Compensation)102b,用于在帧间预测模式下,为当前宏块设定搜索窗,并从所述参考数据缓存模块中选择出所述搜索窗需要的参考数据,并依据所述参考数据对当前宏块进行帧间预测;
帧内预测选择模块Choose Intra Mode 102c,用于根据先前已编码的宏块得到的重构数据,通过比较各帧内预测模式的编码代价,选择当前宏块的最佳帧内预测模式;
帧内预测模块Intra Prediction 102d,用于根据所述最佳帧内预测模式以及所述重构数据对所述当前宏块进行帧内预测;
多路选择模块MUX 102e,用于实现预测模式选择模块102a、帧间预测模块102b以及帧内预测模块102d输出的预测数据的选择;
计算模块102f,用于将当前宏块的输入数据与帧内预测或帧间预测数据相减,得到当前宏块的残差数据。
请继续参考图8,本实施例中,所述解码子***30包括以下子单元:
熵解码单元Entropy Decoder 301,用于对所述参考码流进行熵解码;
反向DCT变换和反量化单元IDCT/InvQ105,即所述编码子***10的反向DCT变换和反量化单元105用于对所述熵解码单元输出的残差系数进行反向DCT变换和反量化;
帧内预测单元Intra Prediction 102d,即所述求残差单元的帧内预测模块102d,用于根据所述熵解码单元301输出的帧内预测模式以及先前已解码的宏块的重构数据来进行帧内预测;
重构单元304,用于对反向DCT变换和反量化单元105输出的残差数据以及帧内预测模块102d输出后的预测数据进行相加,得到重构数据,作为宏块帧间预测时搜索窗内所需要的参考数据。
本实施例中,所述解码子***30还包括:滤波单元Deblocking 305,用于在所述重构单元304获得的参考数据缓存到所述参考数据缓存模块之前,对所述参考数据进行滤波,以减小块效应。在本发明的其他实施例中,也可以省去Deblocking 305。
请参考图9,由于本实施例的H.264编码器中编码子***和解码子***复用了部分逻辑,那么编码子***和解码子***就不能同时工作,只能采用分时进行编码和解码,这样处理一个宏块数据就需要更多的时钟周期,所以编码速度相对实施例一就有所下降。
实施例三
同样地,基于实施例二中所述的H.264编码器的硬件实现的四个因素考量,本实施例提供一种通过多存储几帧参考码流以形成多帧参考来提升编码性能的H.264编码器,请参考图10,具体结构包括:
编码子***10,用于输入当前图像的数据,进行当前宏块的帧内预测或帧间预测以得到所述当前宏块的残差数据,对所述残差数据进行DCT变换和量化以及熵编码后输出所述当前宏块的码流,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据;
码流缓存模块Bitstream Buffer20,用于缓存参考码流,所述的参考码流为参考帧图像编码后的码流,即如果当前帧会被用于后续帧的参考帧,那么当前帧的所有宏块的码流会一直被保存,直到该帧作为参考帧的属性被取消;如果当前帧不被用于后续帧的参考帧,那么当前宏块的码流在被送出编码***后,比如写入SD卡,这些码流可以被后续的码流数据覆盖;
解码子***30,用于对所缓存的参考码流进行熵解码以及反向DCT变换和反量化,获得当前宏块的帧间预测时的搜索窗内所需要的参考数据;
参考数据缓存模块Reference Data40,用于缓存所述解码子***获得的参考数据,并为所述编码子***提供当前宏块的帧间预测时的搜索窗内所需要的参考数据。
请继续参考图10,本实施例中,编码子***10包括以下子单元:
控制单元Current Frame101,用于输入当前宏块数据,并给出一个宏块启动信号分送到其他单元以通知其他单元启动宏块相应的计算;
求残差单元,用于进行当前宏块的帧内预测或帧间预测,得到所述当前宏块的残差数据,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好需要的参考数据,该参考数据是通过对参考码流进行解码而获得;
正向DCT变换和量化单元DCT/Q103,用于对所述残差数据进行正向DCT变换和量化;
熵编码单元Entropy Encoder104,用于将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流;
反向DCT变换和反量化单元IDCT/InvQ105,用于对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
重构单元106,用于对反向DCT变换和反量化后的残差数据Dn以及所述当前宏块的帧内预测或帧间预测后的预测数据进行相加,得到用于下一宏块的帧内预测的参考数据。
请继续参考图10,本实施例中,所述求残差单元包括以下子模块:
预测模式选择模块Mode Decision102a,用于根据编码代价的大小为当前宏块选择帧内预测或帧间预测模式;
帧间预测模块ME/MC(Motion Estimation/Motion Compensation)102b,用于在帧间预测模式下,为当前宏块设定搜索窗,并从所述参考数据缓存模块中选择出所述搜索窗需要的参考数据,并依据所述参考数据对当前宏块进行帧间预测;
帧内预测选择模块Choose Intra Mode102c,用于根据先前已编码的宏块得到的重构数据,通过比较各帧内预测模式的编码代价来选择编码代价最小的预测模式作为当前宏块的最佳帧内预测模式;
帧内预测模块Intra Prediction 102d,用于根据所述最佳帧内预测模式以及所述重构数据对所述当前宏块进行帧内预测;
多路选择模块MUX102e,用于实现预测模式选择模块102a、帧间预测模块102b以及帧内预测模块102d输出的预测数据的选择;
计算模块102f,用于将当前宏块的输入数据与帧内预测或帧间预测数据相减,得到当前宏块的残差数据。
请继续参考图10,本实施例中,由于其中有P帧作为参考数据,所以在解码子***中就要增加一套能对P帧进行解码的逻辑,因此,所述解码子***30包括用于提供所述P帧类型的参考数据的P帧解码***和所述I帧类型的参考数据的I帧解码***。
其中,请继续参考图10,所述I帧解码***包括:
第一熵解码单元Entropy Decoder 301b,用于对所述参考码流中的I帧参考码流进行熵解码;
第一反向DCT变换和反量化单元IDCT/InvQ 302b,用于对所述第一熵解码单元301b输出的残差系数进行反向DCT变换和反量化;
第一帧内预测单元Intra Prediction 303b,用于根据所述第一熵解码单元301b输出的帧内预测模式进行帧内预测;
第一重构单元304b,用于对所述第一反向DCT变换和反量化单元302b输出的残差数据以及第一帧内预测单元303b输出的预测数据进行相加,获得所述I帧参考码流提供的当前宏块的帧间预测时其搜索窗内所需要的参考数据,同时该参考数据可用于P帧参考码流解码时的帧间预测。
第一滤波单元Deblocking 305b,用于对第一重构单元304b的参考数据进行滤波。
所述P帧解码***包括:
第二熵解码单元Entropy Decoder 301a,用于对所述参考码流中的P帧参考码流进行熵解码;
第二反向DCT变换和反量化单元IDCT/InvQ 302a,用于对所述第二熵解码单元301a输出的残差系数进行反向DCT变换和反量化;
第二帧内预测单元Intra Prediction 303a,用于根据所述第二熵解码单元301a输出的帧内预测模式进行帧内预测;
第二帧间预测单元MC 306,用于根据所述的第一重构单元304b的重构数据以及所述第二熵解码单元301a输出的运动向量进行帧间预测;
多路选择器MUX 307,用于实现第二帧内预测单元Intra Prediction 303a和第二帧间预测单元MC 306输出的预测数据的选择;
第二重构单元304a,用于对所述第二反向DCT变换和反量化单元302a输出的残差数据以及第二帧内预测单元303a或第二帧间预测单元306处理后的预测数据进行相加,获得所述P帧参考码流的重构数据,以用于所述当前宏块的帧间预测时其搜索窗内所需要的参考数据,而且如果该参考码流下一个宏块是帧内预测,那么该重构数据也作为解码时帧内预测的参考数据;
第二滤波单元Deblocking 305a,用于对第二重构单元304a的参考数据进行滤波。
请继续参考图10,本实施例中,参考数据缓存模块包括用于缓存I帧类型的参考数据的I帧缓存模块401、缓存P帧类型的P帧缓存模块402以及用于选择I帧类型或P帧类型的参考数据的选择器403。
在本发明的其他实施例中,也可以省去Deblocking 305a、305b,也可以参考实施例二的原理,将编码子***与解码子***中相同功能的模块或/或单元部分复用,复用后只会影响编/解码子***运行的相对关系。
图11所示为本实施例的H.264编码器的编码顺序以及参考关系。值得说明的是,作为参考帧的P'帧一定是在I帧之后,而且该P'帧必须以I帧作参考。另外,后续的P帧既可以用P'帧作参考,也可以用P'帧的参考帧(即I帧)作参考。
图12描述了编码/解码子***运行的相对关系。该图仍然假设编码图像尺寸为640x480,搜索窗大小为592x48。由图12可知,如果当前帧要参考P'帧,那么就要先解出P'帧的参考帧(即I帧),然后才能对P'帧进行解码,以上两步完成后才能对当前P帧进行编码。
本实施例的H.264编码器虽然增加了***的实现复杂度,而且增加了片内存储空间,但是由于提供多帧参考,因此提高了编码***的性能,可以作为实际应用的一种选择。
此外,本发明还提供一种H.264的编码方法,包括以下步骤:
(1)判断当前宏块是否需要进行帧间预测,如果不需要帧间预测,则对当前宏块进行编码,并转入步骤(4),如果需要帧间预测,则进入下一步;
(2)为当前宏块设定搜索窗,判断搜索窗内的参考数据是否准备好,如果是,则根据参考数据对当前宏块进行编码,转入步骤(4),如果否,则进入下一步;
(3)对参考码流进行解码,获得一个宏块的参考数据,返回步骤(2);
(4)判断是否结束编码,如果未结束,则处理下一个宏块并返回步骤(1)。
其中所述参考数据可以为I帧类型的参考数据,还可以包括P帧类型的参考数据,所述P帧类型的参考数据是以I帧类型的参考帧数据为参考来编码、解码得到的。
在步骤(1)中,在不需要帧间预测时,对当前宏块进行编码的过程包括:
依据先前已编码宏块重构处理后得到的参考数据进行当前宏块的帧内预测,得到帧内预测值,再用当前宏块数据减去该预测值,得到所述当前宏块的残差数据;
对所述当前宏块残差数据进行正向DCT变换和量化;
将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流并缓存;
对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
对反向DCT变换和反量化后的残差数据和所述最佳预测模式的预测数据进行重构,得到用于下一宏块的帧内预测的参考数据。
在步骤(2)中,在搜索窗内准备当前宏块的参考数据的过程包括:
对缓存的参考码流进行熵解码;
对通过熵解码而得到的残差系数进行反向DCT变换和反量化;
根据熵解码输出的帧内预测模式进行帧内预测;
对反向DCT变换和反量化后的残差数据和帧内预测后的预测数据进行重构,获得当前宏块的帧间预测时的搜索窗内需要的参考数据并缓存。
在步骤(2)中,在搜索窗内的参考数据准备好后,根据参考数据对当前宏块进行编码的过程包括:
依据所述参考数据进行当前宏块的帧间预测,通过比较帧内预测和帧间预测的编码代价,选择编码代价较小的预测模式作为当前宏块的最佳预测模式输出,并得到所述当前宏块的残差数据;
对所述当前宏块残差数据进行正向DCT变换和量化;
将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流并缓存;
对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
对反向DCT变换和反量化后的残差数据和所述最佳预测模式的预测数据进行重构,得到用于下一宏块的帧内预测的参考数据。
由上所述可知,本实施例提出的H.264编码器及编码方法并不是存储参考帧所有的原始数据,而是细化到宏块级,存储当前宏块所需的参考数据,这些参考数据又是通过对参考码流进行解码而得到的,这样参考码流加上一些参考数据的存储空间就代替了整个参考帧的存储空间。由于所存的参考数据必需包含整个搜索窗的数据,所以参考数据的存储空间与搜索窗大小有关,而且根据图像压缩性能,搜索窗的大小可以自由设定,但是一般会远远小于一帧图像的大小,这样就减少了H.264编码器所需的存储空间。因此根据上述方法,使得利用较小的片内SRAM就可以进行H.264编码,具体的硬件实现方案如图3所示。由于没有使用片外存储器,那么整个编码***的成本降低了,同时也减小了***功耗。而且,片内SRAM的读写性能一般要远优于片外SDRAM存储器,所以在进行大尺寸图像编码时,存储器的数据吞吐率也不会成为问题。
综上所述,本发明所述提供的H.264编码器及编码方法,在实现帧间预测时,通过设定搜索窗获得当前宏块所需的参考数据,涉及的存储空间仅包括存储的码流以及部分参考数据,大小远远小于一帧图像的大小,因而有效减少了H.264编码器所需参考帧的存储空间;同时由于没有使用片外存储器,整个H.264编码器的成本以及***功耗被有效降低,而且,由于片内存储的读写性能一般要远优于片外存储,所以在进行大尺寸图像编码时,可以在保证图像质量的同时,大大提高存储数据吞吐率。
显然,本领域的技术人员可以对发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (14)
1.一种H.264编码器,其特征在于,包括:
编码子***,用于输入当前图像的数据,进行当前宏块的帧内预测或帧间预测以得到所述当前宏块的残差数据,对所述残差数据进行DCT变换和量化以及熵编码后输出所述当前宏块的码流,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在搜索窗内准备好需要的参考数据;
码流缓存模块,用于缓存参考码流,所述的参考码流为参考帧图像经过编码后的码流;
解码子***,用于对所述参考码流进行熵解码以及反向DCT变换和反量化,获得所述编码子***进行帧间预测时所需要的参考数据;
参考数据缓存模块,用于缓存所述解码子***获得的参考数据,并为所述编码子***提供当前宏块的帧间预测时的搜索窗内所需要的参考数据。
2.如权利要求1所述的H.264编码器,其特征在于,所述编码子***包括:
控制单元,用于输入当前宏块数据,并给出一个宏块启动信号分送到其他单元以通知其他单元启动宏块相应的计算;
求残差单元,用于进行当前宏块的帧内预测或帧间预测,得到所述当前宏块的残差数据,其中,在对当前宏块进行帧间预测时,设定当前宏块的搜索窗,并在所述搜索窗内准备好所需要的参考数据,该参考数据是通过对参考码流进行解码而获得;
正向DCT变换和量化单元,用于对所述残差数据进行正向DCT变换和量化;
熵编码单元,用于将所述对正向DCT变换和量化后的残差数据进行熵编码,生成所述当前宏块的码流;
反向DCT变换和反量化单元,用于对正向DCT变换和量化后的残差数据进行反向DCT变换和反量化;
重构单元,用于对反向DCT变换和反量化后的残差数据和所述当前宏块的帧内预测或帧间预测后的预测数据进行相加,得到重构数据,为下一宏块的帧内预测提供参考数据。
3.如权利要求2所述的H.264编码器,其特征在于,所述求残差单元包括:
预测模式选择模块,用于根据编码代价的大小为当前宏块选择帧内预测或帧间预测模式;
帧间预测模块,用于在帧间预测模式下,为当前宏块设定搜索窗,并从所述参考数据缓存模块中选择出所述搜索窗需要的参考数据,并依据所述参考数据对当前宏块进行帧间预测;
帧内预测模式选择模块,用于根据先前已编码的宏块得到的重构数据,选择编码代价最小的预测模式作为当前宏块的最佳帧内预测模式;
帧内预测模块,用于根据所述最佳帧内预测模式以及所述重构数据对当前宏块进行帧内预测;
多路选择模块,用于实现预测模式选择模块、帧内预测模块以及帧间预测模块输出的预测数据的选择。
4.如权利要求2所述的H.264编码器,其特征在于,所述解码子***包括:
熵解码单元,用于对参考码流进行熵解码;
反向DCT变换和反量化单元,用于对所述熵解码单元输出的残差系数进行反向DCT变换和反量化;
帧内预测单元,用于根据所述熵解码单元输出的帧内预测模式以及先前已解码的宏块的重构数据来进行帧内预测;
重构单元,用于对所述解码子***的反向DCT变换和反量化单元输出的残差数据以及帧内预测单元输出的预测数据进行相加,得到重构数据,作为宏块帧间预测时搜索窗内所需要的参考数据。
5.如权利要求4所述的H.264编码器,其特征在于,所述解码子***的帧内预测单元与所述求残差单元的帧内预测模块为复用的同一个帧内预测器或者两个独立的帧内预测器。
6.如权利要求4所述的H.264编码器,其特征在于,所述解码子***的反向DCT变换和反量化单元与所述编码子***的反向DCT变换和反量化单元为复用的同一个反向DCT变换/反量化器或两个独立的反向DCT变换/反量化器。
7.如权利要求4所述的H.264编码器,其特征在于,所述解码子***还包括:滤波单元,用于在所述解码子***获得的参考数据缓存到所述参考数据缓存模块之前,对所述参考数据进行滤波。
8.如权利要求1所述的H.264编码器,其特征在于,所述参考数据缓存模块为循环存储器,在缓存所述解码子***获得的参考数据时,当前获得的参考数据覆盖所述循环存储器中进行帧间预测时不会再使用到的参考数据。
9.如权利要求8所述的H.264编码器,其特征在于,所述参考数据缓存模块设有一定宏块数的存储空间,其存储的宏块数S的计算公式为:
S=Ceil(sw_height_by_pix/16)*pic_width_by_mb-(pic_width_by_mb-Ceil(sw_width_by_pix/16))+1
其中,Ceil(x)表示大于或等于x的最小整数;
sw_height_by_pix是以像素为单位表示的搜索窗的高度;
sw_width_by_pix是以像素为单位表示的搜索窗的宽度;
pic_width_by_mb是以宏块为单位表示的图像的宽度。
10.如权利要求1所述的H.264编码器,其特征在于,所述解码子***包括用于提供I帧类型的参考数据的I帧解码***,所述I帧解码***包括:
第一熵解码单元,用于对所述参考码流中的I帧参考码流进行熵解码;
第一反向DCT变换和反量化单元,用于对所述第一熵解码单元输出的残差系数进行反向DCT变换和反量化;
第一帧内预测单元,用于根据所述第一熵解码单元输出的帧内预测模式进行帧内预测;
第一重构单元,用于对所述第一反向DCT变换和反量化单元输出的残差数据和第一帧内预测模块输出的预测数据进行相加,获得所述I帧参考码流的重构数据,以用于P帧参考码流的解码或用作当前宏块的帧间预测时其搜索窗内所需要的参考数据;
第一滤波单元,用于对第一重构单元的参考数据进行滤波。
11.如权利要求10所述的H.264编码器,其特征在于,所述解码子***还包括用于提供P帧类型的参考数据的P帧解码***,所述P帧解码***包括:
第二熵解码单元,用于对所述参考码流中的P帧参考码流进行熵解码;
第二反向DCT变换和反量化单元,用于对所述第二熵解码单元的残差系数进行反向DCT变换和反量化;
第二帧内预测单元,用于根据所述第二熵解码单元输出的帧内预测模式进行帧内预测;
第二帧间预测单元,用于根据所述的第一重构单元的重构数据以及所述第二熵解码单元输出的运动向量进行帧间预测;
第二重构单元,用于对所述第二反向DCT变换和反量化单元输出的残差数据和第二帧内预测单元或第二帧间预测单元输出的预测数据进行相加,获得所述P帧参考码流的重构数据,以用于所述当前宏块的帧间预测时其搜索窗内所需要的参考数据;
第二滤波单元,用于对第二重构单元的参考数据进行滤波。
12.一种H.264编码方法,其特征在于,包括如下步骤:
(1)判断当前宏块是否需要进行帧间预测,如果不需要帧间预测,则对当前宏块进行编码,转入步骤(4),如果需要帧间预测,则进入下一步;
(2)为当前宏块设定搜索窗,判断搜索窗内的参考数据是否准备好,如果是,则根据参考数据对当前宏块进行编码,转入步骤(4),如果否,则进入下一步;
(3)对参考码流进行解码,获得一个宏块的参考数据,返回步骤(2);
(4)判断是否结束编码,如果未结束,则处理下一个宏块并返回步骤(1)。
13.如权利要求12所述的H.264编码方法,其特征在于,所述参考数据为I帧类型的参考数据。
14.如权利要求12所述的H.264编码方法,其特征在于,所述参考数据包括P帧类型的参考数据,所述P帧类型的参考数据是以I帧类型的参考帧数据为参考来编码、解码得到的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210272224.9A CN102769753B (zh) | 2012-08-02 | 2012-08-02 | H264编码器及编码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210272224.9A CN102769753B (zh) | 2012-08-02 | 2012-08-02 | H264编码器及编码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102769753A true CN102769753A (zh) | 2012-11-07 |
CN102769753B CN102769753B (zh) | 2015-12-09 |
Family
ID=47096989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210272224.9A Active CN102769753B (zh) | 2012-08-02 | 2012-08-02 | H264编码器及编码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102769753B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104038766A (zh) * | 2014-05-14 | 2014-09-10 | 三星电子(中国)研发中心 | 用于以图像帧为基础执行并行视频编码的装置及其方法 |
CN105530517A (zh) * | 2014-09-29 | 2016-04-27 | 炬芯(珠海)科技有限公司 | 一种解码器及有损解码视频图像的方法 |
CN110035293A (zh) * | 2019-04-22 | 2019-07-19 | 湖南国科微电子股份有限公司 | 电子设备及图像编码数据存储方法与装置 |
CN110798684A (zh) * | 2019-09-30 | 2020-02-14 | 武汉兴图新科电子股份有限公司 | 一种图像片段错峰编码传输方法 |
CN111343456A (zh) * | 2018-12-18 | 2020-06-26 | 瑞萨电子株式会社 | 视频编码设备及其操作方法以及配备有视频编码设备的车辆 |
WO2023193701A1 (zh) * | 2022-04-06 | 2023-10-12 | 展讯通信(上海)有限公司 | 图像编码方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1905677A (zh) * | 2006-08-07 | 2007-01-31 | 清华大学 | 可变块大小运动补偿的数据缓存方法及其实现装置 |
CN1964495A (zh) * | 2006-12-08 | 2007-05-16 | 北京中星微电子有限公司 | 对实时数码视频影流进行缓存控制的方法和装置 |
CN101340588A (zh) * | 2008-08-20 | 2009-01-07 | 炬力集成电路设计有限公司 | 运动估计方法、装置和多媒体处理器 |
CN101502125A (zh) * | 2006-09-06 | 2009-08-05 | 索尼株式会社 | 图像数据处理方法、用于图像数据处理方法的程序、记录有用于图像数据处理方法的程序的记录介质和图像数据处理装置 |
CN101924938A (zh) * | 2010-08-11 | 2010-12-22 | 上海交通大学 | 视频解码宏块预测与边界滤波中相邻块信息的处理方法 |
-
2012
- 2012-08-02 CN CN201210272224.9A patent/CN102769753B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1905677A (zh) * | 2006-08-07 | 2007-01-31 | 清华大学 | 可变块大小运动补偿的数据缓存方法及其实现装置 |
CN101502125A (zh) * | 2006-09-06 | 2009-08-05 | 索尼株式会社 | 图像数据处理方法、用于图像数据处理方法的程序、记录有用于图像数据处理方法的程序的记录介质和图像数据处理装置 |
CN1964495A (zh) * | 2006-12-08 | 2007-05-16 | 北京中星微电子有限公司 | 对实时数码视频影流进行缓存控制的方法和装置 |
CN101340588A (zh) * | 2008-08-20 | 2009-01-07 | 炬力集成电路设计有限公司 | 运动估计方法、装置和多媒体处理器 |
CN101924938A (zh) * | 2010-08-11 | 2010-12-22 | 上海交通大学 | 视频解码宏块预测与边界滤波中相邻块信息的处理方法 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104038766A (zh) * | 2014-05-14 | 2014-09-10 | 三星电子(中国)研发中心 | 用于以图像帧为基础执行并行视频编码的装置及其方法 |
CN105530517A (zh) * | 2014-09-29 | 2016-04-27 | 炬芯(珠海)科技有限公司 | 一种解码器及有损解码视频图像的方法 |
CN105530517B (zh) * | 2014-09-29 | 2018-07-31 | 炬芯(珠海)科技有限公司 | 一种解码器及有损解码视频图像的方法 |
CN111343456A (zh) * | 2018-12-18 | 2020-06-26 | 瑞萨电子株式会社 | 视频编码设备及其操作方法以及配备有视频编码设备的车辆 |
CN110035293A (zh) * | 2019-04-22 | 2019-07-19 | 湖南国科微电子股份有限公司 | 电子设备及图像编码数据存储方法与装置 |
CN110035293B (zh) * | 2019-04-22 | 2022-01-11 | 湖南国科微电子股份有限公司 | 电子设备及图像编码数据存储方法与装置 |
CN110798684A (zh) * | 2019-09-30 | 2020-02-14 | 武汉兴图新科电子股份有限公司 | 一种图像片段错峰编码传输方法 |
WO2023193701A1 (zh) * | 2022-04-06 | 2023-10-12 | 展讯通信(上海)有限公司 | 图像编码方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102769753B (zh) | 2015-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101279266B1 (ko) | 데이터 트래픽과 전력 소모를 저감시킨 플렉서블 매크로블록 오더링 | |
KR101030209B1 (ko) | 모션 보상 비디오 디코딩 프로세스를 위한 효율적인 메모리페치 | |
US9807410B2 (en) | Late-stage mode conversions in pipelined video encoders | |
JP4182442B2 (ja) | 画像データの処理装置、画像データの処理方法、画像データの処理方法のプログラム及び画像データの処理方法のプログラムを記録した記録媒体 | |
US9473778B2 (en) | Skip thresholding in pipelined video encoders | |
US8009740B2 (en) | Method and system for a parametrized multi-standard deblocking filter for video compression systems | |
US9948934B2 (en) | Estimating rate costs in video encoding operations using entropy encoding statistics | |
CN102769753B (zh) | H264编码器及编码方法 | |
CN103460700A (zh) | 以帧内预测模式解码图像的方法 | |
US9380314B2 (en) | Pixel retrieval for frame reconstruction | |
CN104937941A (zh) | 用于确定用于空间可缩放视频编解码器的预测块的方法 | |
AU2013210274A1 (en) | Video decoder, video encoder, video decoding method, and video encoding method | |
KR102390162B1 (ko) | 데이터 인코딩 장치 및 데이터 인코딩 방법 | |
CN102348119B (zh) | 预测编码装置及其控制方法 | |
EP2517471A1 (en) | Temporal and spatial video block reordering in a decoder to improve cache hits | |
CN106688234B (zh) | 用于图像变换的处理器***、视频编解码器和方法 | |
KR20120096452A (ko) | 공간적으로 변하는 잔류물 코딩을 위한 방법 및 장치 | |
WO2021196035A1 (zh) | 视频编码的方法和装置 | |
Silveira et al. | Efficient reference frame compression scheme for video coding systems: algorithm and VLSI design | |
CN102714717A (zh) | 低成本的视频编码器 | |
TWI736528B (zh) | 多媒體編解碼器、包括其之應用處理器、及操作該應用處理器之方法 | |
CN102801980B (zh) | 一种用于可伸缩视频编码的解码装置和方法 | |
US20130064298A1 (en) | Concurrent access shared buffer in a video encoder | |
JP2007325119A (ja) | 画像処理装置及び画像処理方法 | |
US20170323454A1 (en) | Apparatus and method for efficient motion estimation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |