一种适应性变动长度实时编码器及编码方法与流程

文档序号:14844491发布日期:2018-06-30 14:42阅读:175来源:国知局
一种适应性变动长度实时编码器及编码方法与流程

本发明涉及一种适应性变动长度实时编码器及编码方法,属于集成电路设计技术领域。



背景技术:

H.264/AVC是由ITU和ISO\IEC联合发布的新一代视频编码标准,与以往的MPEG-4、H.263等编码标准相比,H.264/AVC具有更高的编码效率和更好的网络适应性。它广泛应用于数字电视、数字用户线路视频服务、互动式存储介质(光盘等)、实时多媒体服务(视频会议等)、远程监控等领域中。H.264/AVC是一种面向块的基于运动补偿的编解码器标准,其编解码流程主要包括5个部分:帧间预测和帧内预测、变换与反变换、量化与反量化、环路滤波、熵编码。其中,CAVLC是视频编码处理的最后一个组成部分,也是提升H.264/AVC压缩性能的重要技术之一。

但随着移动视频录制设备的进一步发展,视频压缩编码在移动设备中的应用越来越广泛,基于软件实现的CAVLC实时性不够,编码效率较低,不能满足移动设备视频录制对于压缩质量、压缩速度的需求。



技术实现要素:

本发明的目的在于:克服现有技术的不足之处,提供一种适应性变动长度实时编码器及编码方法,提高了H.264中熵编码的编码效率和实时性,从而克服了软件实现熵编码时的编码滞后性问题。

本发明的技术解决方案是:

一种适应性变动长度实时编码器,包括预处理模块、编码模块和包装模块,其中预处理模块又包括第一组系数存储空间、第二组系数存储空间、第一数据选择器以及第二数据选择器;

外部输入的数据块送入预处理模块中,通过第一数据选择器之后,交替送入第一组系数存储空间和第二组系数存储空间中,对数据块进行重排序后得到编码所需的系数值并存储在当前系数存储空间中,再通过第二数据选择器后送入编码模块进行串并组合式的熵编码,将编码结果送入包装模块进行堆栈处理,形成比特流并输出,完成适应性变动长度实时编码。

通过第一数据选择器之后,交替送入第一组系数存储空间和第二组系数存储空间中,具体是指:第一个数据块送入第一组系数存储空间,第二个数据块送入第二组系数存储空间,第三个数据块送入第一组系数存储空间,第四个数据块送入第二组系数存储空间,以此类推。

所述数据块的大小为4*4或2*2,通过在H.264中对输入图像进行预测、变换以及量化处理得到。

编码模块包括编码控制器、coefftoken编码模块、T1编码模块、level编码模块、T0编码模块和RB编码模块;

coefftoken编码模块用于对输入到其中的系数coeff_token进行编码,生成对应的码字和码长;

T1编码模块用于对输入到其中的系数trailing_ones_sign_flag进行编码,生成对应的码字和码长;

level编码模块对输入到其中的系数level_prefix和系数level_suffix进行编码,生成对应的码字和码长;

T0编码模块用于对输入到其中的系数total_zeros进行编码,生成对应的码字和码长;

RB编码模块用于对输入到其中的系数run_before进行编码,生成对应的码字和码长;

编码控制器用于控制上述五个编码模块的编码顺序。

编码模块进行串并组合式的熵编码通过编码控制器控制coefftoken编码模块、T1编码模块、level编码模块、T0编码模块和RB编码模块的编码顺序实现,具体为:

当第一个数据块经过预处理模块处理之后,编码控制器控制Coefftoken编码模块读取所需系数并进行编码,在Coefftoken编码模块编码的同时,编码控制器分别控制T1编码模块和T0编码模块读取系数并编码,在T1编码模块编码结束后,编码控制器控制Level编码模块开始编码;在T0编码模块编码结束后,编码控制器控制RB编码模块开始编码。

一种适应性变动长度实时编码方法,步骤如下:

(1)当第一个数据块进入预处理模块时,对数据块中数据的进行重排序,得到编码所需的系数值,存储在第一组系数存储空间中;

(2)通过编码模块对存储在第一组系数存储空间中的系数值进行串并组合式的熵编码,编码结果输出给包装模块进行堆栈输出;

(3)编码模块对存储在第一组系数存储空间中的系数值进行串并组合式的熵编码的同时,预处理模块对第二个数据块进行重排序,得到编码所需的系数值,存储在第二组系数存储空间中;

(4)通过编码模块对存储在第二组系数存储空间中的系数值进行串并组合式的熵编码,编码结果输出给包装模块进行堆栈输出;

(5)编码模块对存储在第二组系数存储空间中的系数值进行串并组合式的熵编码的同时,预处理模块对第三个数据块进行重排序,得到编码所需的系数值,存储在第一组系数存储空间中;

(6)通过编码模块对存储在第一组系数存储空间中的系数值进行串并组合式的熵编码,编码结果输出给包装模块进行堆栈输出;

(7)编码模块对存储在第一组系数存储空间中的系数值进行串并组合式的熵编码的同时,预处理模块对第四个数据块进行重排序,得到编码所需的系数值,存储在第二组系数存储空间中;

(8)以此类推,直到所有数据块处理完毕,完成编码。

编码模块包括编码控制器、coefftoken编码模块、T1编码模块、level编码模块、T0编码模块和RB编码模块;

coefftoken编码模块用于对输入到其中的系数coeff_token进行编码,生成对应的码字和码长;

T1编码模块用于对输入到其中的系数trailing_ones_sign_flag进行编码,生成对应的码字和码长;

level编码模块对输入到其中的系数level_prefix和系数level_suffix进行编码,生成对应的码字和码长;

T0编码模块用于对输入到其中的系数total_zeros进行编码,生成对应的码字和码长;

RB编码模块用于对输入到其中的系数run_before进行编码,生成对应的码字和码长;

编码控制器用于控制上述五个编码模块的编码顺序。

编码模块进行串并组合式的熵编码通过编码控制器控制coefftoken编码模块、T1编码模块、level编码模块、T0编码模块和RB编码模块的编码顺序实现,具体为:

当第一个数据块经过预处理模块处理之后,编码控制器控制Coefftoken编码模块读取所需系数并进行编码,在Coefftoken编码模块编码的同时,编码控制器分别控制T1编码模块和T0编码模块读取系数并编码,在T1编码模块编码结束后,编码控制器控制Level编码模块开始编码;在T0编码模块编码结束后,编码控制器控制RB编码模块开始编码。

本发明与现有技术相比的有益效果是:

(1)本发明预处理模块采用双存储模式,送入预处理模块的数据块交替进入第一组系数存储空间和第二组系数存储空间,使得数据块可以得到连续处理,提高了编码器的工作效率。

(2)本发明编码模块使用串并组合式的熵编码,与串行的熵编码相比,在同样时钟周期内编码数量提高一倍,提升了编码器的编码效率。

附图说明

图1是本发明编码器实现示意图;

图2是本发明涉及的编码模块实现流程图;

图3是包装模块中堆栈示意图。

具体实施方式

本发明提出的一种适应性变动长度实时编码器,解决了现有技术中适应性变动长度编码器实时性不够、编码效率较低、不能满足移动设备视频录制对于压缩质量、压缩速度需求的问题,提高了编码的实时性,可以应用在移动设备中进行视频实时压缩。

本发明提出的一种适应性变动长度实时编码器,包括预处理模块、编码模块和包装模块。通过在预处理模块中使用两组系数存储空间、在编码模块中进行串并组合式的熵编码,使得本发明的编码器可以实时对送入的数据块进行编码。

如图1所示,本发明提出的一种适应性变动长度实时编码器,包括预处理模块、编码模块和包装模块,其中预处理模块又包括第一组系数存储空间、第二组系数存储空间、第一数据选择器以及第二数据选择器;

外部输入的数据块送入预处理模块中,通过第一数据选择器之后,交替送入第一组系数存储空间和第二组系数存储空间中,对数据块进行重排序后得到编码所需的系数值并存储在当前系数存储空间中,再通过第二数据选择器后送入编码模块进行串并组合式的熵编码,将编码结果送入包装模块进行堆栈处理,如图3所示,形成比特流并输出,完成适应性变动长度实时编码。

通过第一数据选择器之后,交替送入第一组系数存储空间和第二组系数存储空间中,具体是指:第一个数据块送入第一组系数存储空间,第二个数据块送入第二组系数存储空间,第三个数据块送入第一组系数存储空间,第四个数据块送入第二组系数存储空间,以此类推。

数据块的大小为4*4或2*2,通过在H.264中对输入图像进行处理得到。在H.264标准中,首先把输入的视频信号分割为帧、片、宏块以及子块,使用运动估计函数从参考帧(上一次重建帧或子采样后的帧)中寻找当前宏块的匹配(相似)区域,计算该区域与当前宏块的位置偏移得到运动矢量,根据运动矢量生成运动补偿的预测,用当前宏块减去预测生成当前帧的残差宏块,将残差宏块进行DCT变换、量化后得到的数据即为本发明的输入数据块。

如图2所示,编码模块包括编码控制器、coefftoken编码模块、T1编码模块、level编码模块、T0编码模块和RB编码模块;

coefftoken编码模块用于对输入到其中的系数coeff_token进行编码,生成对应的码字和码长;

T1编码模块用于对输入到其中的系数trailing_ones_sign_flag进行编码,生成对应的码字和码长;

level编码模块对输入到其中的系数level_prefix和系数level_suffix进行编码,生成对应的码字和码长;

T0编码模块用于对输入到其中的系数total_zeros进行编码,生成对应的码字和码长;

RB编码模块用于对输入到其中的系数run_before进行编码,生成对应的码字和码长;

编码控制器用于控制上述五个编码模块的编码顺序,具体为:

当第一个数据块经过预处理模块处理之后,编码控制器控制Coefftoken编码模块读取所需系数并进行编码,在Coefftoken编码模块编码的同时,编码控制器分别控制T1编码模块和T0编码模块读取系数并编码,在T1编码模块编码结束后,编码控制器控制Level编码模块开始编码;在T0编码模块编码结束后,编码控制器控制RB编码模块开始编码。

包装模块把编码模块生成的码字按顺序连接起来并输出。码字的具体连接顺序为:coefftoken码字+T1码字+level码字+T0码字+RB码字。

基于上述提出的编码器,本发明还提出了一种适应性变动长度实时编码方法,步骤如下:

(1)当第一个数据块进入预处理模块时,对数据块中数据的进行重排序,得到编码所需的系数值,存储在第一组系数存储空间中;

(2)通过编码模块对存储在第一组系数存储空间中的系数值进行串并组合式的熵编码,编码结果输出给包装模块进行堆栈输出;

(3)编码模块对存储在第一组系数存储空间中的系数值进行串并组合式的熵编码的同时,预处理模块对第二个数据块进行重排序,得到编码所需的系数值,存储在第二组系数存储空间中;

(4)通过编码模块对存储在第二组系数存储空间中的系数值进行串并组合式的熵编码,编码结果输出给包装模块进行堆栈输出;

(5)编码模块对存储在第二组系数存储空间中的系数值进行串并组合式的熵编码的同时,预处理模块对第三个数据块进行重排序,得到编码所需的系数值,存储在第一组系数存储空间中;

(6)通过编码模块对存储在第一组系数存储空间中的系数值进行串并组合式的熵编码,编码结果输出给包装模块进行堆栈输出;

(7)编码模块对存储在第一组系数存储空间中的系数值进行串并组合式的熵编码的同时,预处理模块对第四个数据块进行重排序,得到编码所需的系数值,存储在第二组系数存储空间中;

(8)以此类推,直到所有数据块处理完毕,完成编码。

以一个典型的输入数据块为例:

经过重排序后的数据:0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0。

在预处理模块中,将编码模块所需的系数存储在对应的存储空间中,所有系数存储完成后,编码模块对数据块进行编码,编码的过程就是根据H.264标准进行查表的过程。通过查表:经过coefftoken编码后得到码字(0000100)2,经过T1编码后得到码字(011)2,经过Level编码后得到码字(10010)2,经过T0编码后得到码字(111)2,经过RB编码后得到码字(101101)2。在包装模块中对五组码字按照顺序连接为(0000 1000 1110 0101 1110 1101)2并输出。

本发明已应用在编码器功能和时序验证中,实时性好,编码效率高。

本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。

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