解码方法、解码器和解码系统与流程

文档序号:22191600发布日期:2020-09-11 22:04阅读:139来源:国知局
解码方法、解码器和解码系统与流程

版权申明

本专利文件披露的内容包含受版权保护的材料。该版权为版权所有人所有。版权所有人不反对任何人复制专利与商标局的官方记录和档案中所存在的该专利文件或者该专利披露。

本申请涉及图像编解码领域,更为具体地,涉及一种解码方法、解码器和解码系统。



背景技术:

联合图像专家小组(jointphotographicexpertsgroup,jpeg)、jpeg2000是常用的图像编码标准。

jpeg2000采用小波变换,并基于优化截取内嵌码块编码(embeddedblockcodingwithoptimizedtruncation,ebcot)进行熵编码,具有比jpeg更高的压缩比,并支持渐进式下载和显示。

tagtree编码在jpeg2000标准中用于实现码流组织环节,但是传统的tagtree编码过程是先确定每一个码块的编码值,然后将其合并在一起,组成最终的编码值,这种实现方式的运算速度较慢,时间复杂度较高,通常为o(n2),n为码块的总数量,相应地,解码速率也较低,成为系统性能的瓶颈。



技术实现要素:

本申请提供一种解码方法、解码器和解码系统,能够降低tagtree解码的时间复杂度,从而能够提升系统性能。

第一方面,提供一种解码方法,包括:获取当前质量分层的码流的数据包;对所述数据包的包头中的第一码块的层lyr编码进行解码,确定所述质量分层是否为所述第一码块的第一层,其中,所述第一码块的lyr编码为所述第一码块在所述质量分层的包含信息的编码;若所述质量分层为所述第一码块的第一层,对所述数据包的包头中所述第一码块的零比特平面zbp编码进行解码,确定所述第一码块的zbp信息。

第二方面,提供了一种解码器,包括:

码流读取电路,用于获取当前质量分层的码流的数据包;

第一层解析电路,用于对所述数据包的包头中的第一码块的层lyr编码进行解码,确定所述质量分层是否为所述第一码块的第一层,所述第一码块的lyr编码为所述第一码块在所述质量分层的包含信息的编码;

零比特平面zbp解析电路,用于在所述质量分层为所述第一码块的第一层的情况下,对所述数据包的包头中所述第一码块的零比特平面zbp编码进行解码,确定所述第一码块的zbp信息。

第三方面,提供一种解码系统,包括:第二方面的解码器。

第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行第一方面所述的方法。

第五方面,提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第一方面所述的方法。

附图说明

图1是jpeg2000的编码框架图。

图2是编码得到数据包构成示意图。

图3是本申请实施例提供的编码器的结构示意图。

图4是图像块的小波变换的原理示意图。

图5是本申请实施例标志树的一种典型结构示意图。

图6是本申请实施例的建树电路的组成结构示意图。

图7是一种标志树的示意图。

图8是本申请实施例的第一编码电路的组成结构示意图。

图9是本申请实施例的第三编码电路的组成结构示意图。

图10是本申请实施例提供的解码器的结构示意图。

图11是tagtree的重建过程示意图。

图12是本申请实施例提供的解码方法的示意性流程图。

具体实施方式

本申请可应用于图像编解码领域、视频编解码领域、硬件视频编解码领域、专用电路视频编解码领域、实时视频编解码领域。

本申请提供的编码器可用于对图像进行有损压缩(lossycompression),也可用于对图像进行无损压缩(losslesscompression)。该无损压缩可以是视觉无损压缩(visuallylosslesscompression),也可以是数学无损压缩(mathematicallylosslesscompression)。为了便于理解,先对jpeg2000的编码框架进行简单介绍。

如图1所示,jpeg2000的编码框架可以包括预处理模块12、变换模块14、量化模块16、ebcot模块18。

预处理模块12可以包括分片处理模块120、分量变换(componenttransformation)模块122和直流电平平移(directcurrentlevelshift)模块124。

分片处理模块120用于将原始图像进行分割,得到一定数量的图像块(tile)或者说,图像分片,每个图像块都可以作为一个独立的源图像进行编码。可选地,该图像块可以是大小相等且互不重叠的矩形块,例如可以是512×512(单位为像素),本申请实施例对于该图像块的尺寸不作具体限定。

分量变换模块122可以对图像的分量进行某种变换以降低各分量之间的相关性。例如,分量变换模块122可以将图像的各个分量从当前颜色域转换至另一颜色域。

分量变换模块122可以支持多种颜色变换模式,因此,分量变换模块122有时也可称为多模颜色变换(multi-modecolortransform,mct)模块。例如,分量变换模块122可支持不可逆颜色变换(irreversiblecolortransform,ict)或可逆颜色变换(reversiblecolortransform,rct)。需要说明的是,分量变换模块122是可选的,实际编码过程中,也可以不对图像进行分量变换,直接进行后续处理。

直流电平平移模块124可用于对分量值进行中心平移,使得分量值关于0对称分布,以便于后续的变换操作。

变换模块14采用小波变换对图像的各个图像块进行变换,得到子带的小波系数。

量化模块16可用于对子带的小波系数进行量化,得到量化后的子带的小波系数。

ebcot模块18是jepg2000的熵编码模块,属于jepg2000的核心模块。

ebcot模块18可以包括tier-1编码模块182和tier-2编码模块184。tier-1编码模块182可用于对码块(子带可以进一步划分成独立的多个码块(codeblock))进行tier-1编码。tier-1编码可以包括比特平面编码和算术编码。tier-2编码模块184主要负责码流的组织工作,如可以根据特定的码率对码块的码流进行截断等处理。tier-2编码模块184主要采用压缩后率失真优化算法(post-compressionrate-distortionoptimization,pcrd)进行码率控制。

例如,tier-2编码模块184可以根据tier-1编码模块184输出的每片码流(即每个码块的码流(pass))的码率(rate)和失真度(distortion)计算率失真斜率(slope)。率失真斜率可用于评估当前码块的码流在整个图像块的贡献度。该率失真斜率可用于后续的码流组织,如码流的分层、截断等。

进一步地,可根据目标码率以及率失真斜率对码块的码流进行处理。例如,可以根据目标码率以及率失真斜率截断码块的码流。进一步地,可以对多个码块的码流进行重新组织,码流分层等。

图像块中的码块的码流可以构成一组数据包,数据包由包头(packetheader)和经优化截断的比特流组成,在数据包的包头中按照码块的顺序将码块的包含信息(codeblockinclusioninformation)、零比特平面(zerobitplane,zbp)信息、编码通道数、被包含码块截取长度信息等信息进行编码形成该包头信息,包头后面紧接着包体,包体包括码块被截取到的比特流。

如图2所示编码得到的数据包的构成示意图,其中,hb,n表示子带b的第n个码块的头信息,hb,n中的i为码块的包含信息的编码值,对应于下文所述的lyr编码,n为zbp信息的编码值,对应于下文的zbp编码,p为编码通道数的编码值,l为被包含码块截取长度l的编码值,zero表示该数据包是否为空数据包,bb,n表示子带b的第n个码块的比特流。

采用pcrd算法进行码率控制,码块的比特流可能被截取到不同的质量分层,也就是说,每个码块的比特流可以贡献给输出码流的分层中的一层或多层,可将码块首次被截取所在的质量分层作为码块的包含信息,例如,若cb0,cb1,cb2,cb3,cb5在质量分层0首次出现,cb4在质量分层1首次出现,则cb0~cb5的包含信息分别为000010,如果质量分层数为l,包含信息为l,则表示该码块在压缩码流中不被包含。通常来说,对图像重要的信息(例如,分辨率等级较高的码块)会放在质量分层中的较低层,后面的每一层都能够在前一层的基础上提高图像的质量,可见,在无损压缩情况下,所有层都应该被解码,如果只解码前面的几层,可以实现一定压缩比率下的有损压缩。

对于小波变换后未压缩的码块系数,形成比特平面,最大比特平面数为m,实际编码时并不是所有的比特平面都被编码,若zbp信息为n,实际编码的比特平面为m-n,其中,zbp信息可以用于表示零比特平面的位置,零比特平面的具体位置通常和码块对应,也就是说,每个码块对应一个zbp信息,当码块在质量分层中第一次被包含时,该码块的zbp信息才被编码。

tagtree编码器是tier-2编码模块的一种典型编码器,其采用tagtree算法对码块的包含信息和zbp信息进行编码,具体过程如下:

首先,将待编码块按照一定的数量进行分组,每一组指向一个更高一级的节点,然后继续对这些高级节点分组,直到只剩一个节点为止,这个节点称为根节点,这样,由不同等级的节点组成一颗树,可称为标志树,即tagtree。

然后,对树上的各个节点进行编码,具体地,首先对根节点进行编码,然后逐级向下编码,直到最底层的叶子节点。也就是说,进行编码时,需要计算每一码块的编码值,然后将每一码块的编码值合并得到最终的编码值,编码的时间复杂度较高,通常为o(n2),其中,n为待编码块的数量,例如,编码一个包含64个码块的分量需要3000~4000个时钟周期(cycle),功耗大,并且对逻辑资源的消耗也较大。

有鉴于此,本申请实施例提供了一种编码器,能够实现高效的tagtree编码,具体可以将tagtree编码的时间复杂度降低为o(n),例如,对于编码一个包含64个码块的分量只需60~70cycle,能够降低功耗以及对逻辑资源的消耗。

下面将结合图3至图9,对本申请的技术方案进行描述。

图3为本申请实施例提供的一种编码器20的示意性结构图。如图3所示,该编码器20可以包括:建树电路22,第一编码电路24,第二编码电路26。

该建树电路22用于根据待编码块的zbp信息或包含信息,构建对应的标志树(tagtree)。可以理解,待编码块构成标志树的叶子节点,建树过程为生成叶子节点的父节点和祖先节点的过程。

应理解,在本申请实施例中,待编码块可称为叶子节点,或level0节点,第一级节点等;待编码块的更高一级节点可称为父节点,level1节点,或第二级节点,第一级高级节点;树的根节点可以称为祖先节点或level2节点,或第三级节点,第二级高级节点。

在一些实施例中,该建树电路22可以从外部存储器获取待编码块的zbp信息或包含信息,在另一些实施例中,所述建树电路22也可以从上一级处理电路输出的寄存器中获取该待编码块的zbp信息或包含信息,例如,所述建树电路22可以通过读取电路从外部存储器或上一次处理电路输出的寄存器中获取该待编码块的zbp信息或包含信息,本申请实施例对于该待编码块的信息的获取方式不作限定。

需要说明的是,该待编码块可以为图像块的子带中的码块,也就是说,根据本申请实施例的编码器可以以子带为单位进行编码,在编码完一个子带后,可以对另一个子带进行编码,直到编码完整个待编码图像。

以下,结合图3至图5,以对64个码块(包括cb0~cb63)的zbp信息建树为例,介绍具体的建树过程。

应理解,图4中码块的排列格式,以及图5中的tagtree的结构仅为示例,而不应对本申请实施例构成任何限定,随着编码规范的调整和发展,tagtree的层数也可能发生变化,例如,可以为4层,此情况下,根节点为level3节点,tagtree的结构也可以调整,并且tagtree也可以包括更多个cb,或更少个cb等,但编码原理类似,这里不再赘述。

首先,获取tagtree的所有叶子节点的信息,即该64个码块的zbp信息,该64个码块构成tagtree的叶子节点,根据该64个码块的分辨率等级,如图4所示,可以构建10颗树,其中,同一分辨率等级的cb用于构建同一棵树,例如,cb16~cb31对应同一颗树,cb48~cb63对应同一颗树。

具体地,cb0~cb3,分辨率等级最高,不需要生成对应的父节点,每个cb单独构建一颗树,记为第一类标志树,此类标志树只有layer0节点,无layer1节点和layer2节点。

基于cb4~cb7,cb8~cb11,cb12~cb15分别构建对应的一棵树,这一组树具有layer1节点,没有layer2节点,记为第二类标志树。在该第二类标志树中,layer1节点的取值可以为一组layer0节点的最小值,例如,cb4~cb7的父节点的取值可以为cb4~cb7的lbp信息的最小值。

基于cb16~cb31,cb32~cb47,cb48~cb63分别构建对应的一颗标志树,这一组标志树中具有layer1节点和layer2节点,记为第三类标志树。在该第三类标志树中,layer1节点可以由一组layer0节点取最小值生成,layer2节点是由一组layer1节点取最小值生成。在该第三类标志树中,一组layer0节点及其layer1节点构成这棵树中的一颗子树,即该第三类树可以包括四颗子树,分别记为第一颗子树,第二颗子树,第三颗子树和第四颗子树。

对于cb16~cb31对应的第三类标志树,可以取cb16,cb17,cb20,cb21的最小值,生成这四个layer0节点对应的layer1节点的取值,按照同样的方式可以确定其他三组layer0节点对应的layer1节点的取值,然后根据该这一组layer1节点取最小值,得到这棵树的layer2节点的取值。

可选地,在本申请一个实施例中,所述建树电路22可以包括多个寄存器,用于缓存所述多个待编码块的叶子节点,父节点和祖先节点的zbp信息。

可选地,在本申请一个实施例中,所述建树电路22可以包括多个第一级比较器,用于根据多个叶子节点的取值确定对应的父节点的取值,以及多个第二级比较器,用于根据多个父节点的取值,确定根节点的取值。

以对63个码块建树为例,该建树电路22可以包括15个第一级比较器(记为comp1_0~comp1_14),用于比较该cb4~cb63的60个叶子节点中每一组叶子节点的取值,确定对应的父节点的取值,以及3个第二级比较器(记为comp2_0~comp2_2),用于根据一组父节点的取值,确定对应的根节点的取值。

例如,如图6所示,comp1_0可以比较cb4~cb7取最小值,得到fa0,并将fa0存储到fa0对应的寄存器中,comp1_14可以比较cb58,cb59,cb62和cb63的zbp信息取最小值,得到fa14的zbp信息,并将fa14的zbp信息存储到fa14对应的寄存器中,comp2_0可以比较fa3~fa6的zbp信息取最小值,得到fafa0的zbp信息,并将fafa0的zbp信息存储到fafa0对应的寄存器中,其中,fax表示父节点x,fafax表示祖先节点x。

由此可见,构建一颗树需要两个步骤,第一个步骤生成叶子节点的layer1节点,第二个步骤生成叶子节点的layer2节点,其中,第一个步骤可以通过15个第一级比较器实现,第二个步骤可以通过3个第二级比较器实现。

建树完成后,该第一编码电路24可以根据标志树中的每个待编码块的zbp信息,确定每个待编码块的编码参考信息,该待编码块的编码参考信息可以用于表示该待编码块的zbp信息、该待编码块的父节点的zbp信息(如果该待编码块有父节点)以及该待编码块的祖先节点的zbp信息(如果该待编码块有根节点)之间的关系。

可选地,在本申请一个实施例中,该第一编码电路24具体用于:

根据标志树中的每个待编码块的zbp信息,结合所述待编码块的父节点的zbp信息和所述待编码块的祖先节点的zbp信息,确定每个待编码块的编码参考信息。

应理解,在一些情况中,若待编码块没有父节点,则可以认为其父节点的zbp信息为零,或者,若待编码块没有祖先节点,可以认为其祖先节点的zbp信息为零。

可选地,在本申请一个实施例中,该第一编码电路24还用于:

根据标志树中的每个待编码块的zbp信息,所述待编码块的父节点的zbp信息和所述待编码块的祖先节点的zbp信息,结合所述待编码块的父节点的编码标识信息和所述待编码块的祖先节点的编码标识信息,确定所述每个待编码块的编码参考信息。

其中,父节点的编码标识信息可以用于指示该父节点是否被编码过,该祖先节点的编码标识信息用于指示祖先节点是否被编码过。

应理解,在一些情况中,若待编码块没有父节点,则可以认为其父节点被编码过,或者,若待编码块没有祖先节点,可以认为其祖先节点被编码过。

应理解,在本申请实施例中,每个待编码块的父节点(如果有)和祖先节点(如果有)都可以对应一个寄存器,用于表示父节点或祖先节点是否被编码过,即可以通过寄存器存储该待编码块的父节点和祖先节点的编码标识信息,假设,该编码标识信息的初始值为0,表示对应的节点未被编码过,当该节点被编码过后,该节点对应的编码标识信息更新为1。

可选地,在一些实施例中,所述待编码块的父节点和所述待编码块的祖先节点的编码情况可以包括如下情况:

情况1,所述待编码块没有父节点,或所述待编码块的父节点被编码过,此情况都可以认为待编码块的父节点和祖先节点的编码标识信息都为1;

情况2,所述待编码块有父节点,且所述待编码块的父节点无父节点,或者,所述待编码块的父节点有父节点,且所述待编码块的父节点的父节点被编码过,此情况都可以认为待编码块的祖先节点的编码标识信息为1;

情况3,所述待编码块有父节点,且所述待编码块的父节点的父节点未被编码过,此情况都可以认为待编码块的父节点和祖先节点的编码标识信息都为0。

对于情况1,可以只编码该待编码块,而不必编码其父节点和根节点,则该待编码块的zbp编码可以包括该待编码块的编码值。

对于情况2,可以只编码该待编码块及其父节点,而不必编码其根节点,则该待编码块的zbp编码可以包括该待编码块及其父节点的编码值。

对于情况3,需要编码该待编码块及其父节点和根节点,则该待编码块的zbp编码可以包括该待编码块及其父节点和根节点的编码值。

可选地,在本申请一些实施例中,所述待编码块的父节点和根节点是否被编码过可以根据所述待编码块在树中的出现顺序确定。

例如,对于第二类标志树中的第一待编码块,若该第一待编码块在该第二类树中第一个出现,则该第一待编码块的父节点没有被编码过,编码该第一待编码块会同时编码该第一待编码块的父节点,编码完成后,该第一待编码块的父节点被标识为编码过,在编码与该第一待编码块属于同一棵标志树的其他待编码块时,判断其对应的父节点被编码过,则可以不对该父节点进行编码。

又例如,对于第三类树中的第二待编码块,若该第二待编码块在该第三类树第一个出现,则该第二待编码块的父节点和祖先节点都没有被编码过,编码该第二待编码块会同时编码该第一待编码块的父节点和祖先节点,编码完成后,该第二待编码块的父节点和祖先节点都被标识为编码过,然后,在编码与该第二待编码块属于同一颗子树的第三待编码块时,由于第三待编码块和第二待编码块对应同一父节点和祖先节点,则可以只编码该第三待编码块,不编码该父节点和根节点;或者在编码与该第二待编码块属于同一颗树且属于不同子树的第四待编码块时,由于第四待编码块和第二待编码块对应同一祖先节点,但对应不同的父节点,则可以不编码该祖先节点,是否编码该第四待编码块的父节点,可以根据该第四待编码块的父节点的编码标识信息确定,若该第四待编码块在其对应的子树中第一个出现,则可以编码其对应的父节点,否则,不编码其对应的父节点。

也就是说,在本申请实施例中,在编码过程可以对已编码的父节点和祖先节点进行标记,从而可以避免对同一父节点和祖先节点进行重复编码,有利于降低tagtree编码的时间复杂度。

可选地,在本申请一些实施例中,所述待编码块的编码参考信息可以包括第一参考信息(记为cnt0),第二参考信息(记为cnt1)和第三参考信息(记为cnt2),其中,所述第一参考信息用于指示所述待编码块和其父节点的zbp信息之间的关系,所述第二参考信息用于指示所述待编码块的父节点与该父节点的父节点的zbp信息之间的关系,所述第三参考信息用于指示所述待编码块的根节点的zbp信息。

可选地,在一些具体实施例中,所述第一参考信息可以为所述待编码块的zbp信息与所述待编码块的父节点的zbp信息的差值加一,即cnt0=zbpcb-zbpfa+1;

所述第二参考信息为所述待编码块的父节点的zbp信息和所述待编码块的祖先节点的zbp信息的差值加一,即cnt1=zbpfa-zbpfafa+1;

所述第三参考信息为所述待编码块的祖先节点的zbp信息与0的差值加一,即cnt2=zbpfafa-0+1,其中,0可以理解为该编码节点的祖先节点的父节点的lbp信息。

其中,zbpfafa为所述待编码块的祖先节点的zbp信息,所述zbpfa为所述待编码块的父节点的zbp信息,所述zbpcb为所述待编码块的zbp信息。

特别地,若待编码块没有父节点,则计算第一参考信息时,可以取该待编码块的父节点的zbp信息zbpfa为零;或,若待编码块的父节点没有父节点,则计算第二参考信息时,可以取该待编码块的祖先节点的zbp信息zbpfafa为零。

以图7所示的一种简单的tagtree结构为例,介绍前述的三种情况中第一参考信息,第二参考信息和第三参考信息的确定方式。

对于前述的情况1:即待编码块无父节点,或者该待编码块的父节点被编码过,例如,cb0、cb17和cb21,则cnt0=zbpcb-zbpfa+1,cnt1=0,cnt2=0。

例如,对于cb0,其对应的cnt0=2-0+1=3,cnt1=0,cnt2=0。

又例如,对于cb17,其对应的cnt0=3-3+1=3,cnt1=0,cnt2=0。

对于前述的情况2:待编码块有父节点,且所述待编码块的父节点无父节点,或者,所述待编码块的父节点的父节点被编码过,例如,cb4和cb20,则cnt0=zbpcb-zbpfa+1,cnt1=zbpfa-zbpfafa+1,cnt2=0。

例如,对于cb4,其对应的cnt0=2-2+1=1,cnt1=2-0+1=3,cnt2=0。

又例如,对于cb20,其对应的cnt0=2-1+1=2,cnt1=1-1+1=1,cnt2=0。

对于前述的情况3:待编码块有父节点,且该待编码块的父节点的父节点没有被编码过,例如,cb16,则cnt0=zbpcb-zbpfa+1,cnt1=zbpfa-zbpfafa+1,cnt2=zbpfafa-0+1。

例如,对于cb16,其对应的cnt0=4-3+1=2,cnt1=3-1+1=3,cnt2=1-0+1=2。

可选地,在本申请一个实施例中,如图8所示,所述第一编码电路24可以包括数据选择器(mux)和计算单元,其中,该计算单元用于计算每个待编码块的第一参考信息,第二参考信息和第三参考信息,该mux用于计算待编码块的第一参考信息,第二参考信息和第三参考信息时,选通该待编码块对应的父节点和根节点,以获取对应的父节点和根节点的zbp信息。

可选地,在本申请一个实施例中,所述第一编码电路24还可以包括多个寄存器,用于在确定每个待编码块的第一参考信息,第二参考信息和第三参考信息之后,将每个待编码块的第一参考信息,第二参考信息和第三参考信息存储在对应的寄存器中,以便于第二编码电路26从寄存器中获取该待编码块的第一参考信息,第二参考信息和第三参考信息,并根据该第一参考信息,第二参考信息和第三参考信息,确定该待编码块的zbp编码。

可选地,在一些实施例中,该第二编码电路26可以将该待编码块的三个编码值拼接,得到该待编码块的zbp编码,例如,按照第三参考信息,第二参考信息和第一参考信息的顺序进行拼接,得到该待编码块的zbp编码,或者,也可以按照第一参考信息,第二参考信息和第三参考信息的顺序进行拼接,得到该待编码块的zbp编码,只需调整对应的解码算法即可。

可选地,若第二参考信息或第三参考信息为零,即不必对父节点或祖先节点进行编码,此情况下,该第二参考信息或第三参考信息在zbp编码中为空(null),即不占比特位,即待编码块的zbp编码不包括该待编码块的父节点或祖先节点的编码值,从而能够降低对存储空间的占用。

可选地,在本申请一些实施例中,该第二编码电路26可以将第一参考信息,第二参考信息和第三参考信息转换为特定的二进制编码,然后进行二进制编码的拼接,以得到所述待编码块的zbp编码。

在一种实现方式中,第一参考信息和转换得到的二进制编码具有如下关系:

所述二进制编码的长度为所述第一参考信息的值,所述二进制编码的最低位为1,其他位为零。也就是说,该二进制编码中零的个数为待编码块和其父节点的zbp信息之差。

例如,若该第一参考信息为3,则转换得到的二进制编码为001,或者,若第一参考信息为2,则转换得到的二进制编码为01,或者,若第一参考信息为1,则转换得到的二进制编码为1。

将第二参考信息和第三参考信息转换得到二进制编码的具体实现类似,这里不再赘述。

则第一参考信息对应的二进制编码中零的个数可以表示待编码块的叶子节点和该待编码块的父节点zbp信息之差,该第二参考信息对应的二进制编码中零的个数可以表示待编码块的父节点和该父节点的父节点的zbp信息之差,第三参考信息对应的二进制编码中的零的个数表示待编码块的祖先节点的zbp信息。

由上述第一参考信息,第二参考信息和第三参考信息的确定方式可以看出,父节点和祖先节点的zbp信息跟随标志树中第一次出现的码块,也就是说,标志树中第一个出现的码块的zbp编码中包括其父节点和祖先节点的zbp信息。

接着上述示例,根据cb0的cnt0=3,cnt1=0,cnt2=0,可以得到对应的二进制编码分别为001,null,null,则拼接可得该cb0的zbp编码为001。

由cb20的cnt0=2,cnt1=1,cnt2=0,可以得到对应的二进制编码分别为01,1,null,则拼接可得该cb20的zbp编码为011。

由cb16的cnt0=2,cnt1=3,cnt2=2,可以得到对应的二进制编码分别为01,001,01,则拼接可得该cb16的zbp编码为0100101。

综上,根据本申请实施例的编码器,对每个待编码块进行编码时,只需编码未被编码过的父节点和祖先节点,而不必编码每个待编码块的父节点和祖先节点,能够降低编码的时间复杂度,同时能够降低对逻辑资源的消耗。

可选地,在本申请实施例中,该第二编码电路26可以包括:

编码值组合单元,用于将待编码块的第一参考信息,第二参考信息和第三参考信息分别转换得到的第三二进制编码,第二二进制编码和第一二进制编码进行码字拼接,得到所述待编码块的zbp编码;

多个寄存器,用于缓存该每个待编码块的zbp编码,用于后续的处理过程,例如,第三编码电路28对该待编码块的zbp编码进行分离得到该待编码块在每个质量分层的层(layer,lyr)编码。

由上文描述可知,码块可以在质量分层中的一层或多层中出现,该待编码块的zbp编码可以包括该待编码块在各个质量分层中的编码值,因此,对该待编码块的zbp编码进行分离,可以确定该待编码块在各个质量分层中的lyr编码。

可选地,在本申请一些实施例中,所述编码器20还可以包括:

第三编码电路28,用于根据所述待编码块的zbp编码,确定所述待编码块在每个质量分层中的lyr编码。

若该质量分层数为k,该待编码块在每个质量分层对应一个layer信息,该layer信息用于指示该待编码块是否在该质量分层中出现,例如,若k=8,该待编码块对应8个layer信息,每个layer信息对应一个lyr编码,该lyr编码可以用于确定该待编码块第一个出现的质量分层,即firstlayer信息。

可选地,在本申请一些实施例中,所述第三编码电路28具体用于:

若当前质量分层为i,当前zbp编码为x,从当前zbp编码的最高位开始,查找当前zbp编码中第一个零的位置,将该第一个零以及该第一个零之前的比特位作为当前质量分层i的lyr编码,然后移除当前zbp编码中的该第一个零以及该第一个零之前的比特位,并将移位后的所述zbp编码作为下一个质量分层的zbp编码,然后将质量分层加1,循环执行上述过程。

可选地,在一些实施例中,若在某个质量分层,当前zbp编码为全1,则可以将该zbp编码作为当前质量分层的lyr编码。

可选地,在一些实施例中,如图9所示,所述第三编码电路28可以包括:

k个处理单元,包括处理单元0~处理单元k-1,用于确定待编码块在k个质量分层中的每个质量分层中的lyr编码;

k个寄存器,包括寄存器0~寄存器k-1,用于缓存所述k个处理单元输出的处理结果,该处理结果可以包括待编码块在质量分层中的lyr编码以及移位后的zbp编码。

结合图9,以cb16的zbp编码为0100101,共有5个质量分层,说明cb16在各个质量分层的lyr编码的确定过程:

阶段0,确定质量分层0的lyr编码;

首先,处理单元0首先从第二编码电路26的寄存器中获取该cb16的zbp编码;

其次,查找该zbp编码0100101中的第一个零的位置,并将该第一个零,及其之前的比特位都作为质量分层0的lyr编码,即cb16在质量分层0的lyr编码为0;

然后,移位掉该第一个零及其之前的比特位,得到移位后的zbp编码为100101。

进一步地,将lyr编码0以及移位后的zbp编码100101缓存在寄存器0中,可选地,该寄存器0可以包括两个寄存器,分别用于缓存lyr编码0以及移位后的zbp编码100101;

阶段1,确定质量分层1的lyr编码;

首先,处理单元1从寄存器0中获取当前的zbp编码为100101;

其次,查找100101中的第一个零的位置,并将该第一个零,以及之前的比特位都作为质量分层1的lyr编码,即cb16在质量分层1的lyr编码为10;

然后移位掉该第一个零,以及之前的比特位,得到移位后的zbp编码为0101。

进一步地,将lyr编码10,以及更新后的zbp编码0101存储在寄存器1中缓存在寄存器1中,类似地,该寄存器1也可以包括两个寄存器,分别用于缓存该质量分层的lyr编码以及移位后的zbp编码;

阶段2,确定质量分层2的lyr编码;

首先,处理单元2从寄存器1中获取当前的zbp编码为0101;

其次,查找0101中的第一个零的位置,并将该第一个零,以及之前的比特位都作为质量分层2的lyr编码,即cb16在质量分层2的lyr编码为0;

然后移位掉该第一个零,以及之前的比特位,得到更新后的zbp编码为101。

进一步地,将lyr编码0,以及更新后的zbp编码101存储在寄存器2中,类似地,该寄存器2也可以包括两个寄存器,分别用于缓存该质量分层的lyr编码以及移位后的zbp编码;

阶段3,确定质量分层3的lyr编码;

首先,处理单元3从寄存器2中获取当前的zbp编码为101;

其次,查找101中的第一个零的位置,并将该第一个零,以及之前的比特位都作为质量分层3的lyr编码,即cb16在质量分层3的lyr编码为10;

然后移位掉该第一个零,以及之前的比特位,得到更新后的zbp编码为1。

进一步地,将lyr编码10,以及更新后的zbp编码1存储在寄存器3中,类似地,该寄存器3也可以包括两个寄存器,分别用于缓存该质量分层的lyr编码以及移位后的zbp编码;

阶段4,确定质量分层4的lyr编码;

首先,处理单元4从寄存器3中获取当前的zbp编码为1;

其次,处理单元4确定cb16当前的zbp编码为全1,将当前zbp编码作为当前质量分层4的编码值,即cb16在质量分层4的lyr编码为1,进一步将lyr编码1缓存在寄存器4中。

需要说明的是,对于码块的第一层(firstlayer)的lyr编码,若该lyr编码的比特位0为1,则可以不确定该码块在后续的其他质量分层中的lyr编码。

由上个例子可知,cb16的第一层是质量分层1,即该cb16在质量分层1第一层出现,其在该层的lyr编码为10,其中比特位0表示该cb16在下一质量分层的包含信息,该比特位取1,表示该cb16在下一质量分层中包含,该比特位取0,表示该cb16在下一质量分层中不包含,当该比特位取1时,可以不继续确定该cb在其他分层中的lyr编码。

因此,第三编码电路通过多个处理单元和多个寄存器能够实现对多个码块的zbp编码的并行处理,能够降低tagtree编码的时间复杂度。

应理解,在本申请实施例中,所述第三编码电路包括的处理单元的个数可以根据质量分层的总层数k确定,例如,若k=8,该第三编码电路可以包括8个处理单元,或者,该第三编码电路也可以包括其他个数个处理单元,例如,2~7个,此情况也能够实现一定程度的并行处理,本申请实施例对此不作限定。

综上,本申请实施例的编码过程主要包括建树过程,第一编码过程和第二编码过程和第三编码过程,其中,该建树过程可以根据待编码的多个码块建立对应的标志树,即确定待编码块的父节点和祖先节点的信息,第一编码过程用于确定待编码块的第一参考信息,第二参考信息和第三参考信息,第二编码过程用于根据该待编码块的第一参考信息,第二参考信息和第三参考信息确定该待编码块的zbp编码,第三编码过程用于根据该待编码块的zbp编码确定该待编码块在各个质量分层中的lyr编码。

在本申请实施例中,上述编码过程可以采用流水线进行作业,能够提高逻辑资源的利用率,同时还可以降低编码的耗时,例如通过建树电路、第一编码电路,第二编码电路和第三编码电路对待编码块并行进行编码处理,例如,由于不需要计算cb0~cb3的父节点的取值,因此,可以在构建cb4~cb63的layer1节点和layer2节点的同时,并行生成cb0~cb3的zbp编码,能够提高编码效率。又例如,通过上述电路并行对多个子带的码块并行处理等。

可选地,在本申请一些实施例中,所述编码器20还可以包括以下中的至少一个:

变换电路,用于对待编码的图像块进行小波变换;

量化电路,用于对所述图像块的小波系数进行量化;

tier-1编码电路,用于对所述图像块的码块进行tier-1编码,得到所述码块的码流。

以上,结合图3至图9,说明了码块zbp信息和包含信息的编码过程。可选地,在本申请实施例中,所述编码器20还可以对码块的编码通道数以及被包含码块的截取长度等信息进行编码,具体的编码方式可以采用现有的编码方式,这里不再赘述。

编码完成之后,码块的zbp编码会存放在该码块第一次出现的质量分层对应的数据包的包头中,该码块在每一层的lyr编码会存放在对应的质量分层对应的数据包中,具体的存放顺序如图2所示。

也就是说,该码块在第一次被包含时,该码块的zbp信息才被编码,在该码块出现的其他质量分层中不包含该码块的zbp编码,因此,要获取该码块的zbp编码首先要确定该码块第一次出现的质量分层,即firstlayer信息。

以下,结合图10至图12,介绍根据本申请实施例的解码器的工作原理。

图10是根据本申请实施例的解码器的示意性结构图,如图10所示,解码器80可以包括:

第一层(firstlayer)解析电路82,用于根据待解码码块的lyr编码,确定该待解码码块的第一层(firstlayer)信息,即该待解码码块在哪一个质量分层中第一次出现,即解析图2所示包头中的i。

zbp解析电路83,用于在该待解码码块的firstlayer中,对该待解码码块的zbp编码进行解析,确定该待解码码块的zbp信息,即解析图2所示包头中的n。

可选地,在本申请实施例中,所述编码器80还可以包括:

码流读取电路,用于读取待解码的码流数据,例如可以利用高级可扩展接口(advancedextensibleinterface,axi)从外部存储器(如内存)中读取该待解码的码流。

应理解,在读取待解码的码流数据之后,在本申请实施例中,该解码器80还可以对码流数据进行对齐处理,以便于后续的解析电路的处理。

可选地,在一些实施例中,所述解码器80还可以包括以下中的至少一个电路:

通道数解析电路84,用于对待解码码块的编码通道数进行解码,即用于解析图2所示包头中的p;

截取长度解析电路85,用于对待解码码块的被包含码块的截取长度解析,即用于解析图2所示包头中的l;

包体解析电路86,用于解析待解码码块的比特流,即解析图2所示包体中的bb,n;

包体提取电路87,用于对包体解析电路86解析得到的解码数据进行重新组织,并将组织好的数据存储在存储器中,以便于后级电路对该数据做进一步的处理。

可选地,在本申请一些实施例中,所述解码器80还可以包括以下中的至少一个:

逆量化电路,用于对所述包体提取电路87输出的数据进行逆量化;

逆变换电路,用于对逆量化电路输出的数据进行逆变换。逆变换的方式可以是离散小波逆变换。

输出电路,用于将逆变换电路输出的数据写入到外部的存储器中。例如,可以通过axi将逆变换电路输出的数据写入到外部的存储器中。

可选地,在本申请一些实施例中,所述解码器80还可以包括:

控制电路81,用于控制第一层解析电路82,zbp解析电路83以及通道数解析电路84,截取长度解析电路85,包体解析电路86,包体提取电路87中的至少一个电路的工作状态。

所述控制电路81可以用于根据解析的码流的信息,控制激活相应的电路进行工作。

具体而言,所述控制电路81首先根据数据包的包头中的zero判断该数据包是否为空包,若为空包,则等待新的码流,否则,激活firstlayer解析电路82,进行firstlayer的解析,即判断该码块是否在当前质量分层中。若码块在当前质量分层中,则激活zbp解析电路83,对该码块进行zbp解码,zbp解码完毕之后,进一步可以激活该通道数解析电路84和截取长度解析电路85,分别对码块的编码通道数和被包含码块的截取长度进行解码,循环执行上述过程,若当前数据包中的码块的包头都解析完毕,激活包体解析电路86对数据包中的包体进行解析,获取码块包括的比特流信息,然后激活包体提取电路87,对解析的比特流进行重组,并缓存到存储器中。

以下,结合图5,对firstlayer解析电路82和zbp解析电路83的工作原理进行详细说明。

由前文描述可知,编码器的第三编码电路可以对码块的zbp编码进行分离,得到该码块在每个质量分层的lyr编码,该码块的lyr编码最终包含在该质量分层对应的数据包的包头中,因此,解析一个质量分层的数据包的包头,可以获知该码块在该质量分层中的包含信息,即该码块是否包含在该质量分层中。

firstlayer解析电路82可以解析码块在当前质量分层中的lyr编码,确定当前质量分层是否为该码块的firstlayer。

可选地,在本申请一些实施例中,所述firstlayer解析电路82可以包括:

多个firstlayer寄存器,用于缓存每个待解码码块的firstlayer信息。

例如,cb0~cb63分别对应一个寄存器,用于存储cb的firstlayer信息,fa0~fa14分别对应一个寄存器,用于存储cb的父节点的firstlayer信息,fafa0~fafa2分别对应一个寄存器,用于存储cb的祖先节点的firstlayer信息。

可选地,在本申请实施例中,每个待解码码块还可以对应一个编码标识信息,用于指示该待编码节点是否被编码过。

可选地,在本申请实施例中,每个待解码码块的父节点或祖先节点也可以对应一个编码标识信息,用于指示该待编码块的父节点或祖先节点是否被编码过。

可选地,在一些实施例中,所述待解码码块,所述待编码块的父节点或祖先节点的编码标识信息可以存储在对应的寄存器中。

例如,寄存器取值为0表示该待解码码块没有被编码过,寄存器取值为1表示该待解码码块被编码过。

在一些实施例中,待解码码块的编码标识信息初始为0,按照质量分层从低到高的顺序解码的过程中,依次根据每个质量分层的数据包中的lyr编码,确定待编码块在每个质量分层是否被编码过,若该待编码块在某个质量分层第一次出现,则将该待编码块的编码标识信息从0更新为1,并将该质量分层作为该待编码块的firstlayer,存储到对应的firstlayer寄存器中。

以下,结合图5,说明firstlayer解析电路82的具体工作原理。

在一种情况中,若在解析某一质量分层的数据包的包头时,待解码码块的lyr编码时解析到0,表示该待解码码块没有在该质量分层出现,此情况下,需要跳过一定数量的码块,也就是说,可以不必对此部分码块进行firstlayer解析,需要跳过的码块的数量可以根据待解析的数据包中码块的存放顺序,标志树中码块的排列顺序,码块的父节点和根节点的编码标识信息中的中至少一项确定。

例如,若码块的父节点未被编码过,可以认为在tagtree中该父节点的其他叶子节点也未出现在该质量分层,因为,如果有其他叶子节点出现在该质量分层,该父节点必然被编码过,此情况下,这些叶子节点可以跳过。

又例如,若码块的祖先节点未被编码过,可以认为在tagtree中该祖先节点的其他叶子节点也未出现在该质量分层,因为,如果有其他叶子节点出现在该质量分层,该祖先节点必然被编码过,此情况下,这些叶子节点可以跳过。

如图4和图5所示,码块在码流中是按照码块的编号的顺序存放的,例如,对于cb16~cb31,码块的顺序是cb16,cb17,cb18,cb19,cb20,cb21…cb30,cb31;而在标志树中,并不是按照这个顺序存放的,具体地,在标志树中,cb16,cb17,cb20和cb21为一组,cb18,cb19,cb22和cb23为一组,cb24,cb25,cb28和cb29为一组,cb26,cb27,cb30和cb31为一组,即每个分组中cb的编号并不是连续的。

这样,在数据包的包头中,若cb16的父节点没有被编码过,则cb17,cb20和cb21必然没有被编码过,此情况下,解析到cb17,cb20和cb21时,可以跳过,cb16和cb24情况类似,cb18和cb26情况类似。

以下,以cb16~cb31中的任一码块对应的lyr编码解析到0(记为情况1),说明需要跳过的码块的个数,cur_cb表示当前待解码码块的编号,add_cb表示需要跳过的码块的个数,具体可以包括如下几种情况:

情况1-1:cur_cb=16,并且其祖先节点未被编码过,则add_cb=16,否则,判断其父节点是否被编码过,如果其父节点未被编码过,则add_cb=2,否则add_cb=1;

也就是说,如果cb16未在当前质量层出现过,并且其祖先节点在该质量分层也未被编码过,则表示该cb16所在的树中的码块都未在该质量分层出现过,此情况下,可以跳过该树中的所有码块,解析下一颗树(即cb32~cb47对应的树)中的码块,因此,下一个待解码的cb为cb32;

或者,如果cb16未在当前质量层出现过,并且cb16的祖先节点被编码过,表示该cb16所在的树中有码块出现过,可能是该树中的第一颗子树中的码块,也可能是该树中的其他子树中的码块,进一步地,可以判断该cb16的父节点是否被编码过,若该cb16的父节点未被编码过,则可以确定该第一颗子树中的码块未在该质量分层出现过,因此可以跳过该第一颗子树,对第二颗子树中的码块进行解析,即对下一个待解码的cb为cb18,或者,若该cb16的父节点被编码过,可以确定该第一颗子树中有码块在该质量分层出现过,进一步可以对该第一颗子树中的下一个码块进行解码,即待解码的cb为cb17。

情况1-2:如果cur_cb=24,并且其父节点未被编码过,则add_cb=2,否则add_cb=1;

若cb24未在该质量分层出现过,并且该cb24的父节点未被编码过,则可以确定该cb24所在的第三颗子树中的码块未在该质量分层出现过,因此可以跳过该第三颗子树,对第四颗子树中的码块进行解析,即对下一个待解码的cb为cb26,或者,若该cb24的父节点被编码过,可以确定该第三颗子树中有码块在该质量分层出现过,进一步可以对该第三颗子树中的下一个码块进行解码,即下一个待解码的cb为cb25。

由于在码流中,码块的信息是按照顺序存放的,例如对于cb16~cb21,则按照cb16,cb17,cb18,cb19,cb20,cb21,cb22的顺序存放,而在tagtree中,并不是按照顺序分组的,即cb16,cb17,cb19,cb20为一组,故如果cb16的父节点在该层中没有包含,则该cb16,cb17,cb19,cb20都不会在当前质量分层中被包含,故引入两个标识信息,skip1,用于表示是否跳过第一颗子树和第三颗子树,以及skip2,用于表示是否跳过第二颗子树和第四颗子树。

情况1-3:如果cur_cb=18或26,并且其父节点被编码过,则add_cb=1,否则判断skip1是否为1,若skip1为1则add_cb=6,否则add_cb=2;

若cb18未在该质量分层出现过,并且cb18的父节点被编码过,则可以确定该cb18所在的第二颗子树中的码块在该质量分层出现过,进一步可以对该第二颗子树中的下一个码块进行解码,即下一个待解析码块为cb19;

或者,若cb18未在该质量分层出现过,并且cb18的父节点未被编码过,则可以确定跳过该cb18所在的第二颗子树,进一步可以判断skip1是否为1,即是否跳过第一颗子树和第三颗子树,若为1,则表示跳过,则对第三颗子树中的第一个码块进行解析,即下一个待解析码块为cb26,否则,表示不跳过,对cb18之后的待解析码块进行解析,由于cb19需要跳过,因此,下一个待解析码块为cb20。

cb26的情况与cb18类似,这里不再赘述。

情况1-4:如果cur_cb=19或27,判断skip1是否为1,为1则add_cb=3,否则add_cb=1;

若当前待解码码块为cb19,可以判断skip1是否为1,即是否跳过第一颗子树和第三颗子树,若为1,表示跳过,则对第二颗子树中的下一个码块进行解析,即下一个待解析码块为cb22,否则,表示不跳过,对cb19之后的待解析码块进行解析,即下一个待解析码块为cb20。

cb27的情况与cb19类似,这里不再赘述。

情况5:如果cur_cb=21或29,判断skip2是否为1,为1则add_cb=3,否则add_cb=1;

若当前待解码的cb为cb21,可以判断skip2是否为1,即是否跳过第二颗子树和第四颗子树,若为1,即表示跳过,则对第三颗子树中的码块进行解析,即下一个待解析码块为cb24,否则,表示不跳过,对cb21之后的待解析码块进行解析,即下一个待解析码块为cb22。

cb29的情况与cb21类似,这里不再赘述。

情况6:对于标志树中的其他cb,add_cb为1。

例如,对于cb1,下一个待解码的码块为cb2。

又例如,对于cb5,下一个待解码的码块为cb6。

再例如,对于cb17,下一个待解码的码块为cb18。

应理解,cb32~cb47,cb48~cb63对应的第三类树中与该cb16~cb31中位置相同的cb的add_cb的确定方式相同,这里不再赘述。

在另一种情况中,若当前待解码码块的lyr编码第一次解析到1(记为情况2),此情况下,可以认为该待解码码块在当前质量分层被编码过,同时可以认为该待编码块的父节点和祖先节点也在该质量分层被编码过,据此,可以更新该待编码块的父节点和祖先节点的编码标识信息,即将该待编码块的父节点和祖先节点的编码标识信息更新为1。根据tagtree中cb的存放顺序,具体可以包括如下情况:

情况2-1:如果cur_cb为16,32,48,判断其祖先节点fafa的编码标识信息是否为0,若祖先节点fafa的编码标识信息为0表示该祖先节点未被编码过,此情况下,将祖先节点fafa的编码标识信息更新为1,若祖先节点fafa的编码标识信息为1,则判断其父节点fa的编码标识信息是否为0,若父节点fa的编码标识信息为0表示该父节点未被编码过,则将其父节点fa的编码标识信息更新为1,或者,若父节点fa的编码标识信息为1表示该父节点被编码过,判断cur_cb对应的叶子节点的编码标识信息是否为0,若叶子节点的编码标识信息为0表示该叶子节点未被编码过,则将该叶子节点的编码标识信息更新为1。

具体而言,若cb16的zbp编码解析到1,则表示该cb16在该质量分层出现过,该cb16的叶子节点,父节点和祖先节点必然被编码过,因此,可以将该cb16的叶子节点,父节点和祖先节点的编码标识信息都更新为已编码过。

情况2-2:如果cur_cb为18,24,26,34,40,42,50,56,58,判断其父节点fa的编码标识信息是否为0,若父节点fa的编码标识信息为0,将父节点fa的编码标识信息更新为1;若父节点fa的编码标识信息为1,判断cur_cb对应的叶子节点的编码标识信息是否为0,若叶子节点的编码标识信息为0,则将该叶子节点的编码标识信息更新为1。

情况2-3:对于其他cb,判断cur_cb对应的叶子节点的编码标识信息是否为0,若叶子节点的编码标识信息为0,则将该叶子节点的编码标识信息更新为1。

若在当前质量分层中,码块的编码标识信息由0更新为1,则表示该码块在该质量分层中第一次出现,即该质量分层为该码块的firstlayer,也就是说,该质量分层中包括该码块的zbp编码,进一步地,该zbp解析电路83可以对该码块的zbp编码进行解析,确定该码块对应的叶子节点的zbp信息。

由码块的zbp编码原理可知,父节点和祖先节点的zbp信息包括在树中第一个出现的码块的zbp编码中,也就是说,树中第一个出现的码块的zbp编码包括该码块的父节点(若有父节点的话)和祖先节点(若有祖先节点的话)的zbp信息,子树中第一个出现的码块的zbp编码包括该码块的父节点的zbp信息。

以解码第三类树中的码块的zbp编码,得到该第三类树中的码块的zbp信息为例,说明具体的zbp解码过程。

步骤1:根据该树中第一个出现的第一码块的zbp编码确定该第一码块的叶子节点,父节点以及祖先节点的节点信息,根据zbp编码原理,解码过程实际上是在该码块的zbp编码中找1的过程:

步骤1-1:确定该第一码块的祖先节点的节点信息;

从当前zbp编码(记为zbp编码0)的最高位开始,查找该zbp编码0中的第一个1,将该第一个1之前的零的个数作为该第一码块的祖先节点的节点信息,该祖先节点的节点信息可以对应于前文所述的cn2-1,然后移位掉该第一个1以及该第一个1之前的比特位,并将其作为下一个步骤的zbp编码,记为zbp编码1;

步骤1-2:确定该第一码块的父节点的节点信息;

从该zbp编码1的最高位开始,查找该zbp编码1中的第一个1,将该第一个1之前的零的个数作为该第一码块的父节点的节点信息,该父节点的节点信息可以对应于前文所述的cn1-1,然后移位掉该第一个1以及该第一个1之前的比特位,将其作为下一个步骤的zbp编码,记为zbp编码2;

步骤1-3:确定该第一码块的叶子节点的节点信息;

从该zbp编码2的最高位开始,查找该zbp编码2中的第一个1,将该第一个1之前的零的个数作为该第一码块的节点信息,该码块的叶子节点的节点信息可以对应于前文所述的cn0-1。

至此,树中第一个出现的码块的叶子节点,父节点和祖先节点的节点信息均已获得。

进一步地,在步骤2中,根据该树中第二个出现的第二码块的zbp编码,确定该第二码块的zbp信息,可选地,该第二码块可以为与该第一码块不属于同一子树的其他子树中第一个出现的码块,此情况下,该第二码块的zbp编码包括该第二码块的叶子节点和父节点的zbp信息,或者也可以为与该第一码块属于同一子树的码块,此情况下,该第二码块仅包括该第二码块的叶子节点的zbp信息。以对第一种情况中的第二码块的解码为例说明,具体过程如下:

在步骤2-1中:从该第二码块的zbp编码的最高位开始,查找该zbp编码中的第一个1,将该第一个1之前的零的个数作为该第二码块的父节点的节点信息,然后移位掉该第一个1以及该第一个1之前的比特位,将其作为下一个步骤的zbp编码,记为zbp编码3;

在步骤2-2中:从该zbp编码3的最高位开始,查找该zbp编码3中的第一个1,将该第一个1之前的零的个数作为该第二码块的节点信息。

至此,获得树中第二个出现的码块的叶子节点和父节点的节点信息。

结合图11,以cb16~cb31的树的重建过程为例进行说明cb的zbp信息的解码过程。如图11所示,开始该树为一颗空树。

若该树中第一个出现的cb为cb25,则该cb25的zbp编码中包括该cb25的父节点和祖先节点的节点信息,三者之间通过1分隔,通过不断查找第一个1出现的位置,并判断其前面有几个0,然后将0的个数写入对应的寄存器中,可以得到祖先节点,父节点和叶子节点的节点信息。

假设cb25的zbp编码为001011,第一个1之前有2个0,则可以将2写入cb25的祖先节点的寄存器中,第二个1之前有1个0,则可以将1写入cb25的父节点的寄存器中,第三个1之前有0个0,则可以将0写入cb25的叶子节点的寄存器中。也就是说,cb25对应的cn2-1=2,cnt1-1=1,cnt0-1=0。

若第二个出现的cb为cb22,cb22的祖先节点已经被解码过,则只需要解码cb22的父节点和cb22本身,若cb22的zbp编码为0001001,第一个1之前有3个0,则向cb22的父节点的寄存器中写入3,第二个1之前有2个0,则向cb22对应的叶子节点的寄存器中写入2。也就是说,cb22对应的cnt1-1=3,cnt0-1=2。

若第三个出现的cb为cb18,cb18的祖先节点和父节点都被解码过,则只需要解码该cb18,cb18的zbp编码为01,1之前有1个0,则将1写入cb18的叶子节点的寄存器中。也就是说,cb18对应的cnt0-1=1。

根据该树中依次出现的cb的zbp编码,可以依次得到该树中的每个节点的节点信息,根据前文所述的cnt0,cn1和cnt2的定义,即cnt0=zbpcb-zbpfa+1,cnt1=zbpfa-zbpfafa+1,cnt2=zbpfafa-0+1,可知cnt0-1=zbpcb-zbpfa,cnt1-1=zbpfa-zbpfafa,cnt2-1=zbpfafa-0,其中,cnt0-1,cnt1-1,cnt2-1分别为码块的叶子节点,父节点和祖先节点的节点信息,从而求三者的累加和可以得到cb的叶子节点的zbp信息zbpcb,即zbpcb=(cnt0-1)+(cnt1-1)+(cnt2-1)。

也就是说,得到整棵树上的每个节点的节点信息之后,可以将码块的叶子节点到祖先节点路径上的节点信息累加,即可得到该码块的叶子节点的zbp信息。

可选地,在本申请一个实施例中,对于三层tagtree,所述zbp解析电路可以包括三级解码单元,第一解码单元,第二解码单元和第三解码单元,分别用于确定码块的祖先节点的节点信息,父节点的节点信息和叶子节点的节点信息。

可选地,所述zbp解析电路还可以包括多个寄存器,用于缓存解析得到的码块的祖先节点的节点信息,父节点的节点信息和叶子节点的节点信息,以及移位后的码块的zbp编码。

可选地,在一些情况下,若码块没有父节点或祖先节点,该码块的父节点或祖先节点的节点信息可以为零。也就是说,对应的寄存器的取值可以为零。

在解析完数据包中的码块的zbp编码之后,进一步地,还可以激活通道数解析电路84,通过该通道数解析电路84解析码块的编码通道数信息,还可以激活截取长度解析电路85,解析该码块的被包含截取长度的信息,同时还可以激活其他解析电路,解析该包头中的其他信息,本申请实施例对此不作赘述。

在解析完该数据包中的每个码块的包头之后,进一步地,包体解析电路和包头提取电路还可以解析数据包中的包体部分,将解析得到的解码数据进行重新组织,并将组织好的数据存储在存储器中,以便于后级电路对该数据做进一步的处理。

以上,结合图3至图11,描述了本申请实施例的编码器和解码器。应理解,本申请实施例的编码方法可以为前述本申请实施例的编码器或包括本申请实施例的编码器的设备实施本申请实施例的技术方案时的方法,相关描述可以参考前述实施例,以下为了简洁,在此不再赘述。本申请实施例的解码方法为前述本申请实施例的解码器或包括本申请实施例的解码器的设备实施本申请实施例的技术方案时的方法,相关描述可以参考前述实施例,以下为了简洁,在此不再赘述。

图12是根据本申请实施例的解码方法的示意性流程图,如图12所示,该解码方法可以包括:

s501,获取当前质量分层的码流的数据包;

s502,对所述数据包的包头中的第一码块的层lyr编码进行解码,确定所述质量分层是否为所述第一码块的第一层,所述第一码块的lyr编码为所述第一码块在所述质量分层的包含信息的编码;

s503,若所述质量分层为所述第一码块的第一层,对所述数据包的包头中所述第一码块的零比特平面zbp编码进行解码,确定所述第一码块的zbp信息。

可选地,在一些实施例中,所述s502可以进一步包括:

对所述第一码块的lyr编码进行解码,确定所述第一码块的编码标识信息,所述第一码块的编码标识信息用于标识所述第一码块在所述质量分层是否被编码过;

根据所述第一码块的编码标识信息,确定所述质量分层是否为所述第一码块的第一层。

例如,若在第一质量分层中,所述第一码块的编码标识信息由未被编码过更新为被编码过,将所述第一质量分层确定为所述第一码块的第一层。

在一些实施例中,所述对所述第一码块的lyr编码进行解码,确定所述第一码块的编码标识信息,包括:

若所述第一码块的lyr编码解析到0,不更新所述第一码块的编码标识信息标识;或者,

若所述第一码块的lyr编码解析到1,将所述第一码块的编码标识信息标识为被编码过。

在一些实施例中,所述方法还包括:若所述第一码块的lyr编码解析到1,更新所述第一码块的高级节点的编码标识信息。

例如,若所述第一码块为标志树中编号为16,32,48的码块,且所述第一码块的第二级高级节点的编码标识信息为未被编码过,将所述第一码块的第二级高级节点的编码标识信息更新为被编码过;或

若所述第一码块为标志树中编号为18,24,26,34,40,42,50,56,58的码块,且所述第一码块的第一级高级节点的编码标识信息为未被编码过,将所述第一码块的第一级高级节点的编码标识信息更新为被编码过。

进一步地,在一些实施例中,所述方法还包括:

将所述第一码块的编码标识信息存储到所述第一码块对应的寄存器中,以及将所述第一码块的高级节点的编码标识信息存储到所述第一码块的高级节点对应的寄存器中。

可选地,在一些实施例中,所述对所述数据包的包头中所述第一码块的零比特平面zbp编码进行解码,包括:

对所述第一码块的zbp编码进行解码,确定所述第一码块的节点信息;

根据所述第一码块的节点信息,确定所述第一码块的zbp信息。

可选地,在一些实施例中,所述对所述第一码块的zbp编码进行解码,确定所述第一码块的节点信息,包括:

根据所述第一码块在标志树中是否具有高级节点,对所述第一码块的zbp编码进行解码,确定所述第一码块的节点信息。

具体可以包括如下几种情况:

情况1:若所述第一码块在标志树中不具有高级节点,对所述第一码块的zbp编码进行解码,确定所述第一码块的叶子节点的节点信息。

具体地,从所述第一码块的zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的叶子节点的节点信息。

情况2:若所述第一码块在所述标志树中具有高级节点,根据所述第一码块在所述标志树中的出现顺序,对所述第一码块的zbp编码进行解码,确定所述第一码块的节点信息。可以分为以下几种情况:

情况2-1,所述第一码块只有第一级高级节点。

情况2-1-1:若所述第一码块只有第一级高级节点,且所述第一码块在所述标志树中不是第一个出现,对所述第一码块的zbp编码进行解码,确定所述第一码块的叶子节点的节点信息。

具体地,从所述第一码块的zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的叶子节点的节点信息。

情况2-1-2:若所述第一码块只有第一级高级节点,且所述第一码块在所述标志树中第一个出现,对所述第一码块的zbp编码进行解码,确定所述第一码块的第一级高级节点信息的节点信息和所述第一码块的叶子节点的节点信息。

具体地,从所述第一码块的zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的第一级高级节点的节点信息;

移位掉所述第一个1以及所述第一个1之前的比特位,得到第一zbp编码;

从所述第一zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的叶子节点的节点信息。

情况2-2:若所述第一码块具有二级高级节点,根据所述第一码块在所述标志树中的出现顺序和/或所述第一码块在所述标志树的子树中的出现顺序,对所述第一码块的zbp编码进行解码,确定所述第一码块的节点信息。

情况2-2-1:若所述第一码块在所述标志树中第一个出现,对所述第一码块的zbp编码进行解码,确定所述第一码块的第二级高级节点信息的节点信息,第一级高级节点信息的节点信息和叶子节点的节点信息。

具体地,从所述第一码块的zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的第二级高级节点的节点信息;

移位掉所述zbp编码的所述第一个1以及所述第一个1之前的比特位,得到第一zbp编码;

从所述第一zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的第一级高级节点的节点信息;

移位掉所述第一zbp编码的所述第一个1以及所述第一个1之前的比特位,得到第二zbp编码;

从所述第二zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的叶子节点的节点信息。

情况2-2-2:若所述第一码块在所述标志树不是第一个出现,且所述第一码块在所述标志树的子树中第一个出现,对所述第一码块的zbp编码进行解码,确定所述第一码块的第一级高级节点的节点信息和叶子节点的节点信息。

具体地,从所述第一码块的zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的第一级高级节点的节点信息;

移位掉所述第一个1以及所述第一个1之前的比特位,得到第一zbp编码;

从所述第一zbp编码的最高位开始,查找第一个1之前的零的个数,将所述第一个1之前的零的个数作为所述第一码块的叶子节点的节点信息。

情况2-2-3:若所述第一码块在所述标志树的子树不是第一个出现,对所述第一码块的zbp编码进行解码,确定所述第一码块的叶子节点的节点信息。

具体地,从所述第一码块的zbp编码的最高位开始,查找第一个1之前的零的个数,所述第一个1之前的零的个数作为所述第一码块的叶子节点的节点信息。

进一步地,可以将从所述第一码块的叶子节点到所述第一码块的根节点路径上的各个节点的节点信息的累加和,确定为所述第一码块的zbp信息。

可选地,在一些实施例中,所述方法还包括:

将从所述第一码块的叶子节点到所述第一码块的根节点路径上的各个节点的节点信息存储到所述各个节点对应的寄存器中。

可选地,在一些实施例中,所述方法还包括:

若所述第一码块的zbp编码解析到0,确定待解码的下一个码块。

可选地,在一些实施例中,所述确定待解码的下一个码块,包括:

根据所述第一码块的第一级高级节点的编码标识信息和/或所述第一码块的第二级高级节点的编码标识信息,确定待解码的下一个码块。

可选地,在一些实施例中,所述根据所述第一码块的第一级高级节点的编码标识信息和/或所述第一码块的第二级高级节点的编码标识信息,确定待解码的下一个码块,包括:

根据所述第一码块的编号和所述第一码块在标志树中的位置,结合所述第一码块的第一级高级节点的编码标识信息和/或所述第一码块的第二级高级节点的编码标识信息,确定待解码的下一个码块。

例如,在所述标志树中,编号为16,17,19,20的码块构成第一颗子树,编号为18,19,22,23的码块构成第二颗子树,编码为24,25,28,29的码块构成第三颗子树,编码为26,27,30,31的码块构成第四颗子树。

对于编号为16-31的码块,可以采用如下方式确定下一个码块,类似地,对于其他编号的码块,可以采用类似的方式确定下一个码块,这里不再赘述。

若所述第一码块的编号为16,并且所述第一码块的第二级高级节点未被编码过,确定待解码的下一个码块的编号为32;或者

若所述第一码块的编号为16,所述第一码块的第二级高级节点被编码过,且所述第一码块的第一级高级节点未被编码过,则确定待解码的下一个码块的编号为18;或者

若所述第一码块的编号为16,所述第一码块的第二级高级节点被编码过,且所述第一码块的第一级高级节点被编码过,则确定待解码的下一个码块的编号为17;或者

若所述第一码块的编号为24,并且所述第一码块的第一级高级节点未被编码过,确定待解码的下一个码块的编号为26;或者

若所述第一码块的编号为24,并且所述第一码块的第一级高级节点被编码过,确定待解码的下一个码块的编号为25;或者

若第一码块的编号为18或26,并且所述第一码块的第一级高级节点被编码过,确定下一个待编码的码块的编号分别为19或27;或者

若第一码块的编号为18或26,所述第一码块的第一级高级节点未被编码过,若第一标识信息指示跳过所述标志树的第一颗子树和第三颗子树,确定待解码的下一个码块的编号分别为26和32,或者若第一标识信息指示不跳过所述标志树的第一颗子树和第三颗子树,确定待解码的下一个码块的编号分别为20和28;或者

若第一码块的编号为19或27,第一标识信息指示跳过所述标志树的第一颗子树和第三颗子树,确定待解码的下一个码块的编号分别为22和30,或者若第一标识信息指示不跳过所述标志树的第一颗子树和第三颗子树,确定待解码的下一个码块的编号分别为20和28;或者

若第一码块的编号为21或29,若第二标识信息指示跳过所述标志树的第二颗子树和第四颗子树,确定待解码的下一个码块的编号分别为24和32,或者若第二标识信息指示不跳过所述标志树的第一颗子树和第三颗子树,确定待解码的下一个码块的编号分别为22和30;或者

若第一码块的编号为16至31中的其他编号,则需要跳过的码块的个数为1。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriberline,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(digitalvideodisc,dvd))、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

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