实现分层变长编解码的方法
技术领域
本发明涉及编码技术领域,尤其涉及一种分层变长编解码技术。
背景技术
可伸缩视频编码(也可以称为分层变长编码)是一种应用广泛的视频编码技术,可伸缩视频编码能够通过编码之后的处理来实现视频码流任意的裁减。可伸缩视频编码的码流中包括一个基本层和一个以上的增强层。
目前,在AVC(一种先进视频压缩标准)视频编码标准的SVC(视频分层编码)扩展部分中,规定基本层编码可以与H.264/AVC标准兼容。
在H.264/AVC的分层编码扩展SVC标准采用了MCTF(基于运动补偿的时间滤波)的算法框架,如图1所示,从而可以较好地实现空间分层、时间分层、质量分层以及复杂度分层等功能。其中所述的质量分层具体包括CGS(Coarse Granularity Scalability,粗糙粒度可变分层)和FGS(FineGranularity Scalability,精细粒度可变分层)。
目前,在SVC的FGS增强层中借用了H.264/AVC中的CBP(编码块模式)概念,在CAVLC(上下文自适应变长编码)该符号时,利用基于基本层CBP值的上下文,来编码FGS增强层中的CBP。为了编码CBP这个符号,具体是根据符号数组uiCode[2]的长度和0符号的概率,在以下三个变长编码表(表1至表3)中自适应的选择其中一个表来编码CBP比特位。
表1
Symbol/符号 |
Codeword/码字 |
01 |
01 |
表2
Symbol |
codeword |
000 |
0 |
001 |
100 |
010 |
101 |
011 |
11100 |
100 |
110 |
Symbol |
codeword |
101 |
11101 |
110 |
11110 |
111 |
11111 |
表3
Symbol |
codeword |
0000 |
0 |
0001 |
100 |
0010 |
101 |
0011 |
11100 |
0100 |
1100 |
0101 |
11101 |
0110 |
111100 |
0111 |
11111100 |
1000 |
1101 |
1001 |
111101 |
1010 |
1111100 |
1011 |
11111101 |
1100 |
1111101 |
1101 |
11111110 |
1110 |
111111110 |
Symbol |
codeword |
1111 |
111111111 |
具体一点讲,目前针对FGS增强层的编码处理过程如图2所示,包括:
步骤21:设定变量uiCode[2],该变量记录着根据基本层上下文拆分当前FGS增强层CBP对应位,构造基本层分别是0和1时的符号数组uiCode[2];
步骤22:设定变量uiLen[2],该变量记录着根据基本层上下文计算符号数组uiCode[2]的长度;
步骤23:建立统计变量m_uiCbpStats[3][2],用于统计基本层分别是0和1,增强层CBP对应位也分别为0和1的个数;
在每个FGS增强层条带建立时,初始化该变量数组m_uiCbpStats[3][2];
步骤24:判断已经编码的宏块是否为增强层条带最后的一宏块,如果是,则编码过程结束,否则执行步骤25:
步骤25:对每个待编码的FGS增强层宏块根据上下文拆分CBP比特位计算符号数组uiCode[2]和符号长度uiLen[2];
步骤26:根据符号长度uiLen[2]和统计变量数组m_uiCbpStats[3][2]决定最优的VLC(变长编码)方法,即选择对应的VLC表进行编码;
步骤27:根据所选的最优VLC编码方法,即相应的VLC表对符号数组uiCode[2]进行编码。
步骤28:基于上下文,更新统计变量数组m_uiCbpStats[3][2],即通过更新过程对该变量数组进行更新;
步骤29:根据设定的阈值对统计变量数组进行处理;
具体为:如果m_uiCbpStats[uiB][0]+m_uiCbpStats[uiB][1]大于阈值512,分别右移4位,避免统计变量溢出。
可以看出,在上述处理过程中,VLC码表的选择过程计算复杂,具体是通过嵌套判断才能决定最优编码表,导致相应的编码处理过程尤其不适合硬件的实现。同时,为了选择最优的VLC码表,在每个宏块中,都必须更新统计变量数组m_uiCbpStats[3][2]。而且,为了避免统计变量数组m_uiCbpStats[3][2]溢出和保持不必要的尺寸大小,在每个宏块中还需要进行有条件的缩放处理,因而进一步导致整个编码过程中计算处理较为复杂。同样,在解码端也同样需要经过上述复杂程度相当的解码处理过程。
因此,上述技术方案使得在VLC编码器中编码效率大大降低。
在现有技术中,针对SVC的空间增强层和CGS增强层编码,具体对CBP的编码是沿用了H.264/AVC的编码方法。也就是说,是根据CBP所代表的宏块是帧间编码模式还是帧内编码模式,采用表4映射编码CBP符号。
表4
采用该方法实现针对CGS增强层和空间增强层的编码时,由于基本层和增强层之间的相关性,使得存在信息冗余,冗余信息的存在必然会影响到编码的性能。
发明内容
本发明的目的是提供一种实现分层变长编解码的方法,以有效降低针对分层编码中的增强层编解码的计算复杂度,从而可以实现低计算复杂度的CAVLC编解码方案。
本发明的目的是通过以下技术方案实现的:
本发明提供了一种实现分层变长编码的方法,包括:
A、在进行分层变长编码过程中,将基本层的编码块模式CBP比特位与当前增强层的CBP比特位进行相关运算,得到相关运算结果,所述相关运算,包括以下其中一种或任意组合:异或、比较或同或运算;
B、根据基本层的CBP比特位的特征对所述得到的相关运算结果按照预定的编码方式进行编码,获得针对当前增强层的CBP比特位的编码结果;所述预订的编码方式,包括:根据基本层CBP比特位中可能包含“1”或“0”的数量分别设置的对应不同数量的编码方式。
所述的步骤A包括:
将基本层的CBP比特位与待编码的增强层的CBP比特位之间进行异或、比较或同或运算,获得异或、比较或同或运算结果。
所述的步骤A包括:
A1、当进行分层变长编码时,判断当前编码块是否为当前增强层的最后一个宏块,如果是,则编码过程结束,否则,执行步骤A2;
A2、将基本层的CBP比特位与当前增强层的CBP比特位进行相关运算,得到相关运算结果。
本发明中,在执行所述的步骤B之前还包括:
C、根据基本层CBP比特位中可能包含“1”或“0”的数量把相关运算结果映射到不同的编码方式,获得基本层CBP比特位中包含的“1”或“0”的数量值对应的一种编码方式。
所述的步骤C包括:
设置一组编码方式表,每张编码方式表对应着一个基本层CBP比特位中包含“1”或“0”的数量,且在所述的编码方式表中设置有不同的增强层的CBP比特位和基本层CBP比特位作相关运算后结果所对应的编码结果。
本发明中,当CBP比特位为四位,则基本层CBP比特位中包含的“1”个数0至4分别对应的一组编码方式表具体包括下述五张表:
第一表:
符号 |
码字 |
0000 |
0 |
0001 |
100101 |
0010 |
100000 |
0011 |
10110 |
0100 |
100100 |
0101 |
10111 |
0110 |
1010110 |
0111 |
101010 |
1000 |
100111 |
1001 |
1010111 |
1010 |
100010 |
符号 |
码字 |
1011 |
100001 |
1100 |
10100 |
1 101 |
100011 |
1110 |
100110 |
1111 |
11 |
第二表:
符号 |
码字 |
0000 |
1001 |
0001 |
1010 |
0010 |
1011 |
0011 |
00111 |
0100 |
00100 |
0101 |
11110 |
0110 |
00101 |
0111 |
010 |
1000 |
1000 |
1001 |
1110 |
1010 |
111110 |
1011 |
011 |
1100 |
00110 |
符号 |
码字 |
1101 |
110 |
1110 |
000 |
1111 |
111111 |
第三表:
符号 |
码字 |
0000 |
011 |
0001 |
1101 |
0010 |
1111 |
0011 |
000 |
0100 |
1100 |
0101 |
100 |
0110 |
1110 |
0111 |
1011110 |
1000 |
10110 |
1001 |
1010 |
1010 |
010 |
1011 |
1011100 |
1100 |
001 |
1101 |
10111110 |
1110 |
1011101 |
第四表:
符号 |
码字 |
0000 |
0110 |
0001 |
10 |
0010 |
11 |
0011 |
011101 |
0100 |
010 |
0101 |
0111001 |
0110 |
01111011 |
0111 |
0111101010 |
1000 |
00 |
1001 |
0111100 |
1010 |
011111 |
1011 |
01110000 |
1100 |
011110100 |
1101 |
01110001 |
1110 |
01111010110 |
1111 |
01111010111 |
第五表:
符号 |
码字 |
0000 |
0 |
0001 |
1111 |
0010 |
110 |
0011 |
101100 |
0100 |
1010 |
0101 |
1110 |
0110 |
10111110 |
0111 |
101111110 |
1000 |
100 |
1001 |
101101 |
1010 |
101110 |
1011 |
1011111110 |
1100 |
10111111110 |
1101 |
101111111110 |
1110 |
101111111111 |
1111 |
1011110 |
所述的增强层的CBP比特位作相关运算后结果的编码方式还包括:定长编码方式或Golomb编码方式。
所述的步骤B包括:
确定基本层的CBP比特位中包含的“1”或“0”的数量,并在一组编码方式表中选择与该数量对应的一个编码方式表;
在所述的编码方式表中确定该增强层CBP比特位对应的编码结果,作为针对当前增强层的CBP比特位的编码结果。
所述的步骤B还包括:
将选择的编码方式表的信息写入码流中,在解码端,根据码流中的该信息选择对应的用于解码操作的编码方式表。
所述的分层变长编码为:
精细粒度可变分层FGS编码、粗糙粒度可变分层CGS编码或空间分层编码。
本发明中,当所述的分层变长编码为CGS编码或空间分层编码时,在执行所述的步骤A之前还包括:
确定增强层的CBP比特位所属的宏块与基本层宏块为相同的编码模式,则执行步骤A。
所述的步骤A包括:
编码增强层CBP中属于色度的两位,之后,再将基本层的CBP比特位与当前增强层的CBP比特位进行相关运算,得到相关运算结果。
所述的方法应用于视频分层编码或音频分层编码中。
本发明还提供了一种实现分层变长解码的方法,包括:
解码端接收码流并根据基本层的CBP比特位的特征或者根据码流中传输的编码端的编码方式选择信息确定相应的预定的编码方式,并利用确定的编码方式对码流进行解码操作获得解码信息;
对所述的解码信息与基本层CBP比特位之间进行在编码端进行的相关运算的逆运算处理获得相应的增强层的CBP比特位,获得针对增强层的CBP的解码结果;
其中,所述相关运算,包括以下其中一种或任意组合:异或、比较或同或运算。
本发明还提供了一种实现分层变长编码的方法,包括:
D、设置不同的基本层CBP比特位中包含的“1”或“0”的数量分别对应的编码方式;
E、根据基本层CBP比特位中包含的“1”或“0”的数量在设置的编码方式中确定该基本层CBP比特位对应的编码方式;
F、利用该基本层CBP比特位对应的编码方式对增强层CBP比特位进行编码。
由上述本发明提供的技术方案可以看出,本发明描述了一种新的CAVLC编码方法,编码CBP比特位时,在几乎不改变编码效率,即码率几乎不改变的情况下,大幅度降低编解码的计算复杂度。
因此,本发明可以在不降低编码性能的前提下,大大降低FGS增强层编解码的计算复杂度,便于编码过程的硬件实现,从而可以有效利用CAVLC编码的优点进行编解码操作,以便于提高整个编码系统的编码性能。
而且,本发明提供的技术方案当应用于空间增强层和CGS增强层编码中时,还可以有效去除CGS增强层和空间增强层的冗余信息,从而提高针对空间增强层和CGS增强层的编码性能。
附图说明
图1为MCTF算法的框架示意图;
图2为现有技术中实现FGS增强层编码的过程示意图;
图3为本发明提供的FGS编解码结构示意图;
图4为本发明提供的FGS编码过程示意图;
图5为本发明提供的空间分层编解码结构示意图;
图6为本发明提供的空间分层编码过程示意图。
具体实施方式
本发明实现的目的是为了使H.264/AVC的可伸缩扩展部分SVC能得到广泛的应用,为此,需要令SVC能在计算复杂度受限的设备上应用,即需要提供一种低计算复杂度的CAVLC编码方法来满足这一要求。
本发明在实现过程中,主要是将基本层的CBP比特位与当前增强层的CBP比特位进行相关运算,如异或运算,或者其他运算方式,如比较运算操作,相同位对应取“0”,不相同位对应取“1”;或者同或运算等,并得到相应的相关运算结果;然后,根据基本层的CBP比特位的特征确定可以采用的预定的编码方式,并利用该确定的编码方式对所述的相关运算结果进行编码,这样,便可以获得针对当前增强层的CBP比特位的编码结果。
其中,所述的编码方式可以预先分别设置于收发两端设备中,以便于在编码解码过程中可以根据需要选择相应的编码方式进行编码及解码操作。本发明中,根据基本层CBP比特位中可能包含“1”或“0”的数量分别设置对应不同数量的编码方式,例如,CBP比特位中包含0个“1”时对应一个编码方式,包含1个“1”时对应另一个编码方式,依次类推,所述的编码方式具体可以为一个编码方式表,该编码方式表中记录着所述相关运算结果对应的编码结果。
本发明提供的技术方案具体可以应用于视频分层编码中,也可以应用于音频分层编码过程中。
在后续的描述中,将结合本发明应用于视频编码过程中为例,对本发明的具体实现进行详细的说明,当然,本发明并不局限于以下应用。
本发明在具体实现过程中可以应用于对FGS增强层的编码,也可以应用于对空间分层或CGS增强层的编码,下面将分别对两种编码过程中应用本发明的具体实现进行详细阐述。
(一)本发明应用于对FGS增强层编码
FGS增强层编码实现过程的结构如图3所示,本发明针对现有的编码结构进行了改进,主要体现在针对图3中增强层CBP编码过程的改进。在图3中,虚线左侧的处理部分为编码端,虚线右侧的处理部分为解码端,在编解码端上方的VLC或VLD(含CBP编码)部分为负责基本层CBP编码,在编解码端下方的VLC或VLD(含CBP编码)部分为负责增强层CBP编码。本发明正是对图3中的负责增强层CBP编码的部分进行了改进,充分考虑了基本层CBP与增强层CBP之间的相关性,并可以不增加编码过程中计算的复杂度。即充分利用基本层CBP和当前FGS增强层CBP的信息相关性,去除冗余信息,编码FGS增强层中CBP比特位,在保持编码效率的前提下,大幅度降低了计算复杂度,便于硬件实现。
基于本发明实现的设备应用在视频编解码系统中的一个或多个视频增强层的熵编码阶段。如图3所示本发明设备所体现的FGS可分层视频编码系统是H.264/AVC视频编码标准的可分层扩展SVC的一部分。
下面再结合附图对针对FGS增强层CBP的具体编码过程进行详细描述,如图4所示,相应的编码处理过程包括:
步骤41:在编解码端分别设置相应的一组编码方式表,不同的编码方式表对应着基本层CBP比特位中包含的“1”的数量,在所述的编码方式表中包含符号和码字;
例如,当CBP比特位包含的“1”的数量分别为0、1、2、3和4时,则分别依次对应以下五张编码方式表,如表5至表9所示:
表5
Symbol(符号) |
Codeword(码字) |
0000 |
0 |
0001 |
100101 |
0010 |
100000 |
0011 |
10110 |
0100 |
100100 |
0101 |
10111 |
0110 |
1010110 |
0111 |
101010 |
1000 |
100111 |
1001 |
1010111 |
1010 |
100010 |
1011 |
100001 |
1100 |
10100 |
1101 |
100011 |
1110 |
100110 |
1111 |
11 |
表6
Symbol |
codeword |
0000 |
1001 |
0001 |
1010 |
0010 |
1011 |
0011 |
00111 |
0100 |
00100 |
0101 |
11110 |
0110 |
00101 |
0111 |
010 |
1000 |
1000 |
1001 |
1110 |
1010 |
111110 |
1011 |
011 |
1100 |
00110 |
1101 |
110 |
1110 |
000 |
1111 |
111111 |
表7
Symbol |
codeword |
0000 |
011 |
0001 |
1101 |
Symbol |
codeword |
0010 |
1111 |
0011 |
000 |
0100 |
1100 |
0101 |
100 |
0110 |
1110 |
0111 |
1011110 |
1000 |
10110 |
1001 |
1010 |
1010 |
010 |
1011 |
1011100 |
1100 |
001 |
1101 |
10111110 |
1110 |
1011101 |
1111 |
10111111 |
表8
Symbol |
codeword |
0000 |
0110 |
0001 |
10 |
0010 |
11 |
0011 |
011101 |
Symbol |
codeword |
0100 |
010 |
0101 |
0111001 |
0110 |
01111011 |
0111 |
0111101010 |
1000 |
00 |
1001 |
0111100 |
1010 |
011111 |
1011 |
01110000 |
1100 |
011110100 |
1101 |
01110001 |
1110 |
01111010110 |
1111 |
01111010111 |
表9
Symbol |
codeword |
0000 |
0 |
0001 |
1111 |
0010 |
110 |
0011 |
101100 |
0100 |
1010 |
0101 |
1110 |
Symbol |
codeword |
0110 |
10111110 |
0111 |
101111110 |
1000 |
100 |
1001 |
101101 |
1010 |
101110 |
1011 |
1011111110 |
1100 |
10111111110 |
1101 |
101111111110 |
1110 |
101111111111 |
1111 |
1011110 |
步骤42:确定当前需要对FGS增强层进行VLC编码;
步骤43:判断上一个已经编码完成的宏块是否为该增强层条带最后的一个宏块,如果是,则表示编码过程已经完成,即编码过程结束,否则,执行步骤44;
步骤44:将基本层CBP比特位与增强层CBP比特位进行异或运算,获得异或运算结果;
在FGS增强层的熵编码过程中,由于当前增强层的CBP比特位和基本层的CBP比特位有很大的相关性,因此,为了提高编码效率,必须尽量去除其中的信息冗余,具体采用的去除冗余信息的方式是进行异或运算操作,得到一个符号值DS;
步骤45:根据基本层CBP比特位中包含的“1”的个数选择对应的编码方式表,并利用对应的编码方式表对异或运算结果DS进行编码;
具体为根据基本层CBP比特位中的4个比特位中“1”的个数确定对应的表5至表9中的一个表用来编码符号DS;例如,当基本层CBP比特位等于“0001”时,其中含有一个“1”,则采用所述的表6来编码DS;
具体的编码方式为将DS与表6中的符号部分匹配,匹配结果对应的码字即为针对DS的编码结果,例如,DS为“1110”则针对DS采用表6的编码结果为“000”;
需要说明的是:在进行异或操作并得到符号DS后,可以不完全采用上述表5至表9提供的编码方式表进行编码,也可以将表5至表9中的部分表与其他编码方式结合起来作为可供选择的DS编码方式,例如,当基本层CBP比特位中含有1个“1”时,采用定长编码,或采用Golomb编码等,而不再采用表6对DS进行编码,而当基本层CBP比特位中含有2个“1”时,则可以选择表7作为DS的编码方式;
另外,为便于解码端确定对应的编码方式表对该DS进行解码,还可以将该步骤中选择编码方式的结果信息写入码流中传输给解码端,例如,若选择表6进行DS编码,则可以将表6对应的识别信息写入码流中。
在解码端,接收所述的码流后,需要对码流进行解码处理。由于基本层的CBP比特位信息已经先解码出来了,因此,可以根据其中的“1”的个数来选择表5到表9中的其中一个编码方式表来解码符号DS,然后,再利用异或基本层CBP比特位还原增强层CBP比特位,从而实现了针对FGS增强层CBP比特位的解码处理。如果在前面的步骤45中,已经将选择的编码方式表的信息写入码流,则在解码端只需要根据码流中的信息确定相应的编码方式表,并利用该表进行DS解码操作即可。在解码端,相应的处理过程主要是编码端采用的编码过程的一个逆向的处理过程,即在解码端经过相应的解码处理获得编码前的信息,从而实现针对码流的解码操作。
(二)本发明应用于CGS增强层和空间增强层编码
本发明还可以应用于CGS和空间可分层视频编码系统中,其中CGS和空间可分层视频编码系统是H.264/AVC视频编码标准的可分层扩展SVC的一部分,如图5所示,其实,CGS可分层编码是空间可分层编码的一种特例,当空间可分层编码的增强层和基本层分辨率相同,只是量化系数不同时,即为CGS方法。
在图5中,虚线左侧的处理部分为编码端,虚线右侧的处理部分为解码端,在编解码端上方的VLC或VLD(含CBP编码)部分为负责基本层CBP编码,在编解码端下方的VLC或VLD(含CBP编码)部分为负责增强层CBP编码。本发明的改进主要体现在图5中的编解码端下方的VLC(含CBP编码)部分,同样,改进过程中考虑了基本层CBP与增强层CBP之间的相关性。
本发明应用于CGS增加层和空间增强层编码的编码处理过程如图6所示,包括以下步骤:
步骤61:在编解码端设置相应的一组编码方式表信息,具体的编码方式表仍可以采用前面描述的表5至表9,也可以采用其他内容的编码方式表;
步骤62:判断上一个已经编码的宏块是否为该增强层条带最后一个宏块,如果是,则表明编码过程结束,否则,执行步骤63:
步骤63:判断当前基本层对应的宏块和增强层对应的宏块的编码模式是否相同,如果相同,则执行步骤64,否则,执行步骤67;
即对于空间增强层MCTF中的变换过程产生的CBP符号,先判断CBP所属宏块和该宏块对应的基本层宏块是否属于相同编码模式,如果相同,则执行步骤64,否则,执行步骤67;
根据需要,在空间增强层编码中也可以不判断当前增强层和基本层宏块的编码模式是否相同,即可以省略步骤63,直接执行步骤64;
步骤64:编码增强层CBP中属于色度的两位,执行步骤65,即利用基本层CBP的相关信息,编码其中属于亮度的4位:
步骤65:将基本层CBP比特位与当前增强层CBP比特位进行异或操作,得到一个符号值DS;
步骤66:根据基本层CBP比特位包含的4个比特位中“1”的个数,采用表5至表9中的一个编码方式表来编码符号DS;
例如,当基本层CBP比特位等于“0001”时,其中含有一个“1”,则用表6来编码DS;
需要说明的是:在进行异或操作并得到符号DS后,可以不完全采用上述表5至表9提供的编码方式表进行编码,也可以将表5至表9中的部分表与其他编码方式结合起来作为可供选择的DS编码方式,例如,当基本层CBP比特位中含有1个“1”时,采用定长编码,或采用Golomb编码等,而不再采用表6对DS进行编码,而当基本层CBP比特位中含有2个“1”时,则可以选择表7作为DS的编码方式;
另外,为便于解码端确定对应的编码方式表对该DS进行解码,还可以将该步骤中选择编码方式的结果信息写入码流中传输给解码端,例如,若选择表6进行DS编码,则可以将表6对应的识别信息写入码流中。
步骤67:当前增强层CBP所属宏块和对应的基本层宏块不属于相同的编码模式,则按H.264/AVC原有的方法编码CBP,当然也可以采用其他预定的编码方式进行编码。
针对图6所示的编码处理,在解码端的处理与前面(一)中描述的解码端的工作过程类似,在此不再详述。
本发明在具体实现过程中,考虑到基本层CBP比特位与增强层CBP比特位之间的相关联性,还可以采用以下的编码方式实现针对增强层CBP比特位的编码:基本层CBP比特位中含有“1”的个数,直接在表5至表9中选择一个对应的编码方式表,并利用该编码方式表编码FGS增强层CBP比特位;或者,根据基本层CBP比特位中含有“0“的个数,直接在表5至表9中选择一个对应的编码方式表,并利用该编码方式表直接编码FGS增强层CBP比特位。在该编码FGS增强层CBP比特位过程中,也可以采用其他编码方式表替代表5至表9所示的五张表。并且,根据需要,还可以在选择确定采用的编码方式表后,将选择的编码方式表信息写入码流中,从而使得解码端在接收到码流后无需进行选择处理,便可以确定解码用的编码方式表。如果在解码端未将选择的编码方式表信息写入码流,则需要在解码端采用与编码端相同在后面选择编码方式表,并利用选择的编码方式表进行解码操作。
类似的,还可以利用上述思想对CGS增强层或空间增强层CBP比特位进行编码,即直接根据基本层CBP比特位包含的“1”或“0”的数量选择对应的编码方式表,并利用该编码方式表对CGS增强层或空间增强层CBP比特位进行编码。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。